gnunet-svn
[Top][All Lists]
Advanced

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

[gnurl] 263/264: Merge tag 'curl-7_70_0'


From: gnunet
Subject: [gnurl] 263/264: Merge tag 'curl-7_70_0'
Date: Thu, 30 Apr 2020 16:09:26 +0200

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

nikita pushed a commit to branch master
in repository gnurl.

commit e78a29c1d7e4c0d9d5d2400f8935fe6c6db9852e
Merge: 55ddc6582 53cdc2c96
Author: nikita <address@hidden>
AuthorDate: Thu Apr 30 14:57:43 2020 +0200

    Merge tag 'curl-7_70_0'
    
    7.70.0

 .azure-pipelines.yml                               |  187 +-
 .cirrus.yml                                        |   37 +-
 .dir-locals.el                                     |   21 +
 .lgtm.yml                                          |   21 +
 .mailmap                                           |   14 +-
 .travis.yml                                        |   46 +-
 CMake/CMakeConfigurableFile.in                     |   21 +
 CMake/CurlSymbolHiding.cmake                       |   21 +
 CMake/FindBearSSL.cmake                            |   21 +
 CMake/FindGSS.cmake                                |   21 +
 CMake/FindNSS.cmake                                |   21 +
 tests/valgrind.pm => CMake/FindWolfSSL.cmake       |   24 +-
 CMake/Macros.cmake                                 |   21 +
 CMake/OtherTests.cmake                             |   27 +
 CMake/Platforms/WindowsCache.cmake                 |   21 +
 CMake/Utilities.cmake                              |   21 +
 CMake/cmake_uninstall.cmake.in                     |   21 +
 CMake/gnurl-config.cmake.in                        |   21 +
 CMakeLists.txt                                     |   22 +-
 MacOSX-Framework                                   |   21 +
 Makefile.am                                        |   48 +-
 RELEASE-NOTES                                      |  332 +-
 SECURITY.md                                        |    2 +-
 acinclude.m4                                       |    4 +
 appveyor.yml                                       |  141 +-
 buildconf                                          |   16 +-
 configure.ac                                       |  137 +-
 docs/CMakeLists.txt                                |   21 +
 docs/EXPERIMENTAL.md                               |    1 +
 docs/FEATURES                                      |    3 +
 docs/HTTP2.md                                      |    2 +-
 docs/HTTP3.md                                      |   42 +-
 docs/INTERNALS.md                                  |    2 +-
 docs/KNOWN_BUGS                                    |   54 +-
 docs/MQTT.md                                       |   61 +
 docs/Makefile.am                                   |    6 +-
 docs/README.cmake                                  |   16 -
 docs/README.netware                                |   24 -
 docs/README.win32                                  |   23 -
 docs/RELEASE-PROCEDURE.md                          |    2 +
 docs/SSLCERTS.md                                   |    4 +-
 docs/THANKS                                        |   36 +
 docs/THANKS-filter                                 |   22 +
 docs/TODO                                          |   68 +-
 docs/cmdline-opts/CMakeLists.txt                   |   21 +
 docs/cmdline-opts/Makefile.am                      |    5 +-
 docs/cmdline-opts/Makefile.inc                     |   27 +-
 docs/cmdline-opts/compressed.d                     |    6 +-
 docs/cmdline-opts/cookie.d                         |    2 +-
 docs/cmdline-opts/data.d                           |    2 +-
 docs/cmdline-opts/gen.pl                           |   95 +-
 docs/cmdline-opts/output.d                         |   10 +-
 docs/cmdline-opts/page-header                      |   10 +-
 docs/cmdline-opts/ssl-revoke-best-effort.d         |    7 +
 docs/cmdline-opts/url.d                            |    3 +
 docs/cmdline-opts/write-out.d                      |    3 +
 docs/examples/Makefile.example                     |    2 +-
 docs/examples/Makefile.m32                         |    4 +-
 docs/examples/Makefile.netware                     |   21 +
 docs/examples/adddocsref.pl                        |   21 +
 docs/examples/crawler.c                            |    5 +-
 docs/examples/makefile.dj                          |    2 +-
 docs/examples/sessioninfo.c                        |    3 +-
 docs/examples/version-check.pl                     |    2 +-
 docs/gnurl-config.1                                |    6 +-
 docs/libcurl/CMakeLists.txt                        |   21 +
 docs/libcurl/Makefile.inc                          |   22 +
 docs/libcurl/getinfo-times                         |   27 -
 docs/libcurl/gnurl_easy_getinfo.3                  |    4 +-
 docs/libcurl/gnurl_easy_init.3                     |    2 +-
 docs/libcurl/gnurl_easy_perform.3                  |    2 +-
 docs/libcurl/gnurl_easy_strerror.3                 |    2 +-
 docs/libcurl/gnurl_escape.3                        |    2 +-
 docs/libcurl/gnurl_formadd.3                       |    2 +-
 docs/libcurl/gnurl_getenv.3                        |    2 +-
 docs/libcurl/gnurl_mime_type.3                     |    2 +-
 docs/libcurl/gnurl_multi_assign.3                  |    2 +-
 docs/libcurl/gnurl_multi_info_read.3               |    2 +-
 docs/libcurl/gnurl_multi_init.3                    |    2 +-
 docs/libcurl/gnurl_multi_strerror.3                |    2 +-
 docs/libcurl/gnurl_multi_timeout.3                 |    2 +-
 docs/libcurl/gnurl_share_init.3                    |    2 +-
 docs/libcurl/gnurl_share_setopt.3                  |    2 +-
 docs/libcurl/gnurl_share_strerror.3                |    2 +-
 docs/libcurl/gnurl_unescape.3                      |    2 +-
 docs/libcurl/gnurl_version.3                       |    2 +-
 docs/libcurl/gnurl_version_info.3                  |   25 +-
 docs/libcurl/libgnurl-easy.3                       |    2 +-
 docs/libcurl/libgnurl-errors.3                     |    6 +-
 docs/libcurl/libgnurl-multi.3                      |    4 +-
 docs/libcurl/libgnurl-security.3                   |   28 +-
 docs/libcurl/libgnurl.3                            |    2 +-
 docs/libcurl/libgnurl.m4                           |    2 +-
 docs/libcurl/mksymbolsmanpage.pl                   |    2 +-
 docs/libcurl/opts/CMakeLists.txt                   |   21 +
 docs/libcurl/opts/GNURLINFO_CERTINFO.3             |    2 +-
 docs/libcurl/opts/GNURLINFO_CONDITION_UNMET.3      |    8 +-
 .../opts/GNURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3     |    2 +-
 .../opts/GNURLINFO_CONTENT_LENGTH_UPLOAD_T.3       |    2 +-
 docs/libcurl/opts/GNURLINFO_COOKIELIST.3           |    2 +-
 docs/libcurl/opts/GNURLINFO_OS_ERRNO.3             |    2 +-
 docs/libcurl/opts/GNURLINFO_PROTOCOL.3             |    2 +-
 docs/libcurl/opts/GNURLINFO_REDIRECT_TIME.3        |    2 +-
 docs/libcurl/opts/GNURLINFO_RESPONSE_CODE.3        |    2 +-
 docs/libcurl/opts/GNURLINFO_RETRY_AFTER.3          |    2 +-
 docs/libcurl/opts/GNURLINFO_SCHEME.3               |    2 +-
 docs/libcurl/opts/GNURLINFO_SIZE_DOWNLOAD_T.3      |    2 +-
 docs/libcurl/opts/GNURLINFO_SIZE_UPLOAD_T.3        |    2 +-
 docs/libcurl/opts/GNURLINFO_SPEED_DOWNLOAD_T.3     |    2 +-
 docs/libcurl/opts/GNURLINFO_SPEED_UPLOAD_T.3       |    2 +-
 docs/libcurl/opts/GNURLMOPT_MAXCONNECTS.3          |    2 +-
 docs/libcurl/opts/GNURLMOPT_PUSHFUNCTION.3         |    2 +-
 docs/libcurl/opts/GNURLOPT_CHUNK_DATA.3            |    2 +-
 docs/libcurl/opts/GNURLOPT_CLOSESOCKETDATA.3       |    2 +-
 docs/libcurl/opts/GNURLOPT_CLOSESOCKETFUNCTION.3   |    2 +-
 docs/libcurl/opts/GNURLOPT_CONNECTTIMEOUT_MS.3     |    2 +-
 docs/libcurl/opts/GNURLOPT_CONNECT_TO.3            |    2 +-
 docs/libcurl/opts/GNURLOPT_COOKIE.3                |    2 +-
 docs/libcurl/opts/GNURLOPT_COPYPOSTFIELDS.3        |    2 +-
 docs/libcurl/opts/GNURLOPT_CUSTOMREQUEST.3         |    2 +-
 docs/libcurl/opts/GNURLOPT_DEBUGDATA.3             |    2 +-
 docs/libcurl/opts/GNURLOPT_DEBUGFUNCTION.3         |    2 +-
 docs/libcurl/opts/GNURLOPT_DEFAULT_PROTOCOL.3      |    2 +-
 docs/libcurl/opts/GNURLOPT_ERRORBUFFER.3           |    2 +-
 docs/libcurl/opts/GNURLOPT_EXPECT_100_TIMEOUT_MS.3 |    2 +-
 docs/libcurl/opts/GNURLOPT_FAILONERROR.3           |    2 +-
 docs/libcurl/opts/GNURLOPT_FTP_USE_EPRT.3          |    2 +-
 .../opts/GNURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3      |    2 +-
 docs/libcurl/opts/GNURLOPT_HTTPHEADER.3            |    2 +-
 docs/libcurl/opts/GNURLOPT_HTTPPROXYTUNNEL.3       |    2 +-
 docs/libcurl/opts/GNURLOPT_IGNORE_CONTENT_LENGTH.3 |    2 +-
 docs/libcurl/opts/GNURLOPT_INFILESIZE.3            |    2 +-
 docs/libcurl/opts/GNURLOPT_INFILESIZE_LARGE.3      |    2 +-
 docs/libcurl/opts/GNURLOPT_INTERLEAVEFUNCTION.3    |    2 +-
 docs/libcurl/opts/GNURLOPT_IOCTLFUNCTION.3         |    2 +-
 docs/libcurl/opts/GNURLOPT_MAXREDIRS.3             |    2 +-
 docs/libcurl/opts/GNURLOPT_NETRC.3                 |    2 +-
 docs/libcurl/opts/GNURLOPT_NOSIGNAL.3              |    2 +-
 docs/libcurl/opts/GNURLOPT_PASSWORD.3              |    2 +-
 docs/libcurl/opts/GNURLOPT_PATH_AS_IS.3            |    2 +-
 docs/libcurl/opts/GNURLOPT_POSTFIELDS.3            |    2 +-
 docs/libcurl/opts/GNURLOPT_POSTFIELDSIZE.3         |    2 +-
 docs/libcurl/opts/GNURLOPT_POSTFIELDSIZE_LARGE.3   |    2 +-
 docs/libcurl/opts/GNURLOPT_POSTQUOTE.3             |    2 +-
 docs/libcurl/opts/GNURLOPT_POSTREDIR.3             |    2 +-
 docs/libcurl/opts/GNURLOPT_PREQUOTE.3              |    2 +-
 docs/libcurl/opts/GNURLOPT_PRE_PROXY.3             |    2 +-
 docs/libcurl/opts/GNURLOPT_PRIVATE.3               |    2 +-
 docs/libcurl/opts/GNURLOPT_PROGRESSDATA.3          |    2 +-
 docs/libcurl/opts/GNURLOPT_PROGRESSFUNCTION.3      |    2 +-
 docs/libcurl/opts/GNURLOPT_PROTOCOLS.3             |    2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_CAINFO.3          |    2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_CRLFILE.3         |    2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_KEYPASSWD.3       |    2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSLCERT.3         |    2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSLCERTTYPE.3     |    2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSLKEYTYPE.3      |    2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSL_CIPHER_LIST.3 |    2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSL_OPTIONS.3     |    9 +-
 docs/libcurl/opts/GNURLOPT_PROXY_TRANSFER_MODE.3   |    2 +-
 docs/libcurl/opts/GNURLOPT_PUT.3                   |    2 +-
 docs/libcurl/opts/GNURLOPT_QUOTE.3                 |    2 +-
 docs/libcurl/opts/GNURLOPT_READDATA.3              |    2 +-
 docs/libcurl/opts/GNURLOPT_READFUNCTION.3          |    2 +-
 docs/libcurl/opts/GNURLOPT_REFERER.3               |    2 +-
 docs/libcurl/opts/GNURLOPT_RESOLVE.3               |    2 +-
 docs/libcurl/opts/GNURLOPT_RESUME_FROM.3           |    2 +-
 docs/libcurl/opts/GNURLOPT_RESUME_FROM_LARGE.3     |    2 +-
 docs/libcurl/opts/GNURLOPT_RTSP_CLIENT_CSEQ.3      |    2 +-
 docs/libcurl/opts/GNURLOPT_SEEKFUNCTION.3          |    2 +-
 docs/libcurl/opts/GNURLOPT_SSL_CIPHER_LIST.3       |    2 +-
 docs/libcurl/opts/GNURLOPT_SSL_OPTIONS.3           |    8 +-
 docs/libcurl/opts/GNURLOPT_STDERR.3                |    2 +-
 docs/libcurl/opts/GNURLOPT_STREAM_DEPENDS_E.3      |    2 +-
 docs/libcurl/opts/GNURLOPT_STREAM_WEIGHT.3         |    2 +-
 docs/libcurl/opts/GNURLOPT_TCP_KEEPALIVE.3         |    2 +-
 docs/libcurl/opts/GNURLOPT_TCP_KEEPIDLE.3          |    2 +-
 docs/libcurl/opts/GNURLOPT_TCP_KEEPINTVL.3         |    2 +-
 docs/libcurl/opts/GNURLOPT_TCP_NODELAY.3           |    2 +-
 docs/libcurl/opts/GNURLOPT_TIMEOUT_MS.3            |    2 +-
 docs/libcurl/opts/GNURLOPT_UNIX_SOCKET_PATH.3      |    2 +-
 docs/libcurl/opts/GNURLOPT_UPLOAD.3                |    2 +-
 docs/libcurl/opts/GNURLOPT_URL.3                   |    6 +-
 docs/libcurl/opts/GNURLOPT_USERAGENT.3             |    2 +-
 docs/libcurl/opts/GNURLOPT_USE_SSL.3               |    2 +-
 docs/libcurl/opts/GNURLOPT_WRITEDATA.3             |    2 +-
 docs/libcurl/opts/GNURLOPT_WRITEFUNCTION.3         |   37 +-
 docs/libcurl/opts/GNURLOPT_XFERINFOFUNCTION.3      |    2 +-
 docs/libcurl/opts/GNURLOPT_XOAUTH2_BEARER.3        |    2 +-
 docs/libcurl/opts/Makefile.inc                     |   21 +
 docs/libcurl/opts/template.3                       |    2 +-
 docs/libcurl/symbols-in-versions                   |    4 +-
 docs/libcurl/symbols.pl                            |    2 +-
 docs/mk-ca-bundle.1                                |    2 +-
 include/Makefile.am                                |   21 +
 include/gnurl/curl.h                               |   20 +-
 include/gnurl/curlver.h                            |    8 +-
 lib/CMakeLists.txt                                 |   28 +-
 lib/Makefile.Watcom                                |    2 +-
 lib/Makefile.am                                    |    6 +-
 lib/Makefile.inc                                   |  101 +-
 lib/Makefile.m32                                   |    2 +-
 lib/Makefile.netware                               |    2 -
 lib/Makefile.vxworks                               |   21 +
 lib/checksrc.pl                                    |   28 +-
 lib/config-dos.h                                   |    2 -
 lib/config-os400.h                                 |    5 +-
 lib/config-riscos.h                                |    5 +-
 lib/config-symbian.h                               |    3 -
 lib/config-tpf.h                                   |    4 -
 lib/config-vxworks.h                               |    3 -
 lib/config-win32.h                                 |   13 +-
 lib/connect.c                                      |  187 +-
 lib/curl_addrinfo.c                                |    6 +-
 lib/curl_config.h.cmake                            |   30 +-
 lib/curl_ntlm_core.c                               |    2 +-
 lib/curl_setup.h                                   |   60 +-
 lib/dict.c                                         |    4 +-
 lib/doh.c                                          |   31 +-
 lib/doh.h                                          |    4 +-
 lib/easy.c                                         |   27 +-
 lib/file.c                                         |    6 +-
 lib/firefox-db2pem.sh                              |    2 +-
 lib/ftp.h                                          |    1 -
 lib/getinfo.c                                      |   80 +-
 lib/gopher.c                                       |   23 +-
 lib/http.c                                         |   30 +-
 lib/http2.c                                        |    2 -
 lib/if2ip.c                                        |   12 +-
 lib/makefile.amiga                                 |   21 +
 lib/makefile.dj                                    |    2 +-
 lib/md4.c                                          |    6 +-
 lib/md5.c                                          |    4 +-
 lib/memdebug.c                                     |    4 +-
 lib/mime.c                                         |   21 +-
 lib/mk-ca-bundle.pl                                |    7 +-
 lib/mk-ca-bundle.vbs                               |    2 +-
 lib/mqtt.c                                         |  627 +++
 lib/mqtt.h                                         |   59 +
 lib/multi.c                                        |    4 +
 lib/select.c                                       |  178 +-
 lib/select.h                                       |   12 +-
 lib/setopt.c                                       |    3 +
 lib/setup-win32.h                                  |  123 +
 lib/sha256.c                                       |    4 +-
 lib/smb.h                                          |    3 +-
 lib/smtp.c                                         |   11 +-
 lib/socks.c                                        |    8 +-
 lib/socks_gssapi.c                                 |    3 +-
 lib/transfer.c                                     |   56 +-
 lib/url.c                                          |   14 +-
 lib/urldata.h                                      |   11 +-
 lib/version.c                                      |   52 +-
 lib/vquic/ngtcp2.c                                 |  332 +-
 lib/vquic/ngtcp2.h                                 |   11 +-
 lib/vssh/libssh.c                                  |   69 +-
 lib/vtls/bearssl.c                                 |  100 +-
 lib/vtls/gskit.c                                   |    5 +-
 lib/vtls/gtls.c                                    |  500 +--
 lib/vtls/mbedtls.c                                 |  145 +-
 lib/vtls/nss.c                                     |  119 +-
 lib/vtls/openssl.c                                 |  252 +-
 lib/vtls/schannel.c                                |  178 +-
 lib/vtls/schannel_verify.c                         |    9 +
 lib/vtls/sectransp.c                               |  191 +-
 lib/vtls/vtls.c                                    |    7 +
 lib/vtls/wolfssl.c                                 |  124 +-
 lib/warnless.h                                     |   15 +-
 libgnurl.pc.in                                     |    2 +-
 m4/curl-compilers.m4                               |   29 +-
 m4/curl-functions.m4                               |    2 -
 m4/curl-openssl.m4                                 |    2 +-
 m4/curl-override.m4                                |   21 +
 m4/curl-reentrant.m4                               |    2 +-
 m4/xc-am-iface.m4                                  |    2 +-
 m4/xc-cc-check.m4                                  |    2 +-
 m4/xc-lt-iface.m4                                  |    2 +-
 m4/xc-translit.m4                                  |    2 +-
 m4/xc-val-flgs.m4                                  |    2 +-
 m4/zz50-xc-ovr.m4                                  |    2 +-
 m4/zz60-xc-ovr.m4                                  |    2 +-
 packages/Android/Android.mk                        |   21 +
 packages/DOS/common.dj                             |   21 +
 packages/Makefile.am                               |   22 +
 packages/OS400/ccsidcurl.c                         |    5 +-
 packages/OS400/chkstrings.c                        |   10 +-
 packages/OS400/curl.inc.in                         |    4 +-
 packages/OS400/initscript.sh                       |   21 +
 packages/OS400/make-include.sh                     |   21 +
 packages/OS400/make-lib.sh                         |   21 +
 packages/OS400/make-src.sh                         |   21 +
 packages/OS400/make-tests.sh                       |   21 +
 packages/OS400/makefile.sh                         |   21 +
 packages/OS400/os400sys.h                          |    2 +-
 packages/Symbian/group/curl.mmp                    |    1 +
 packages/TPF/curl.mak                              |   21 +
 packages/TPF/maketpf.env_curl                      |   21 +
 packages/TPF/maketpf.env_curllib                   |   21 +
 packages/vms/Makefile.am                           |   21 +
 packages/vms/backup_gnv_curl_src.com               |    2 +-
 packages/vms/build_gnv_curl.com                    |    2 +-
 packages/vms/build_gnv_curl_pcsi_desc.com          |    2 +-
 packages/vms/build_gnv_curl_pcsi_text.com          |    2 +-
 packages/vms/build_gnv_curl_release_notes.com      |    2 +-
 packages/vms/build_libcurl_pc.com                  |    2 +-
 packages/vms/clean_gnv_curl.com                    |    2 +-
 packages/vms/compare_curl_source.com               |    2 +-
 packages/vms/config_h.com                          |    2 +-
 packages/vms/curl_crtl_init.c                      |   21 +
 packages/vms/curl_gnv_build_steps.txt              |    4 +-
 packages/vms/curl_startup.com                      |    2 +-
 packages/vms/curlmsg.h                             |    2 +-
 packages/vms/curlmsg.msg                           |   21 +
 packages/vms/curlmsg_vms.h                         |    2 +-
 packages/vms/generate_vax_transfer.com             |    2 +-
 packages/vms/gnv_conftest.c_first                  |    2 +-
 packages/vms/gnv_curl_configure.sh                 |    2 +-
 packages/vms/gnv_libcurl_symbols.opt               |    2 +-
 packages/vms/gnv_link_curl.com                     |    2 +-
 packages/vms/make_gnv_curl_install.sh              |    2 +-
 packages/vms/make_pcsi_curl_kit_name.com           |    2 +-
 packages/vms/pcsi_gnv_curl_file_list.txt           |    2 +-
 packages/vms/pcsi_product_gnv_curl.com             |    2 +-
 packages/vms/setup_gnv_curl_build.com              |    2 +-
 packages/vms/stage_curl_install.com                |    2 +-
 packages/vms/vms_eco_level.h                       |    2 +-
 plan9/{BUILD.PLAN9.txt => README}                  |    0
 scripts/Makefile.am                                |    2 +-
 scripts/completion.pl                              |   21 +
 scripts/contrithanks.sh                            |    2 +-
 scripts/copyright.pl                               |  187 +
 scripts/coverage.sh                                |   21 +
 scripts/installcheck.sh                            |   21 +
 scripts/log2changes.pl                             |   21 +
 scripts/release-notes.pl                           |  213 +
 scripts/travis/before_script.sh                    |   23 +-
 scripts/travis/iconv-env.sh                        |   21 +
 scripts/travis/script.sh                           |   28 +-
 scripts/updatemanpages.pl                          |    2 +-
 src/CMakeLists.txt                                 |   28 +-
 src/Makefile.Watcom                                |    2 +-
 src/Makefile.inc                                   |   23 +
 src/Makefile.m32                                   |    4 +-
 src/macos/src/macos_main.cpp                       |    2 +-
 src/makefile.amiga                                 |   23 +-
 src/makefile.dj                                    |    2 +-
 src/tool_cfgable.h                                 |    3 +
 src/tool_doswin.c                                  |   10 +-
 src/tool_getparam.c                                |    7 +
 src/tool_help.c                                    |    5 +-
 src/tool_hugehelp.c.cvs                            |    2 +-
 src/tool_metalink.c                                |   50 +-
 src/tool_metalink.h                                |   28 +-
 src/tool_operate.c                                 |   68 +-
 src/tool_parsecfg.c                                |    5 +-
 src/tool_setopt.c                                  |    6 +-
 src/tool_sleep.c                                   |    4 +-
 src/tool_util.c                                    |   12 +-
 src/tool_writeout.c                                |  160 +-
 src/tool_writeout.h                                |   58 +-
 src/tool_writeout_json.c                           |  195 +
 src/{tool_writeout.h => tool_writeout_json.h}      |   10 +-
 tests/.gitignore                                   |    2 +-
 tests/CMakeLists.txt                               |   21 +
 tests/FILEFORMAT                                   |  479 ---
 tests/FILEFORMAT.md                                |  473 +++
 tests/Makefile.am                                  |   19 +-
 tests/README                                       |   65 +-
 tests/appveyor.pm                                  |   13 +-
 tests/certs/Makefile.am                            |    2 +-
 tests/certs/scripts/Makefile.am                    |    2 +-
 tests/certs/scripts/genroot.sh                     |    2 +-
 tests/certs/scripts/genserv.sh                     |    2 +-
 tests/convsrctest.pl                               |    2 +-
 tests/curl_test_data.py.in                         |    4 +-
 tests/data/CMakeLists.txt                          |   21 +
 tests/data/DISABLED                                |    6 +-
 tests/data/Makefile.am                             |   21 +
 tests/data/Makefile.inc                            |   70 +-
 tests/data/test1028                                |    6 +-
 tests/data/test1055                                |    6 +-
 tests/data/test1056                                |    8 +-
 tests/data/test1148                                |   14 +-
 tests/data/test1154                                |    2 +-
 tests/data/test1177                                |   25 +
 tests/data/test1190                                |   56 +
 tests/data/test1191                                |   50 +
 tests/data/test1192                                |   56 +
 tests/data/test1193                                |   72 +
 tests/data/test1194                                |   59 +
 tests/data/test1195                                |   63 +
 tests/data/test1196                                |   62 +
 tests/data/test1245                                |    6 +-
 tests/data/test1247                                |    2 +-
 tests/data/test1294                                |   65 +
 tests/data/test1295                                |   68 +
 tests/data/test1448                                |    4 +-
 tests/data/test1451                                |   17 +-
 tests/data/test1452                                |    5 +-
 tests/data/test1524                                |   77 +
 tests/data/test1566                                |   65 +
 tests/data/test19                                  |    2 +-
 tests/data/test1908                                |    2 +-
 tests/data/test2006                                |   12 +-
 tests/data/test2007                                |    5 +-
 tests/data/test2008                                |    5 +-
 tests/data/test2009                                |    5 +-
 tests/data/test2010                                |    5 +-
 tests/data/test2043                                |    2 +-
 tests/data/test2070                                |   62 +
 tests/data/test2100                                |  Bin 1642 -> 1647 bytes
 tests/data/test309                                 |    8 +-
 tests/data/test335                                 |    2 +-
 tests/data/test338                                 |    2 +-
 tests/data/{test338 => test344}                    |   31 +-
 tests/data/{test338 => test345}                    |   34 +-
 tests/data/test358                                 |   94 +
 tests/data/test359                                 |   94 +
 tests/data/test430                                 |  101 +
 tests/data/test431                                 |   95 +
 tests/data/test432                                 |  100 +
 tests/data/test504                                 |    2 +-
 tests/data/test663                                 |    2 +-
 tests/data/test669                                 |   64 +
 tests/data/test702                                 |    2 +-
 tests/data/test703                                 |    2 +-
 tests/data/test704                                 |    2 +-
 tests/data/test705                                 |    2 +-
 tests/data/test970                                 |   66 +
 tests/dictserver.py.in                             |   32 +-
 tests/directories.pm                               |    2 +-
 tests/extern-scan.pl                               |    2 +-
 tests/ftp.pm                                       |  110 +-
 tests/ftpserver.pl                                 |   38 +-
 tests/fuzz/download_fuzzer.sh                      |   21 +
 tests/getpart.pm                                   |   59 +-
 tests/http2-server.pl                              |    2 +-
 tests/httpserver.pl                                |   20 +-
 tests/libtest/CMakeLists.txt                       |   21 +
 tests/libtest/Makefile.inc                         |   21 +
 tests/libtest/lib1507.c                            |    2 +-
 tests/libtest/lib1508.c                            |    2 +-
 tests/libtest/lib1509.c                            |    2 +-
 tests/libtest/lib1514.c                            |    2 +-
 tests/libtest/lib1515.c                            |    2 +-
 tests/libtest/lib1520.c                            |    2 +-
 tests/libtest/lib1525.c                            |    2 +-
 tests/libtest/lib1526.c                            |    2 +-
 tests/libtest/lib1527.c                            |    2 +-
 tests/libtest/lib1531.c                            |    2 +-
 tests/libtest/lib1533.c                            |    2 +-
 tests/libtest/lib1535.c                            |    2 +-
 tests/libtest/lib1536.c                            |    2 +-
 tests/libtest/lib1540.c                            |    2 +-
 tests/libtest/lib1554.c                            |    2 +-
 tests/libtest/lib500.c                             |    2 +-
 tests/libtest/lib501.c                             |    2 +-
 tests/libtest/lib502.c                             |    2 +-
 tests/libtest/lib503.c                             |    2 +-
 tests/libtest/lib504.c                             |    2 +-
 tests/libtest/lib512.c                             |    2 +-
 tests/libtest/lib519.c                             |    2 +-
 tests/libtest/lib521.c                             |    2 +-
 tests/libtest/lib523.c                             |    2 +-
 tests/libtest/lib524.c                             |    2 +-
 tests/libtest/lib543.c                             |    2 +-
 tests/libtest/lib547.c                             |    2 +-
 tests/libtest/lib549.c                             |    2 +-
 tests/libtest/lib558.c                             |    2 +-
 tests/libtest/lib559.c                             |    2 +-
 tests/libtest/lib560.c                             |    2 +-
 tests/libtest/lib566.c                             |    2 +-
 tests/libtest/lib567.c                             |    2 +-
 tests/libtest/lib568.c                             |    2 +-
 tests/libtest/lib570.c                             |    2 +-
 tests/libtest/lib572.c                             |    2 +-
 tests/libtest/lib573.c                             |    2 +-
 tests/libtest/lib579.c                             |    2 +-
 tests/libtest/lib582.c                             |    2 +-
 tests/libtest/lib583.c                             |    2 +-
 tests/libtest/lib586.c                             |    2 +-
 tests/libtest/lib590.c                             |    2 +-
 tests/libtest/lib591.c                             |    2 +-
 tests/libtest/lib598.c                             |    2 +-
 tests/libtest/lib670.c                             |    2 +-
 tests/libtest/notexists.pl                         |   21 +
 tests/libtest/sethostname.c                        |    2 +-
 tests/libtest/sethostname.h                        |    2 +-
 tests/libtest/stub_gssapi.h                        |    2 +-
 tests/libtest/test.h                               |   14 +-
 tests/libtest/test1013.pl                          |   21 +
 tests/libtest/test1022.pl                          |   21 +
 tests/libtest/test307.pl                           |   21 +
 tests/libtest/test610.pl                           |   21 +
 tests/libtest/test613.pl                           |   21 +
 tests/libtest/test75.pl                            |   21 +
 tests/libtest/testtrace.h                          |    2 +-
 tests/libtest/testutil.c                           |    2 +-
 tests/libtest/testutil.h                           |    2 +-
 tests/mem-include-scan.pl                          |    2 +-
 tests/negtelnetserver.py.in                        |   40 +-
 tests/nroff-scan.pl                                |    2 +-
 tests/objnames.inc                                 |    2 +-
 tests/pathhelp.pm                                  |    2 +-
 tests/python_dependencies/impacket/LICENSE         |   84 -
 tests/python_dependencies/impacket/__init__.py     |   25 -
 tests/python_dependencies/impacket/nmb.py          |  982 -----
 tests/python_dependencies/impacket/nt_errors.py    | 3586 -----------------
 tests/python_dependencies/impacket/ntlm.py         |  973 -----
 tests/python_dependencies/impacket/smb.py          | 4099 -------------------
 tests/python_dependencies/impacket/smb3.py         | 1630 --------
 tests/python_dependencies/impacket/smb3structs.py  | 1363 -------
 tests/python_dependencies/impacket/smbserver.py    | 4177 --------------------
 tests/python_dependencies/impacket/spnego.py       |  372 --
 tests/python_dependencies/impacket/structure.py    |  744 ----
 tests/python_dependencies/impacket/uuid.py         |   73 -
 tests/python_dependencies/impacket/version.py      |   12 -
 tests/rtspserver.pl                                |   13 +-
 tests/runtests.pl                                  |  689 ++--
 tests/secureserver.pl                              |    7 +-
 tests/server/.gitignore                            |    1 +
 tests/server/CMakeLists.txt                        |   21 +
 tests/server/Makefile.inc                          |   31 +-
 tests/server/base64.pl                             |   21 +
 tests/server/fake_ntlm.c                           |   17 +-
 tests/server/getpart.c                             |    2 +-
 tests/server/getpart.h                             |    2 +-
 tests/server/mqttd.c                               | 1018 +++++
 tests/server/resolve.c                             |    4 +-
 tests/server/rtspd.c                               |  215 +-
 tests/server/server_setup.h                        |    2 +-
 tests/server/server_sockaddr.h                     |    2 +-
 tests/server/sockfilt.c                            |  604 ++-
 tests/server/socksd.c                              |  143 +-
 tests/server/sws.c                                 |  214 +-
 tests/server/testpart.c                            |    2 +-
 tests/server/tftp.h                                |    2 +-
 tests/server/tftpd.c                               |  250 +-
 tests/server/util.c                                |  322 +-
 tests/server/util.h                                |   21 +-
 tests/serverhelp.pm                                |   14 +-
 tests/smbserver.py.in                              |   33 +-
 tests/sshhelp.pm                                   |    2 +-
 tests/sshserver.pl                                 |   40 +-
 tests/symbol-scan.pl                               |    2 +-
 tests/testcurl.pl                                  |    2 +-
 tests/tftpserver.pl                                |   17 +-
 tests/unit/CMakeLists.txt                          |   21 +
 tests/unit/curlcheck.h                             |    2 +-
 tests/unit/unit1300.c                              |    2 +-
 tests/unit/unit1302.c                              |    2 +-
 tests/unit/unit1330.c                              |    2 +-
 tests/unit/unit1394.c                              |    8 +-
 tests/unit/unit1395.c                              |    2 +-
 tests/unit/unit1600.c                              |    2 +-
 tests/unit/unit1605.c                              |    2 +-
 tests/unit/unit1650.c                              |   10 +-
 tests/unit/unit1655.c                              |    5 +-
 tests/valgrind.pm                                  |    2 +-
 tests/{extern-scan.pl => version-scan.pl}          |   62 +-
 560 files changed, 11148 insertions(+), 22476 deletions(-)

diff --cc .cirrus.yml
index a19b26238,4a541c9b0..5456395ef
--- a/.cirrus.yml
+++ b/.cirrus.yml
@@@ -1,5 -1,26 +1,26 @@@
+ #***************************************************************************
+ #                                  _   _ ____  _
+ #  Project                     ___| | | |  _ \| |
+ #                             / __| | | | |_) | |
+ #                            | (__| |_| |  _ <| |___
+ #                             \___|\___/|_| \_\_____|
+ #
+ # Copyright (C) 1998 - 2020, 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.
+ #
+ ###########################################################################
  # Cirrus CI configuration
 -# https://cirrus-ci.com/github/curl/curl
 +# https://cirrus-ci.com/github/teknokatze/gnurl
  
  task:
    name: FreeBSD
diff --cc .mailmap
index 25a370132,884446cd4..468b90992
--- a/.mailmap
+++ b/.mailmap
@@@ -59,7 -59,8 +59,13 @@@ Niall O'Reilly <address@hidden
  Mohammad Hasbini <address@hidden>
  Andrew Ishchuk <address@hidden>
  Nicolas Guillier <address@hidden>
- Nikita Gillmann <address@hidden>
- Nikita Gillmann <address@hidden> ng0 <address@hidden>
- Nikita Gillmann <address@hidden> ng0 <address@hidden>
- Nikita Gillmann <address@hidden> Nils Gillmann <address@hidden>
++nikita <address@hidden>
++nikita <address@hidden> Nikita Gillmann <address@hidden>
++nikita <address@hidden> ng0 <address@hidden>
++nikita <address@hidden> ng0 <address@hidden>
++nikita <address@hidden> Nils Gillmann <address@hidden>
+ Julian Z <address@hidden> <address@hidden>
+ Jessa Chandler <address@hidden>
+ Gökhan Şengün <address@hidden> <address@hidden>
+ Svyatoslav Mishyn <address@hidden>
+ Douglas Steinwand <address@hidden>
diff --cc .travis.yml
index 791783c2b,59f075fc0..116472f5e
--- a/.travis.yml
+++ b/.travis.yml
@@@ -1,5 -1,31 +1,26 @@@
+ #***************************************************************************
+ #                                  _   _ ____  _
+ #  Project                     ___| | | |  _ \| |
+ #                             / __| | | | |_) | |
+ #                            | (__| |_| |  _ <| |___
+ #                             \___|\___/|_| \_\_____|
+ #
+ # Copyright (C) 1998 - 2020, 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.
+ #
+ ###########################################################################
  language: c
  sudo: required
 -cache:
 -    directories:
 -        - $HOME/wolfssl-4.4.0-stable
 -        - $HOME/mesalink-1.0.0
 -        - $HOME/nghttp2-1.39.2
  
  env:
      global:
@@@ -22,7 -48,7 +43,8 @@@ addons
              - stunnel4
              - libidn2-0-dev
              - gnutls-bin
 +            - libgnutls28-dev
+             - python-impacket
  
  matrix:
      include:
@@@ -30,8 -56,40 +52,13 @@@
            compiler: gcc
            dist: trusty
            env:
 -              - T=normal C="--with-gssapi --with-libssh2" CHECKSRC=1
 -              - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -          addons:
 -              apt:
 -                  sources:
 -                      - *common_sources
 -                  packages:
 -                      - *common_packages
 -                      - krb5-user
 -                      - libssh2-1-dev
 -        - os: linux
 -          compiler: gcc
 -          dist: trusty
 -          env:
 -              - T=normal C=--with-libssh
 -              - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -          addons:
 -              apt:
 -                  sources:
 -                      - *common_sources
 -                  packages:
 -                      - *common_packages
 -                      - libssh-dev
 -        - os: linux
 -          compiler: gcc
 -          dist: trusty
 -          env:
 -              - T=normal C="--enable-ares"
 +              - T=normal C="" CHECKSRC=1
                - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
+         - os: linux
+           compiler: gcc
+           dist: trusty
+           env:
+               - T=normal C="--enable-mqtt"
          - os: linux
            compiler: gcc
            dist: bionic
diff --cc CMake/gnurl-config.cmake.in
index 0e1ee5f95,000000000..240c3a96e
mode 100644,000000..100644
--- a/CMake/gnurl-config.cmake.in
+++ b/CMake/gnurl-config.cmake.in
@@@ -1,15 -1,0 +1,36 @@@
++#***************************************************************************
++#                                  _   _ ____  _
++#  Project                     ___| | | |  _ \| |
++#                             / __| | | | |_) | |
++#                            | (__| |_| |  _ <| |___
++#                             \___|\___/|_| \_\_____|
++#
++# Copyright (C) 1998 - 2020, 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.
++#
++###########################################################################
 +@PACKAGE_INIT@
 +
 +include(CMakeFindDependencyMacro)
 +if(@USE_OPENSSL@)
 +  find_dependency(OpenSSL @OPENSSL_VERSION_MAJOR@)
 +endif()
 +if(@USE_GNUTLS@)
 +  find_dependency(GnuTLS @GNUTLS_VERSION_MAJOR@)
 +endif()
 +if(@USE_ZLIB@)
 +  find_dependency(ZLIB @ZLIB_VERSION_MAJOR@)
 +endif()
 +
 +include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake")
 +check_required_components("@PROJECT_NAME@")
diff --cc CMakeLists.txt
index 97483ca8e,b8061d14d..a499d25d2
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@@ -164,26 -157,23 +164,28 @@@ mark_as_advanced(CURL_DISABLE_TFTP
  option(CURL_DISABLE_HTTP "disables HTTP" OFF)
  mark_as_advanced(CURL_DISABLE_HTTP)
  
 -option(CURL_DISABLE_LDAPS "to disable LDAPS" OFF)
 +option(CURL_DISABLE_LDAPS "to disable LDAPS" ON)
  mark_as_advanced(CURL_DISABLE_LDAPS)
  
 -option(CURL_DISABLE_RTSP "to disable RTSP" OFF)
 +option(CURL_DISABLE_RTSP "to disable RTSP" ON)
  mark_as_advanced(CURL_DISABLE_RTSP)
 +
  option(CURL_DISABLE_PROXY "to disable proxy" OFF)
  mark_as_advanced(CURL_DISABLE_PROXY)
 -option(CURL_DISABLE_POP3 "to disable POP3" OFF)
 +
 +option(CURL_DISABLE_POP3 "to disable POP3" ON)
  mark_as_advanced(CURL_DISABLE_POP3)
 -option(CURL_DISABLE_IMAP "to disable IMAP" OFF)
 +
 +option(CURL_DISABLE_IMAP "to disable IMAP" ON)
  mark_as_advanced(CURL_DISABLE_IMAP)
 -option(CURL_DISABLE_SMTP "to disable SMTP" OFF)
 +
 +option(CURL_DISABLE_SMTP "to disable SMTP" ON)
  mark_as_advanced(CURL_DISABLE_SMTP)
 -option(CURL_DISABLE_GOPHER "to disable Gopher" OFF)
 +
 +option(CURL_DISABLE_GOPHER "to disable Gopher" ON)
  mark_as_advanced(CURL_DISABLE_GOPHER)
+ option(CURL_ENABLE_MQTT "to enable MQTT" OFF)
+ mark_as_advanced(CURL_ENABLE_MQTT)
  
  if(HTTP_ONLY)
    set(CURL_DISABLE_FTP ON)
@@@ -327,9 -314,10 +330,10 @@@ endif(
  option(CMAKE_USE_MBEDTLS "Enable mbedTLS for SSL/TLS" OFF)
  option(CMAKE_USE_BEARSSL "Enable BearSSL for SSL/TLS" OFF)
  option(CMAKE_USE_NSS "Enable NSS for SSL/TLS" OFF)
+ option(CMAKE_USE_WOLFSSL "enable wolfSSL for SSL/TLS" OFF)
  
 -set(openssl_default ON)
 +set(openssl_default OFF)
- if(WIN32 OR CMAKE_USE_SECTRANSP OR CMAKE_USE_WINSSL OR CMAKE_USE_MBEDTLS OR 
CMAKE_USE_NSS)
+ if(WIN32 OR CMAKE_USE_SECTRANSP OR CMAKE_USE_WINSSL OR CMAKE_USE_MBEDTLS OR 
CMAKE_USE_NSS OR CMAKE_USE_WOLFSSL)
    set(openssl_default OFF)
  endif()
  option(CMAKE_USE_OPENSSL "Use OpenSSL code. Experimental" ${openssl_default})
diff --cc Makefile.am
index 29fbc003f,2f7098033..4979ee61e
--- a/Makefile.am
+++ b/Makefile.am
@@@ -27,13 -24,145 +27,21 @@@ AUTOMAKE_OPTIONS = foreig
  
  ACLOCAL_AMFLAGS = -I m4
  
- CMAKE_DIST = CMakeLists.txt CMake/CMakeConfigurableFile.in      \
-  CMake/CurlTests.c CMake/FindGSS.cmake CMake/OtherTests.cmake   \
-  CMake/Platforms/WindowsCache.cmake CMake/Utilities.cmake       \
-  CMake/Macros.cmake              \
-  CMake/CurlSymbolHiding.cmake             \
-  CMake/FindBearSSL.cmake                \
-  CMake/cmake_uninstall.cmake.in CMake/gnurl-config.cmake.in
+ CMAKE_DIST =                                    \
+  CMake/cmake_uninstall.cmake.in                 \
+  CMake/CMakeConfigurableFile.in                 \
 - CMake/curl-config.cmake.in                     \
++ CMake/gnurl-config.cmake.in                    \
+  CMake/CurlSymbolHiding.cmake                   \
+  CMake/CurlTests.c                              \
+  CMake/FindBearSSL.cmake                        \
 - CMake/FindCARES.cmake                          \
+  CMake/FindGSS.cmake                            \
 - CMake/FindLibSSH2.cmake                        \
 - CMake/FindMbedTLS.cmake                        \
 - CMake/FindNGHTTP2.cmake                        \
+  CMake/FindWolfSSL.cmake                        \
+  CMake/Macros.cmake                             \
+  CMake/OtherTests.cmake                         \
+  CMake/Platforms/WindowsCache.cmake             \
+  CMake/Utilities.cmake                          \
+  CMakeLists.txt
+ 
 -VC6_LIBTMPL = projects/Windows/VC6/lib/libcurl.tmpl
 -VC6_LIBDSP = projects/Windows/VC6/lib/libcurl.dsp.dist
 -VC6_LIBDSP_DEPS = $(VC6_LIBTMPL) Makefile.am lib/Makefile.inc
 -VC6_SRCTMPL = projects/Windows/VC6/src/curl.tmpl
 -VC6_SRCDSP = projects/Windows/VC6/src/curl.dsp.dist
 -VC6_SRCDSP_DEPS = $(VC6_SRCTMPL) Makefile.am src/Makefile.inc
 -
 -VC7_LIBTMPL = projects/Windows/VC7/lib/libcurl.tmpl
 -VC7_LIBVCPROJ = projects/Windows/VC7/lib/libcurl.vcproj.dist
 -VC7_LIBVCPROJ_DEPS = $(VC7_LIBTMPL) Makefile.am lib/Makefile.inc
 -VC7_SRCTMPL = projects/Windows/VC7/src/curl.tmpl
 -VC7_SRCVCPROJ = projects/Windows/VC7/src/curl.vcproj.dist
 -VC7_SRCVCPROJ_DEPS = $(VC7_SRCTMPL) Makefile.am src/Makefile.inc
 -
 -VC71_LIBTMPL = projects/Windows/VC7.1/lib/libcurl.tmpl
 -VC71_LIBVCPROJ = projects/Windows/VC7.1/lib/libcurl.vcproj.dist
 -VC71_LIBVCPROJ_DEPS = $(VC71_LIBTMPL) Makefile.am lib/Makefile.inc
 -VC71_SRCTMPL = projects/Windows/VC7.1/src/curl.tmpl
 -VC71_SRCVCPROJ = projects/Windows/VC7.1/src/curl.vcproj.dist
 -VC71_SRCVCPROJ_DEPS = $(VC71_SRCTMPL) Makefile.am src/Makefile.inc
 -
 -VC8_LIBTMPL = projects/Windows/VC8/lib/libcurl.tmpl
 -VC8_LIBVCPROJ = projects/Windows/VC8/lib/libcurl.vcproj.dist
 -VC8_LIBVCPROJ_DEPS = $(VC8_LIBTMPL) Makefile.am lib/Makefile.inc
 -VC8_SRCTMPL = projects/Windows/VC8/src/curl.tmpl
 -VC8_SRCVCPROJ = projects/Windows/VC8/src/curl.vcproj.dist
 -VC8_SRCVCPROJ_DEPS = $(VC8_SRCTMPL) Makefile.am src/Makefile.inc
 -
 -VC9_LIBTMPL = projects/Windows/VC9/lib/libcurl.tmpl
 -VC9_LIBVCPROJ = projects/Windows/VC9/lib/libcurl.vcproj.dist
 -VC9_LIBVCPROJ_DEPS = $(VC9_LIBTMPL) Makefile.am lib/Makefile.inc
 -VC9_SRCTMPL = projects/Windows/VC9/src/curl.tmpl
 -VC9_SRCVCPROJ = projects/Windows/VC9/src/curl.vcproj.dist
 -VC9_SRCVCPROJ_DEPS = $(VC9_SRCTMPL) Makefile.am src/Makefile.inc
 -
 -VC10_LIBTMPL = projects/Windows/VC10/lib/libcurl.tmpl
 -VC10_LIBVCXPROJ = projects/Windows/VC10/lib/libcurl.vcxproj.dist
 -VC10_LIBVCXPROJ_DEPS = $(VC10_LIBTMPL) Makefile.am lib/Makefile.inc
 -VC10_SRCTMPL = projects/Windows/VC10/src/curl.tmpl
 -VC10_SRCVCXPROJ = projects/Windows/VC10/src/curl.vcxproj.dist
 -VC10_SRCVCXPROJ_DEPS = $(VC10_SRCTMPL) Makefile.am src/Makefile.inc
 -
 -VC11_LIBTMPL = projects/Windows/VC11/lib/libcurl.tmpl
 -VC11_LIBVCXPROJ = projects/Windows/VC11/lib/libcurl.vcxproj.dist
 -VC11_LIBVCXPROJ_DEPS = $(VC11_LIBTMPL) Makefile.am lib/Makefile.inc
 -VC11_SRCTMPL = projects/Windows/VC11/src/curl.tmpl
 -VC11_SRCVCXPROJ = projects/Windows/VC11/src/curl.vcxproj.dist
 -VC11_SRCVCXPROJ_DEPS = $(VC11_SRCTMPL) Makefile.am src/Makefile.inc
 -
 -VC12_LIBTMPL = projects/Windows/VC12/lib/libcurl.tmpl
 -VC12_LIBVCXPROJ = projects/Windows/VC12/lib/libcurl.vcxproj.dist
 -VC12_LIBVCXPROJ_DEPS = $(VC12_LIBTMPL) Makefile.am lib/Makefile.inc
 -VC12_SRCTMPL = projects/Windows/VC12/src/curl.tmpl
 -VC12_SRCVCXPROJ = projects/Windows/VC12/src/curl.vcxproj.dist
 -VC12_SRCVCXPROJ_DEPS = $(VC12_SRCTMPL) Makefile.am src/Makefile.inc
 -
 -VC14_LIBTMPL = projects/Windows/VC14/lib/libcurl.tmpl
 -VC14_LIBVCXPROJ = projects/Windows/VC14/lib/libcurl.vcxproj.dist
 -VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc
 -VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl
 -VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist
 -VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc
 -
 -VC15_LIBTMPL = projects/Windows/VC15/lib/libcurl.tmpl
 -VC15_LIBVCXPROJ = projects/Windows/VC15/lib/libcurl.vcxproj.dist
 -VC15_LIBVCXPROJ_DEPS = $(VC15_LIBTMPL) Makefile.am lib/Makefile.inc
 -VC15_SRCTMPL = projects/Windows/VC15/src/curl.tmpl
 -VC15_SRCVCXPROJ = projects/Windows/VC15/src/curl.vcxproj.dist
 -VC15_SRCVCXPROJ_DEPS = $(VC15_SRCTMPL) Makefile.am src/Makefile.inc
 -
 -VC_DIST = projects/README                           \
 - projects/build-openssl.bat                         \
 - projects/build-wolfssl.bat                         \
 - projects/checksrc.bat                              \
 - projects/Windows/VC6/curl-all.dsw                  \
 - projects/Windows/VC6/lib/libcurl.dsw               \
 - projects/Windows/VC6/src/curl.dsw                  \
 - projects/Windows/VC7/curl-all.sln                  \
 - projects/Windows/VC7/lib/libcurl.sln               \
 - projects/Windows/VC7/src/curl.sln                  \
 - projects/Windows/VC7.1/curl-all.sln                \
 - projects/Windows/VC7.1/lib/libcurl.sln             \
 - projects/Windows/VC7.1/src/curl.sln                \
 - projects/Windows/VC8/curl-all.sln                  \
 - projects/Windows/VC8/lib/libcurl.sln               \
 - projects/Windows/VC8/src/curl.sln                  \
 - projects/Windows/VC9/curl-all.sln                  \
 - projects/Windows/VC9/lib/libcurl.sln               \
 - projects/Windows/VC9/src/curl.sln                  \
 - projects/Windows/VC10/curl-all.sln                 \
 - projects/Windows/VC10/lib/libcurl.sln              \
 - projects/Windows/VC10/lib/libcurl.vcxproj.filters  \
 - projects/Windows/VC10/src/curl.sln                 \
 - projects/Windows/VC10/src/curl.vcxproj.filters     \
 - projects/Windows/VC11/curl-all.sln                 \
 - projects/Windows/VC11/lib/libcurl.sln              \
 - projects/Windows/VC11/lib/libcurl.vcxproj.filters  \
 - projects/Windows/VC11/src/curl.sln                 \
 - projects/Windows/VC11/src/curl.vcxproj.filters     \
 - projects/Windows/VC12/curl-all.sln                 \
 - projects/Windows/VC12/lib/libcurl.sln              \
 - projects/Windows/VC12/lib/libcurl.vcxproj.filters  \
 - projects/Windows/VC12/src/curl.sln                 \
 - projects/Windows/VC12/src/curl.vcxproj.filters     \
 - projects/Windows/VC14/curl-all.sln                 \
 - projects/Windows/VC14/lib/libcurl.sln              \
 - projects/Windows/VC14/lib/libcurl.vcxproj.filters  \
 - projects/Windows/VC14/src/curl.sln                 \
 - projects/Windows/VC14/src/curl.vcxproj.filters     \
 - projects/Windows/VC15/curl-all.sln                 \
 - projects/Windows/VC15/lib/libcurl.sln              \
 - projects/Windows/VC15/lib/libcurl.vcxproj.filters  \
 - projects/Windows/VC15/src/curl.sln                 \
 - projects/Windows/VC15/src/curl.vcxproj.filters     \
 - projects/generate.bat                              \
 - projects/wolfssl_options.h                         \
 - projects/wolfssl_override.props
 -
 -WINBUILD_DIST = winbuild/BUILD.WINDOWS.txt winbuild/gen_resp_file.bat \
 - winbuild/MakefileBuild.vc winbuild/Makefile.vc
  
  PLAN9_DIST = plan9/include/mkfile \
   plan9/include/mkfile             \
@@@ -183,12 -318,421 +191,12 @@@ ca-firefox: lib/firefox-db2pem.s
        ./lib/firefox-db2pem.sh lib/ca-bundle.crt
  
  checksrc:
-       cd lib && $(MAKE) checksrc
-       cd src && $(MAKE) checksrc
-       cd tests && $(MAKE) checksrc
-       cd include/gnurl && $(MAKE) checksrc
-       cd docs/examples && $(MAKE) checksrc
+       (cd lib && $(MAKE) checksrc)
+       (cd src && $(MAKE) checksrc)
+       (cd tests && $(MAKE) checksrc)
 -      (cd include/curl && $(MAKE) checksrc)
++      (cd include/gnurl && $(MAKE) checksrc)
+       (cd docs/examples && $(MAKE) checksrc)
  
 -.PHONY: vc-ide
 -
 -vc-ide: $(VC6_LIBDSP_DEPS) $(VC6_SRCDSP_DEPS) $(VC7_LIBVCPROJ_DEPS) \
 - $(VC7_SRCVCPROJ_DEPS) $(VC71_LIBVCPROJ_DEPS) $(VC71_SRCVCPROJ_DEPS) \
 - $(VC8_LIBVCPROJ_DEPS) $(VC8_SRCVCPROJ_DEPS) $(VC9_LIBVCPROJ_DEPS) \
 - $(VC9_SRCVCPROJ_DEPS) $(VC10_LIBVCXPROJ_DEPS) $(VC10_SRCVCXPROJ_DEPS) \
 - $(VC11_LIBVCXPROJ_DEPS) $(VC11_SRCVCXPROJ_DEPS) $(VC12_LIBVCXPROJ_DEPS) \
 - $(VC12_SRCVCXPROJ_DEPS) $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) \
 - $(VC15_LIBVCXPROJ_DEPS) $(VC15_SRCVCXPROJ_DEPS)
 -      @(win32_lib_srcs='$(LIB_CFILES)'; \
 -      win32_lib_hdrs='$(LIB_HFILES) config-win32.h'; \
 -      win32_lib_rc='$(LIB_RCFILES)'; \
 -      win32_lib_vauth_srcs='$(LIB_VAUTH_CFILES)'; \
 -      win32_lib_vauth_hdrs='$(LIB_VAUTH_HFILES)'; \
 -      win32_lib_vquic_srcs='$(LIB_VQUIC_CFILES)'; \
 -      win32_lib_vquic_hdrs='$(LIB_VQUIC_HFILES)'; \
 -      win32_lib_vssh_srcs='$(LIB_VSSH_CFILES)'; \
 -      win32_lib_vssh_hdrs='$(LIB_VSSH_HFILES)'; \
 -      win32_lib_vtls_srcs='$(LIB_VTLS_CFILES)'; \
 -      win32_lib_vtls_hdrs='$(LIB_VTLS_HFILES)'; \
 -      win32_src_srcs='$(CURL_CFILES)'; \
 -      win32_src_hdrs='$(CURL_HFILES)'; \
 -      win32_src_rc='$(CURL_RCFILES)'; \
 -      win32_src_x_srcs='$(CURLX_CFILES)'; \
 -      win32_src_x_hdrs='$(CURLX_HFILES) ../lib/config-win32.h'; \
 -      \
 -      sorted_lib_srcs=`for file in $$win32_lib_srcs; do echo $$file; done | 
sort`; \
 -      sorted_lib_hdrs=`for file in $$win32_lib_hdrs; do echo $$file; done | 
sort`; \
 -      sorted_lib_vauth_srcs=`for file in $$win32_lib_vauth_srcs; do echo 
$$file; done | sort`; \
 -      sorted_lib_vauth_hdrs=`for file in $$win32_lib_vauth_hdrs; do echo 
$$file; done | sort`; \
 -      sorted_lib_vquic_srcs=`for file in $$win32_lib_vquic_srcs; do echo 
$$file; done | sort`; \
 -      sorted_lib_vquic_hdrs=`for file in $$win32_lib_vquic_hdrs; do echo 
$$file; done | sort`; \
 -      sorted_lib_vssh_srcs=`for file in $$win32_lib_vssh_srcs; do echo 
$$file; done | sort`; \
 -      sorted_lib_vssh_hdrs=`for file in $$win32_lib_vssh_hdrs; do echo 
$$file; done | sort`; \
 -      sorted_lib_vtls_srcs=`for file in $$win32_lib_vtls_srcs; do echo 
$$file; done | sort`; \
 -      sorted_lib_vtls_hdrs=`for file in $$win32_lib_vtls_hdrs; do echo 
$$file; done | sort`; \
 -      sorted_src_srcs=`for file in $$win32_src_srcs; do echo $$file; done | 
sort`; \
 -      sorted_src_hdrs=`for file in $$win32_src_hdrs; do echo $$file; done | 
sort`; \
 -      sorted_src_x_srcs=`for file in $$win32_src_x_srcs; do echo $$file; done 
| sort`; \
 -      sorted_src_x_hdrs=`for file in $$win32_src_x_hdrs; do echo $$file; done 
| sort`; \
 -      \
 -      awk_code='\
 -function gen_element(type, dir, file)\
 -{\
 -  sub(/vauth\//, "", file);\
 -  sub(/vquic\//, "", file);\
 -  sub(/vssh\//, "", file);\
 -  sub(/vtls\//, "", file);\
 -\
 -  spaces="    ";\
 -  if(dir == "lib\\vauth" ||\
 -     dir == "lib\\vquic" ||\
 -     dir == "lib\\vssh"  ||\
 -     dir == "lib\\vtls")\
 -    tabs="                            ";\
 -  else\
 -    tabs="                    ";\
 -\
 -  if(type == "dsp") {\
 -    printf("# Begin Source File\r\n");\
 -    printf("\r\n");\
 -    printf("SOURCE=..\\..\\..\\..\\%s\\%s\r\n", dir, file);\
 -    printf("# End Source File\r\n");\
 -  }\
 -  else if(type == "vcproj1") {\
 -    printf("%s<File\r\n", tabs);\
 -    printf("%s        RelativePath=\"..\\..\\..\\..\\%s\\%s\">\r\n",\
 -           tabs, dir, file);\
 -    printf("%s</File>\r\n", tabs);\
 -  }\
 -  else if(type == "vcproj2") {\
 -    printf("%s<File\r\n", tabs);\
 -    printf("%s        RelativePath=\"..\\..\\..\\..\\%s\\%s\"\r\n",\
 -           tabs, dir, file);\
 -    printf("%s>\r\n", tabs);\
 -    printf("%s</File>\r\n", tabs);\
 -  }\
 -  else if(type == "vcxproj") {\
 -    i = index(file, ".");\
 -    ext = substr(file, i == 0 ? 0 : i + 1);\
 -\
 -    if(ext == "c")\
 -      printf("%s<ClCompile Include=\"..\\..\\..\\..\\%s\\%s\" />\r\n",\
 -             spaces, dir, file);\
 -    else if(ext == "h")\
 -      printf("%s<ClInclude Include=\"..\\..\\..\\..\\%s\\%s\" />\r\n",\
 -             spaces, dir, file);\
 -    else if(ext == "rc")\
 -      printf("%s<ResourceCompile Include=\"..\\..\\..\\..\\%s\\%s\" />\r\n",\
 -      spaces, dir, file);\
 -  }\
 -}\
 -\
 -{\
 -\
 -  if($$0 == "CURL_LIB_C_FILES") {\
 -    split(lib_srcs, arr);\
 -    for(val in arr) gen_element(proj_type, "lib", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_LIB_H_FILES") {\
 -    split(lib_hdrs, arr);\
 -    for(val in arr) gen_element(proj_type, "lib", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_LIB_RC_FILES") {\
 -    split(lib_rc, arr);\
 -    for(val in arr) gen_element(proj_type, "lib", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_LIB_VAUTH_C_FILES") {\
 -    split(lib_vauth_srcs, arr);\
 -    for(val in arr) gen_element(proj_type, "lib\\vauth", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_LIB_VAUTH_H_FILES") {\
 -    split(lib_vauth_hdrs, arr);\
 -    for(val in arr) gen_element(proj_type, "lib\\vauth", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_LIB_VQUIC_C_FILES") {\
 -    split(lib_vquic_srcs, arr);\
 -    for(val in arr) gen_element(proj_type, "lib\\vquic", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_LIB_VQUIC_H_FILES") {\
 -    split(lib_vquic_hdrs, arr);\
 -    for(val in arr) gen_element(proj_type, "lib\\vquic", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_LIB_VSSH_C_FILES") {\
 -    split(lib_vssh_srcs, arr);\
 -    for(val in arr) gen_element(proj_type, "lib\\vssh", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_LIB_VSSH_H_FILES") {\
 -    split(lib_vssh_hdrs, arr);\
 -    for(val in arr) gen_element(proj_type, "lib\\vssh", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_LIB_VTLS_C_FILES") {\
 -    split(lib_vtls_srcs, arr);\
 -    for(val in arr) gen_element(proj_type, "lib\\vtls", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_LIB_VTLS_H_FILES") {\
 -    split(lib_vtls_hdrs, arr);\
 -    for(val in arr) gen_element(proj_type, "lib\\vtls", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_SRC_C_FILES") {\
 -    split(src_srcs, arr);\
 -    for(val in arr) gen_element(proj_type, "src", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_SRC_H_FILES") {\
 -    split(src_hdrs, arr);\
 -    for(val in arr) gen_element(proj_type, "src", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_SRC_RC_FILES") {\
 -    split(src_rc, arr);\
 -    for(val in arr) gen_element(proj_type, "src", arr[val]);\
 -  }\
 -  else if($$0 == "CURL_SRC_X_C_FILES") {\
 -    split(src_x_srcs, arr);\
 -    for(val in arr) {\
 -      sub(/..\/lib\//, "", arr[val]);\
 -      gen_element(proj_type, "lib", arr[val]);\
 -    }\
 -  }\
 -  else if($$0 == "CURL_SRC_X_H_FILES") {\
 -    split(src_x_hdrs, arr);\
 -    for(val in arr) {\
 -      sub(/..\/lib\//, "", arr[val]);\
 -      gen_element(proj_type, "lib", arr[val]);\
 -    }\
 -  }\
 -  else\
 -    printf("%s\r\n", $$0);\
 -}';\
 -      \
 -      echo "generating '$(VC6_LIBDSP)'"; \
 -      awk -v proj_type=dsp \
 -              -v lib_srcs="$$sorted_lib_srcs" \
 -              -v lib_hdrs="$$sorted_lib_hdrs" \
 -              -v lib_rc="$$win32_lib_rc" \
 -              -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
 -              -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
 -              -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
 -              -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
 -              -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
 -              -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
 -              -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
 -              -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC6_LIBTMPL) > $(VC6_LIBDSP) || { exit 
1; }; \
 -      \
 -      echo "generating '$(VC6_SRCDSP)'"; \
 -      awk -v proj_type=dsp \
 -              -v src_srcs="$$sorted_src_srcs" \
 -              -v src_hdrs="$$sorted_src_hdrs" \
 -              -v src_rc="$$win32_src_rc" \
 -              -v src_x_srcs="$$sorted_src_x_srcs" \
 -              -v src_x_hdrs="$$sorted_src_x_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC6_SRCTMPL) > $(VC6_SRCDSP) || { exit 
1; }; \
 -      \
 -      echo "generating '$(VC7_LIBVCPROJ)'"; \
 -      awk -v proj_type=vcproj1 \
 -              -v lib_srcs="$$sorted_lib_srcs" \
 -              -v lib_hdrs="$$sorted_lib_hdrs" \
 -              -v lib_rc="$$win32_lib_rc" \
 -              -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
 -              -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
 -              -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
 -              -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
 -              -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
 -              -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
 -              -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
 -              -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC7_LIBTMPL) > $(VC7_LIBVCPROJ) || { 
exit 1; }; \
 -      \
 -      echo "generating '$(VC7_SRCVCPROJ)'"; \
 -      awk -v proj_type=vcproj1 \
 -              -v src_srcs="$$sorted_src_srcs" \
 -              -v src_hdrs="$$sorted_src_hdrs" \
 -              -v src_rc="$$win32_src_rc" \
 -              -v src_x_srcs="$$sorted_src_x_srcs" \
 -              -v src_x_hdrs="$$sorted_src_x_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC7_SRCTMPL) > $(VC7_SRCVCPROJ) || { 
exit 1; }; \
 -      \
 -      echo "generating '$(VC71_LIBVCPROJ)'"; \
 -      awk -v proj_type=vcproj1 \
 -              -v lib_srcs="$$sorted_lib_srcs" \
 -              -v lib_hdrs="$$sorted_lib_hdrs" \
 -              -v lib_rc="$$win32_lib_rc" \
 -              -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
 -              -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
 -              -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
 -              -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
 -              -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
 -              -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
 -              -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
 -              -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC71_LIBTMPL) > $(VC71_LIBVCPROJ) || { 
exit 1; }; \
 -      \
 -      echo "generating '$(VC71_SRCVCPROJ)'"; \
 -      awk -v proj_type=vcproj1 \
 -              -v src_srcs="$$sorted_src_srcs" \
 -              -v src_hdrs="$$sorted_src_hdrs" \
 -              -v src_rc="$$win32_src_rc" \
 -              -v src_x_srcs="$$sorted_src_x_srcs" \
 -              -v src_x_hdrs="$$sorted_src_x_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC71_SRCTMPL) > $(VC71_SRCVCPROJ) || { 
exit 1; }; \
 -      \
 -      echo "generating '$(VC8_LIBVCPROJ)'"; \
 -      awk -v proj_type=vcproj2 \
 -              -v lib_srcs="$$sorted_lib_srcs" \
 -              -v lib_hdrs="$$sorted_lib_hdrs" \
 -              -v lib_rc="$$win32_lib_rc" \
 -              -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
 -              -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
 -              -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
 -              -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
 -              -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
 -              -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
 -              -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
 -              -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC8_LIBTMPL) > $(VC8_LIBVCPROJ) || { 
exit 1; }; \
 -      \
 -      echo "generating '$(VC8_SRCVCPROJ)'"; \
 -      awk -v proj_type=vcproj2 \
 -              -v src_srcs="$$sorted_src_srcs" \
 -              -v src_hdrs="$$sorted_src_hdrs" \
 -              -v src_rc="$$win32_src_rc" \
 -              -v src_x_srcs="$$sorted_src_x_srcs" \
 -              -v src_x_hdrs="$$sorted_src_x_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC8_SRCTMPL) > $(VC8_SRCVCPROJ) || { 
exit 1; }; \
 -      \
 -      echo "generating '$(VC9_LIBVCPROJ)'"; \
 -      awk -v proj_type=vcproj2 \
 -              -v lib_srcs="$$sorted_lib_srcs" \
 -              -v lib_hdrs="$$sorted_lib_hdrs" \
 -              -v lib_rc="$$win32_lib_rc" \
 -              -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
 -              -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
 -              -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
 -              -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
 -              -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
 -              -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
 -              -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
 -              -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC9_LIBTMPL) > $(VC9_LIBVCPROJ) || { 
exit 1; }; \
 -      \
 -      echo "generating '$(VC9_SRCVCPROJ)'"; \
 -      awk -v proj_type=vcproj2 \
 -              -v src_srcs="$$sorted_src_srcs" \
 -              -v src_hdrs="$$sorted_src_hdrs" \
 -              -v src_rc="$$win32_src_rc" \
 -              -v src_x_srcs="$$sorted_src_x_srcs" \
 -              -v src_x_hdrs="$$sorted_src_x_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC9_SRCTMPL) > $(VC9_SRCVCPROJ) || { 
exit 1; }; \
 -      \
 -      echo "generating '$(VC10_LIBVCXPROJ)'"; \
 -      awk -v proj_type=vcxproj \
 -              -v lib_srcs="$$sorted_lib_srcs" \
 -              -v lib_hdrs="$$sorted_lib_hdrs" \
 -              -v lib_rc="$$win32_lib_rc" \
 -              -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
 -              -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
 -              -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
 -              -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
 -              -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
 -              -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
 -              -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
 -              -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC10_LIBTMPL) > $(VC10_LIBVCXPROJ) || 
{ exit 1; }; \
 -      \
 -      echo "generating '$(VC10_SRCVCXPROJ)'"; \
 -      awk -v proj_type=vcxproj \
 -              -v src_srcs="$$sorted_src_srcs" \
 -              -v src_hdrs="$$sorted_src_hdrs" \
 -              -v src_rc="$$win32_src_rc" \
 -              -v src_x_srcs="$$sorted_src_x_srcs" \
 -              -v src_x_hdrs="$$sorted_src_x_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC10_SRCTMPL) > $(VC10_SRCVCXPROJ) || 
{ exit 1; }; \
 -      \
 -      echo "generating '$(VC11_LIBVCXPROJ)'"; \
 -      awk -v proj_type=vcxproj \
 -              -v lib_srcs="$$sorted_lib_srcs" \
 -              -v lib_hdrs="$$sorted_lib_hdrs" \
 -              -v lib_rc="$$win32_lib_rc" \
 -              -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
 -              -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
 -              -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
 -              -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
 -              -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
 -              -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
 -              -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
 -              -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC11_LIBTMPL) > $(VC11_LIBVCXPROJ) || 
{ exit 1; }; \
 -      \
 -      echo "generating '$(VC11_SRCVCXPROJ)'"; \
 -      awk -v proj_type=vcxproj \
 -              -v src_srcs="$$sorted_src_srcs" \
 -              -v src_hdrs="$$sorted_src_hdrs" \
 -              -v src_rc="$$win32_src_rc" \
 -              -v src_x_srcs="$$sorted_src_x_srcs" \
 -              -v src_x_hdrs="$$sorted_src_x_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC11_SRCTMPL) > $(VC11_SRCVCXPROJ) || 
{ exit 1; }; \
 -      \
 -      echo "generating '$(VC12_LIBVCXPROJ)'"; \
 -      awk -v proj_type=vcxproj \
 -              -v lib_srcs="$$sorted_lib_srcs" \
 -              -v lib_hdrs="$$sorted_lib_hdrs" \
 -              -v lib_rc="$$win32_lib_rc" \
 -              -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
 -              -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
 -              -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
 -              -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
 -              -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
 -              -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
 -              -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
 -              -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC12_LIBTMPL) > $(VC12_LIBVCXPROJ) || 
{ exit 1; }; \
 -      \
 -      echo "generating '$(VC12_SRCVCXPROJ)'"; \
 -      awk -v proj_type=vcxproj \
 -              -v src_srcs="$$sorted_src_srcs" \
 -              -v src_hdrs="$$sorted_src_hdrs" \
 -              -v src_rc="$$win32_src_rc" \
 -              -v src_x_srcs="$$sorted_src_x_srcs" \
 -              -v src_x_hdrs="$$sorted_src_x_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC12_SRCTMPL) > $(VC12_SRCVCXPROJ) || 
{ exit 1; }; \
 -      \
 -      echo "generating '$(VC14_LIBVCXPROJ)'"; \
 -      awk -v proj_type=vcxproj \
 -              -v lib_srcs="$$sorted_lib_srcs" \
 -              -v lib_hdrs="$$sorted_lib_hdrs" \
 -              -v lib_rc="$$win32_lib_rc" \
 -              -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
 -              -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
 -              -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
 -              -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
 -              -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
 -              -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
 -              -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
 -              -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC14_LIBTMPL) > $(VC14_LIBVCXPROJ) || 
{ exit 1; }; \
 -      \
 -      echo "generating '$(VC14_SRCVCXPROJ)'"; \
 -      awk -v proj_type=vcxproj \
 -              -v src_srcs="$$sorted_src_srcs" \
 -              -v src_hdrs="$$sorted_src_hdrs" \
 -              -v src_rc="$$win32_src_rc" \
 -              -v src_x_srcs="$$sorted_src_x_srcs" \
 -              -v src_x_hdrs="$$sorted_src_x_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC14_SRCTMPL) > $(VC14_SRCVCXPROJ) || 
{ exit 1; }; \
 -      \
 -      echo "generating '$(VC15_LIBVCXPROJ)'"; \
 -      awk -v proj_type=vcxproj \
 -              -v lib_srcs="$$sorted_lib_srcs" \
 -              -v lib_hdrs="$$sorted_lib_hdrs" \
 -              -v lib_rc="$$win32_lib_rc" \
 -              -v lib_vauth_srcs="$$sorted_lib_vauth_srcs" \
 -              -v lib_vauth_hdrs="$$sorted_lib_vauth_hdrs" \
 -              -v lib_vquic_srcs="$$sorted_lib_vquic_srcs" \
 -              -v lib_vquic_hdrs="$$sorted_lib_vquic_hdrs" \
 -              -v lib_vssh_srcs="$$sorted_lib_vssh_srcs" \
 -              -v lib_vssh_hdrs="$$sorted_lib_vssh_hdrs" \
 -              -v lib_vtls_srcs="$$sorted_lib_vtls_srcs" \
 -              -v lib_vtls_hdrs="$$sorted_lib_vtls_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC15_LIBTMPL) > $(VC15_LIBVCXPROJ) || 
{ exit 1; }; \
 -      \
 -      echo "generating '$(VC15_SRCVCXPROJ)'"; \
 -      awk -v proj_type=vcxproj \
 -              -v src_srcs="$$sorted_src_srcs" \
 -              -v src_hdrs="$$sorted_src_hdrs" \
 -              -v src_rc="$$win32_src_rc" \
 -              -v src_x_srcs="$$sorted_src_x_srcs" \
 -              -v src_x_hdrs="$$sorted_src_x_hdrs" \
 -              "$$awk_code" $(srcdir)/$(VC15_SRCTMPL) > $(VC15_SRCVCXPROJ) || 
{ exit 1; };)
 -
  tidy:
        (cd src && $(MAKE) tidy)
        (cd lib && $(MAKE) tidy)
diff --cc docs/cmdline-opts/Makefile.am
index edc585538,0c81b623b..d778fb062
--- a/docs/cmdline-opts/Makefile.am
+++ b/docs/cmdline-opts/Makefile.am
@@@ -26,10 -26,10 +26,11 @@@ MANPAGE = $(top_builddir)/docs/gnurl.
  
  include Makefile.inc
  
 -EXTRA_DIST = $(DPAGES) MANPAGE.md gen.pl $(OTHERPAGES) CMakeLists.txt
 +EXTRA_DIST = $(DPAGES) MANPAGE.md gen.pl $(OTHERPAGES)
  
 -all: $(MANPAGE)
 +all:
 +      @echo man page generation no longer required
  
  $(MANPAGE): $(DPAGES) $(OTHERPAGES) Makefile.inc
-       @PERL@ $(srcdir)/gen.pl mainpage $(srcdir) > $(MANPAGE)
+       @echo "generate $(MANPAGE)"
+       @(cd $(srcdir) && @PERL@ ./gen.pl mainpage $(DPAGES)) > $(MANPAGE)
diff --cc docs/cmdline-opts/gen.pl
index 329fdc02b,b7a924e8a..ef19e2448
--- a/docs/cmdline-opts/gen.pl
+++ b/docs/cmdline-opts/gen.pl
@@@ -4,7 -25,7 +25,7 @@@
  
  This script generates the manpage.
  
- Example: gen.pl mainpage > gnurl.1
 -Example: gen.pl <command> [files] > curl.1
++Example: gen.pl <command> [files] > gnurl.1
  
  Dev notes:
  
diff --cc docs/examples/sessioninfo.c
index 3c0b143e8,98bf2bfd8..3941dc924
--- a/docs/examples/sessioninfo.c
+++ b/docs/examples/sessioninfo.c
@@@ -29,8 -29,9 +29,9 @@@
  
  #include <stdio.h>
  
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  #include <gnutls/gnutls.h>
+ #include <gnutls/x509.h>
  
  static CURL *curl;
  
diff --cc docs/libcurl/gnurl_easy_getinfo.3
index 3c3d4779e,000000000..7ffd6b308
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_getinfo.3
+++ b/docs/libcurl/gnurl_easy_getinfo.3
@@@ -1,280 -1,0 +1,280 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_easy_getinfo 3 "11 Feb 2009" "libcurl 7.19.4" "libgnurl 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
 +.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_TOTAL_TIME_T
 +Total time of previous transfer.
 +See \fICURLINFO_TOTAL_TIME_T(3)\fP
 +.IP CURLINFO_NAMELOOKUP_TIME
 +Time from start until name resolving completed.
 +See \fICURLINFO_NAMELOOKUP_TIME(3)\fP
 +.IP CURLINFO_NAMELOOKUP_TIME_T
 +Time from start until name resolving completed.
 +See \fICURLINFO_NAMELOOKUP_TIME_T(3)\fP
 +.IP CURLINFO_CONNECT_TIME
 +Time from start until remote host or proxy completed.
 +See \fICURLINFO_CONNECT_TIME(3)\fP
 +.IP CURLINFO_CONNECT_TIME_T
 +Time from start until remote host or proxy completed.
 +See \fICURLINFO_CONNECT_TIME_T(3)\fP
 +.IP CURLINFO_APPCONNECT_TIME
 +Time from start until SSL/SSH handshake completed.
 +See \fICURLINFO_APPCONNECT_TIME(3)\fP
 +.IP CURLINFO_APPCONNECT_TIME_T
 +Time from start until SSL/SSH handshake completed.
 +See \fICURLINFO_APPCONNECT_TIME_T(3)\fP
 +.IP CURLINFO_PRETRANSFER_TIME
 +Time from start until just before the transfer begins.
 +See \fICURLINFO_PRETRANSFER_TIME(3)\fP
 +.IP CURLINFO_PRETRANSFER_TIME_T
 +Time from start until just before the transfer begins.
 +See \fICURLINFO_PRETRANSFER_TIME_T(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_STARTTRANSFER_TIME_T
 +Time from start until just when the first byte is received.
 +See \fICURLINFO_STARTTRANSFER_TIME_T(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_TIME_T
 +Time taken for all redirect steps before the final transfer.
 +See \fICURLINFO_REDIRECT_TIME_T(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_RETRY_AFTER
 +The value from the from the Retry-After header.
 +See \fICURLINFO_RETRY_AFTER(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.
++Whether or not a time conditional was met or 304 HTTP response.
 +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 and \fICURLINFO_NAMELOOKUP_TIME_T\fP.
 +The time it took from the start until the name resolving was completed.
 +.IP CONNECT
 +\fICURLINFO_CONNECT_TIME\fP and \fICURLINFO_CONNECT_TIME_T\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 and \fICURLINFO_APPCONNECT_TIME_T\fP.
 +The time it took from the start until the SSL
 +connect/handshake with the remote host was completed. (Added in 7.19.0)
 +The latter is the integer version (measuring microseconds).  (Added in 7.60.0)
 +.IP PRETRANSFER
 +\fICURLINFO_PRETRANSFER_TIME\fP and \fICURLINFO_PRETRANSFER_TIME_T\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 and \fICURLINFO_STARTTRANSFER_TIME_T\fP.
 +The time it took from the start until the
 +first byte is received by libcurl.
 +.IP TOTAL
 +\fICURLINFO_TOTAL_TIME\fP and \fICURLINFO_TOTAL_TIME_T\fP.
 +Total time of the previous request.
 +.IP REDIRECT
 +\fICURLINFO_REDIRECT_TIME\fP and \fICURLINFO_REDIRECT_TIME_T\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_init.3
index 3253fe1c0,000000000..a17400dc5
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_init.3
+++ b/docs/libcurl/gnurl_easy_init.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_easy_init 3 "4 March 2002" "libcurl 7.8.1" "libgnurl Manual"
 +.SH NAME
 +curl_easy_init - Start a libcurl easy session
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +.BI "CURL *curl_easy_init( );"
 +.SH DESCRIPTION
 +This function must be the first function to call, and it returns a CURL easy
 +handle that you must use as input to other functions in the easy
 +interface. This call \fBMUST\fP have a corresponding call to
 +\fIcurl_easy_cleanup(3)\fP when the operation is complete.
 +
 +If you did not already call \fIcurl_global_init(3)\fP, \fIcurl_easy_init(3)\fP
 +does it automatically.  This may be lethal in multi-threaded cases, since
 +\fIcurl_global_init(3)\fP is not thread-safe, and it may result in resource
 +problems because there is no corresponding cleanup.
 +
 +You are strongly advised to not allow this automatic behaviour, by calling
 +\fIcurl_global_init(3)\fP yourself properly.  See the description in
 +\fBlibcurl\fP(3) of global environment requirements for details of how to use
 +this function.
 +.SH RETURN VALUE
 +If this function returns NULL, something went wrong and you cannot use the
 +other curl functions.
 +.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_cleanup "(3), " curl_global_init "(3), " curl_easy_reset "(3), "
 +.BR curl_easy_perform "(3) "
diff --cc docs/libcurl/gnurl_easy_perform.3
index c0ace9921,000000000..36c6675f0
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_perform.3
+++ b/docs/libcurl/gnurl_easy_perform.3
@@@ -1,74 -1,0 +1,74 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_easy_perform 3 "5 Mar 2001" "libcurl 7.7" "libgnurl Manual"
 +.SH NAME
 +curl_easy_perform - perform a blocking file transfer
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_easy_perform(CURL *" easy_handle ");"
 +.ad
 +.SH DESCRIPTION
 +Invoke this function after \fIcurl_easy_init(3)\fP and all the
 +\fIcurl_easy_setopt(3)\fP calls are made, and will perform the transfer as
 +described in the options. It must be called with the same \fBeasy_handle\fP as
 +input as the \fIcurl_easy_init(3)\fP call returned.
 +
 +\fIcurl_easy_perform(3)\fP performs the entire request in a blocking manner
 +and returns when done, or if it failed. For non-blocking behavior, see
 +\fIcurl_multi_perform(3)\fP.
 +
 +You can do any amount of calls to \fIcurl_easy_perform(3)\fP while using the
 +same \fBeasy_handle\fP. If you intend to transfer more than one file, you are
 +even encouraged to do so. libcurl will then attempt to re-use the same
 +connection for the following transfers, thus making the operations faster,
 +less CPU intense and using less network resources. Just note that you will
 +have to use \fIcurl_easy_setopt(3)\fP between the invokes to set options for
 +the following curl_easy_perform.
 +
 +You must never call this function simultaneously from two places using the
 +same \fBeasy_handle\fP. Let the function return first before invoking it
 +another time. If you want parallel transfers, you must use several curl
 +easy_handles.
 +
 +While the \fBeasy_handle\fP is added to a multi handle, it cannot be used by
 +\fIcurl_easy_perform(3)\fP.
 +.SH RETURN VALUE
 +CURLE_OK (0) means everything was ok, non-zero means an error occurred as
 +.I <gnurl/curl.h>
 +defines - see \fIlibcurl-errors(3)\fP. If the \fICURLOPT_ERRORBUFFER(3)\fP was
 +set with \fIcurl_easy_setopt(3)\fP there will be a readable error message in
 +the error buffer when non-zero is returned.
 +.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_setopt "(3), "
 +.BR curl_multi_add_handle "(3), " curl_multi_perform "(3), "
 +.BR libcurl-errors "(3), "
diff --cc docs/libcurl/gnurl_easy_strerror.3
index f38b8acb5,000000000..c20bcb9d3
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_strerror.3
+++ b/docs/libcurl/gnurl_easy_strerror.3
@@@ -1,40 -1,0 +1,40 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_easy_strerror 3 "26 Apr 2004" "libcurl 7.12" "libgnurl Manual"
 +.SH NAME
 +curl_easy_strerror - return string describing error code
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +const char *curl_easy_strerror(CURLcode errornum);
 +.SH DESCRIPTION
 +The \fIcurl_easy_strerror(3)\fP function returns a string describing the
 +CURLcode error code passed in the argument \fIerrornum\fP.
 +
 +Typically applications also appreciate \fICURLOPT_ERRORBUFFER(3)\fP for more
 +specific error descriptions generated at run-time.
 +.SH AVAILABILITY
 +This function was added in libcurl 7.12.0
 +.SH RETURN VALUE
 +A pointer to a zero terminated string.
 +.SH "SEE ALSO"
 +.BR libcurl-errors "(3), " curl_multi_strerror "(3), " curl_share_strerror 
"(3)"
diff --cc docs/libcurl/gnurl_escape.3
index 58c4e0c1a,000000000..8017ca7c9
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_escape.3
+++ b/docs/libcurl/gnurl_escape.3
@@@ -1,48 -1,0 +1,48 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_escape 3 "6 March 2002" "libcurl 7.9" "libgnurl Manual"
 +.SH NAME
 +curl_escape - URL encodes the given string
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "char *curl_escape( const char *" url ", int "length " );"
 +.ad
 +.SH DESCRIPTION
 +Obsolete function. Use \fIcurl_easy_escape(3)\fP instead!
 +
 +This function will convert the given input string to an URL encoded string and
 +return that as a new allocated string. All input characters that are not a-z,
 +A-Z or 0-9 will be converted to their "URL escaped" version (%NN where NN is a
 +two-digit hexadecimal number).
 +
 +If the 'length' argument is set to 0, curl_escape() will use strlen() on the
 +input 'url' string to find out the size.
 +
 +You must \fIcurl_free(3)\fP the returned string when you're done with it.
 +.SH AVAILABILITY
 +Since 7.15.4, \fIcurl_easy_escape(3)\fP should be used. This function will
 +be removed in a future release.
 +.SH RETURN VALUE
 +A pointer to a zero terminated string or NULL if it failed.
 +.SH "SEE ALSO"
 +.BR curl_unescape "(3), " curl_free "(3), " RFC 2396
diff --cc docs/libcurl/gnurl_formadd.3
index dbfd43214,000000000..e3a48e49d
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_formadd.3
+++ b/docs/libcurl/gnurl_formadd.3
@@@ -1,267 -1,0 +1,267 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_formadd 3 "24 June 2002" "libcurl 7.9.8" "libgnurl Manual"
 +.SH NAME
 +curl_formadd - add a section to a multipart/formdata HTTP POST
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLFORMcode curl_formadd(struct curl_httppost ** " firstitem,
 +.BI "struct curl_httppost ** " lastitem, " ...);"
 +.ad
 +.SH DESCRIPTION
 +This function is deprecated. Do not use! See \fIcurl_mime_init(3)\fP instead!
 +
 +curl_formadd() is used to append sections when building a multipart/formdata
 +HTTP POST (sometimes referred to as RFC2388-style posts). Append one section
 +at a time until you've added all the sections you want included and then you
 +pass the \fIfirstitem\fP pointer as parameter to \fICURLOPT_HTTPPOST(3)\fP.
 +\fIlastitem\fP is set after each \fIcurl_formadd(3)\fP call and on repeated
 +invokes it should be left as set to allow repeated invokes to find the end of
 +the list faster.
 +
 +After the \fIlastitem\fP pointer follow the real arguments.
 +
 +The pointers \fIfirstitem\fP and \fIlastitem\fP should both be pointing to
 +NULL in the first call to this function. All list-data will be allocated by
 +the function itself. You must call \fIcurl_formfree(3)\fP on the
 +\fIfirstitem\fP after the form post has been done to free the resources.
 +
 +Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
 +You can disable this header with \fICURLOPT_HTTPHEADER(3)\fP as usual.
 +
 +First, there are some basics you need to understand about multipart/formdata
 +posts. Each part consists of at least a NAME and a CONTENTS part. If the part
 +is made for file upload, there are also a stored CONTENT-TYPE and a FILENAME.
 +Below, we'll discuss what options you use to set these properties in the
 +parts you want to add to your post.
 +
 +The options listed first are for making normal parts. The options from
 +\fICURLFORM_FILE\fP through \fICURLFORM_BUFFERLENGTH\fP are for file upload
 +parts.
 +.SH OPTIONS
 +.IP CURLFORM_COPYNAME
 +followed by a string which provides the \fIname\fP of this part. libcurl
 +copies the string so your application doesn't need to keep it around after
 +this function call. If the name isn't NUL-terminated, you must set its length
 +with \fBCURLFORM_NAMELENGTH\fP. The \fIname\fP is not allowed to contain
 +zero-valued bytes. The copied data will be freed by \fIcurl_formfree(3)\fP.
 +.IP CURLFORM_PTRNAME
 +followed by a string which provides the \fIname\fP of this part. libcurl
 +will use the pointer and refer to the data in your application, so you
 +must make sure it remains until curl no longer needs it. If the name
 +isn't NUL-terminated, you must set its length with \fBCURLFORM_NAMELENGTH\fP.
 +The \fIname\fP is not allowed to contain zero-valued bytes.
 +.IP CURLFORM_COPYCONTENTS
 +followed by a pointer to the contents of this part, the actual data
 +to send away. libcurl copies the provided data, so your application doesn't
 +need to keep it around after this function call. If the data isn't null
 +terminated, or if you'd like it to contain zero bytes, you must
 +set the length of the name with \fBCURLFORM_CONTENTSLENGTH\fP. The copied
 +data will be freed by \fIcurl_formfree(3)\fP.
 +.IP CURLFORM_PTRCONTENTS
 +followed by a pointer to the contents of this part, the actual data
 +to send away. libcurl will use the pointer and refer to the data in your
 +application, so you must make sure it remains until curl no longer needs it.
 +If the data isn't NUL-terminated, or if you'd like it to contain zero bytes,
 +you must set its length  with \fBCURLFORM_CONTENTSLENGTH\fP.
 +.IP CURLFORM_CONTENTLEN
 +followed by a curl_off_t value giving the length of the contents. Note that
 +for \fICURLFORM_STREAM\fP contents, this option is mandatory.
 +
 +If you pass a 0 (zero) for this option, libcurl will instead do a strlen() on
 +the contents to figure out the size. If you really want to send a zero byte
 +content then you must make sure strlen() on the data pointer returns zero.
 +
 +(Option added in 7.46.0)
 +.IP CURLFORM_CONTENTSLENGTH
 +(This option is deprecated. Use \fICURLFORM_CONTENTLEN\fP instead!)
 +
 +followed by a long giving the length of the contents. Note that for
 +\fICURLFORM_STREAM\fP contents, this option is mandatory.
 +
 +If you pass a 0 (zero) for this option, libcurl will instead do a strlen() on
 +the contents to figure out the size. If you really want to send a zero byte
 +content then you must make sure strlen() on the data pointer returns zero.
 +.IP CURLFORM_FILECONTENT
 +followed by a filename, causes that file to be read and its contents used
 +as data in this part. This part does \fInot\fP automatically become a file
 +upload part simply because its data was read from a file.
 +
 +The specified file needs to kept around until the associated transfer is done.
 +.IP CURLFORM_FILE
 +followed by a filename, makes this part a file upload part. It sets the
 +\fIfilename\fP field to the basename of the provided filename, it reads the
 +contents of the file and passes them as data and sets the content-type if the
 +given file match one of the internally known file extensions.  For
 +\fBCURLFORM_FILE\fP the user may send one or more files in one part by
 +providing multiple \fBCURLFORM_FILE\fP arguments each followed by the filename
 +(and each \fICURLFORM_FILE\fP is allowed to have a
 +\fICURLFORM_CONTENTTYPE\fP).
 +
 +The given upload file has to exist in its full in the file system already when
 +the upload starts, as libcurl needs to read the correct file size beforehand.
 +
 +The specified file needs to kept around until the associated transfer is done.
 +.IP CURLFORM_CONTENTTYPE
 +is used in combination with \fICURLFORM_FILE\fP. Followed by a pointer to a
 +string which provides the content-type for this part, possibly instead of an
 +internally chosen one.
 +.IP CURLFORM_FILENAME
 +is used in combination with \fICURLFORM_FILE\fP. Followed by a pointer to a
 +string, it tells libcurl to use the given string as the \fIfilename\fP in the
 +file upload part instead of the actual file name.
 +.IP CURLFORM_BUFFER
 +is used for custom file upload parts without use of \fICURLFORM_FILE\fP.  It
 +tells libcurl that the file contents are already present in a buffer.  The
 +parameter is a string which provides the \fIfilename\fP field in the content
 +header.
 +.IP CURLFORM_BUFFERPTR
 +is used in combination with \fICURLFORM_BUFFER\fP. The parameter is a pointer
 +to the buffer to be uploaded. This buffer must not be freed until after
 +\fIcurl_easy_cleanup(3)\fP is called. You must also use
 +\fICURLFORM_BUFFERLENGTH\fP to set the number of bytes in the buffer.
 +.IP CURLFORM_BUFFERLENGTH
 +is used in combination with \fICURLFORM_BUFFER\fP. The parameter is a
 +long which gives the length of the buffer.
 +.IP CURLFORM_STREAM
 +Tells libcurl to use the \fICURLOPT_READFUNCTION(3)\fP callback to get
 +data. The parameter you pass to \fICURLFORM_STREAM\fP is the pointer passed on
 +to the read callback's fourth argument. If you want the part to look like a
 +file upload one, set the \fICURLFORM_FILENAME\fP parameter as well. Note that
 +when using \fICURLFORM_STREAM\fP, \fICURLFORM_CONTENTSLENGTH\fP must also be
 +set with the total expected length of the part unless the formpost is sent
 +chunked encoded. (Option added in libcurl 7.18.2)
 +.IP CURLFORM_ARRAY
 +Another possibility to send options to curl_formadd() is the
 +\fBCURLFORM_ARRAY\fP option, that passes a struct curl_forms array pointer as
 +its value. Each curl_forms structure element has a CURLformoption and a char
 +pointer. The final element in the array must be a CURLFORM_END. All available
 +options can be used in an array, except the CURLFORM_ARRAY option itself!  The
 +last argument in such an array must always be \fBCURLFORM_END\fP.
 +.IP CURLFORM_CONTENTHEADER
 +specifies extra headers for the form POST section.  This takes a curl_slist
 +prepared in the usual way using \fBcurl_slist_append\fP and appends the list
 +of headers to those libcurl automatically generates. The list must exist while
 +the POST occurs, if you free it before the post completes you may experience
 +problems.
 +
 +When you've passed the HttpPost pointer to \fIcurl_easy_setopt(3)\fP (using
 +the \fICURLOPT_HTTPPOST(3)\fP option), you must not free the list until after
 +you've called \fIcurl_easy_cleanup(3)\fP for the curl handle.
 +
 +See example below.
 +.SH AVAILABILITY
 +Deprecated in 7.56.0. Before this release, field names were allowed to
 +contain zero-valued bytes. The pseudo-filename "-" to read stdin is
 +discouraged although still supported, but data is not read before being
 +actually sent: the effective data size can then not be automatically
 +determined, resulting in a chunked encoding transfer. Backslashes and
 +double quotes in field and file names are now escaped before transmission.
 +.SH RETURN VALUE
 +0 means everything was ok, non-zero means an error occurred corresponding
 +to a CURL_FORMADD_* constant defined in
 +.I <gnurl/curl.h>
 +.SH EXAMPLE
 +.nf
 +
 + struct curl_httppost* post = NULL;
 + struct curl_httppost* last = NULL;
 + char namebuffer[] = "name buffer";
 + long namelength = strlen(namebuffer);
 + char buffer[] = "test buffer";
 + char htmlbuffer[] = "<HTML>test buffer</HTML>";
 + long htmlbufferlength = strlen(htmlbuffer);
 + struct curl_forms forms[3];
 + char file1[] = "my-face.jpg";
 + char file2[] = "your-face.jpg";
 + /* add null character into htmlbuffer, to demonstrate that
 +    transfers of buffers containing null characters actually work
 + */
 + htmlbuffer[8] = '\\0';
 +
 + /* Add simple name/content section */
 + curl_formadd(&post, &last, CURLFORM_COPYNAME, "name",
 +              CURLFORM_COPYCONTENTS, "content", CURLFORM_END);
 +
 + /* Add simple name/content/contenttype section */
 + curl_formadd(&post, &last, CURLFORM_COPYNAME, "htmlcode",
 +              CURLFORM_COPYCONTENTS, "<HTML></HTML>",
 +              CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
 +
 + /* Add name/ptrcontent section */
 + curl_formadd(&post, &last, CURLFORM_COPYNAME, "name_for_ptrcontent",
 +              CURLFORM_PTRCONTENTS, buffer, CURLFORM_END);
 +
 + /* Add ptrname/ptrcontent section */
 + curl_formadd(&post, &last, CURLFORM_PTRNAME, namebuffer,
 +              CURLFORM_PTRCONTENTS, buffer, CURLFORM_NAMELENGTH,
 +              namelength, CURLFORM_END);
 +
 + /* Add name/ptrcontent/contenttype section */
 + curl_formadd(&post, &last, CURLFORM_COPYNAME, "html_code_with_hole",
 +              CURLFORM_PTRCONTENTS, htmlbuffer,
 +              CURLFORM_CONTENTSLENGTH, htmlbufferlength,
 +              CURLFORM_CONTENTTYPE, "text/html", CURLFORM_END);
 +
 + /* Add simple file section */
 + curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
 +              CURLFORM_FILE, "my-face.jpg", CURLFORM_END);
 +
 + /* Add file/contenttype section */
 + curl_formadd(&post, &last, CURLFORM_COPYNAME, "picture",
 +              CURLFORM_FILE, "my-face.jpg",
 +              CURLFORM_CONTENTTYPE, "image/jpeg", CURLFORM_END);
 +
 + /* Add two file section */
 + curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
 +              CURLFORM_FILE, "my-face.jpg",
 +              CURLFORM_FILE, "your-face.jpg", CURLFORM_END);
 +
 + /* Add two file section using CURLFORM_ARRAY */
 + forms[0].option = CURLFORM_FILE;
 + forms[0].value  = file1;
 + forms[1].option = CURLFORM_FILE;
 + forms[1].value  = file2;
 + forms[2].option  = CURLFORM_END;
 +
 + /* Add a buffer to upload */
 + curl_formadd(&post, &last,
 +              CURLFORM_COPYNAME, "name",
 +              CURLFORM_BUFFER, "data",
 +              CURLFORM_BUFFERPTR, record,
 +              CURLFORM_BUFFERLENGTH, record_length,
 +              CURLFORM_END);
 +
 + /* no option needed for the end marker */
 + curl_formadd(&post, &last, CURLFORM_COPYNAME, "pictures",
 +              CURLFORM_ARRAY, forms, CURLFORM_END);
 + /* Add the content of a file as a normal post text value */
 + curl_formadd(&post, &last, CURLFORM_COPYNAME, "filecontent",
 +              CURLFORM_FILECONTENT, ".bashrc", CURLFORM_END);
 + /* Set the form info */
 + curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
 +
 +.SH "SEE ALSO"
 +.BR curl_easy_setopt "(3),"
 +.BR curl_formfree "(3),"
 +.BR curl_mime_init "(3)"
diff --cc docs/libcurl/gnurl_getenv.3
index 98d928582,000000000..2d84a727f
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_getenv.3
+++ b/docs/libcurl/gnurl_getenv.3
@@@ -1,49 -1,0 +1,49 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_getenv 3 "30 April 2004" "libcurl 7.12" "libgnurl Manual"
 +.SH NAME
 +curl_getenv - return value for environment name
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "char *curl_getenv(const char *" name ");"
 +.ad
 +.SH DESCRIPTION
 +curl_getenv() is a portable wrapper for the getenv() function, meant to
 +emulate its behaviour and provide an identical interface for all operating
 +systems libcurl builds on (including win32).
 +
 +You must \fIcurl_free(3)\fP the returned string when you're done with it.
 +.SH AVAILABILITY
 +This function will be removed from the public libcurl API in a near future. It
 +will instead be made "available" by source code access only, and then as
 +curlx_getenv().
 +.SH RETURN VALUE
 +A pointer to a zero terminated string or NULL if it failed to find the
 +specified name.
 +.SH NOTE
 +Under unix operating systems, there isn't any point in returning an allocated
 +memory, although other systems won't work properly if this isn't done. The
 +unix implementation thus has to suffer slightly from the drawbacks of other
 +systems.
 +.SH "SEE ALSO"
 +.BR getenv "(3C), "
diff --cc docs/libcurl/gnurl_mime_type.3
index b1cf0a378,000000000..eeb688aba
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_type.3
+++ b/docs/libcurl/gnurl_mime_type.3
@@@ -1,83 -1,0 +1,83 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_mime_type 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_type - set a mime part's content type
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_mime_type(curl_mimepart * " part ,
 +.BI "const char * " mimetype ");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_type(3)\fP sets a mime part's content type.
 +
 +\fIpart\fP is the part's handle to assign the content type to.
 +
 +\fImimetype\fP points to the nul-terminated file mime type string; it may be
 +set to NULL to remove a previously attached mime type.
 +
 +The mime type string is copied into the part, thus the associated storage may
 +safely be released or reused after call. Setting a part's type twice is valid:
 +only the value set by the last call is retained.
 +
 +In the absence of a mime type and if needed by the protocol specifications,
 +a default mime type is determined by the context:
 +.br
 +- If set as a custom header, use this value.
 +.br
 +- application/form-data for an HTTP form post.
 +.br
 +- If a remote file name is set, the mime type is taken from the file name
 +extension, or application/octet-stream by default.
 +.br
 +- For a multipart part, multipart/mixed.
 +.br
 +- text/plain in other cases.
 +.SH AVAILABILITY
 +As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
 +.SH RETURN VALUE
 +CURLE_OK or a CURL error code upon failure.
 +.SH EXAMPLE
 +.nf
 + curl_mime *mime;
 + curl_mimepart *part;
 +
 + /* create a mime handle */
 + mime = curl_mime_init(easy);
 +
 + /* add a part */
 + part = curl_mime_addpart(mime);
 +
 + /* get data from this file */
 + curl_mime_filedata(part, "image.png");
 +
 + /* content-type for this part */
 + curl_mime_type(part, "image/png");
 +
 + /* set name */
 + curl_mime_name(part, "image");
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_mime_addpart "(3),"
 +.BR curl_mime_name "(3),"
 +.BR curl_mime_data "(3)"
diff --cc docs/libcurl/gnurl_multi_assign.3
index f10e7832e,000000000..7cb2bf29b
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_assign.3
+++ b/docs/libcurl/gnurl_multi_assign.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_multi_assign 3 "9 Jul 2006" "libcurl 7.16.0" "libgnurl Manual"
 +.SH NAME
 +curl_multi_assign \- set data to associate with an internal socket
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_assign(CURLM *multi_handle, curl_socket_t sockfd,
 +                            void *sockptr);
 +.SH DESCRIPTION
 +This function creates an association in the multi handle between the given
 +socket and a private pointer of the application. This is designed for
 +\fIcurl_multi_socket_action(3)\fP uses.
 +
 +When set, the \fIsockptr\fP pointer will be passed to all future socket
 +callbacks for the specific \fIsockfd\fP socket.
 +
 +If the given \fIsockfd\fP isn't already in use by libcurl, this function will
 +return an error.
 +
 +libcurl only keeps one single pointer associated with a socket, so calling
 +this function several times for the same socket will make the last set pointer
 +get used.
 +
 +The idea here being that this association (socket to private pointer) is
 +something that just about every application that uses this API will need and
 +then libcurl can just as well do it since it already has an internal hash
 +table lookup for this.
 +.SH "RETURN VALUE"
 +The standard CURLMcode for multi interface error codes.
 +.SH "TYPICAL USAGE"
 +In a typical application you allocate a struct or at least use some kind of
 +semi-dynamic data for each socket that we must wait for action on when using
 +the \fIcurl_multi_socket_action(3)\fP approach.
 +
 +When our socket-callback gets called by libcurl and we get to know about yet
 +another socket to wait for, we can use \fIcurl_multi_assign(3)\fP to point out
 +the particular data so that when we get updates about this same socket again,
 +we don't have to find the struct associated with this socket by ourselves.
 +.SH AVAILABILITY
 +This function was added in libcurl 7.15.5.
 +.SH "SEE ALSO"
 +.BR curl_multi_setopt "(3), " curl_multi_socket_action "(3) "
diff --cc docs/libcurl/gnurl_multi_info_read.3
index cb1d731fd,000000000..daa754a9a
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_info_read.3
+++ b/docs/libcurl/gnurl_multi_info_read.3
@@@ -1,94 -1,0 +1,94 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_multi_info_read 3 "18 Dec 2004" "libcurl 7.10.3" "libgnurl Manual"
 +.SH NAME
 +curl_multi_info_read - read multi stack informationals
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMsg *curl_multi_info_read( CURLM *multi_handle,
 +                               int *msgs_in_queue);
 +.ad
 +.SH DESCRIPTION
 +Ask the multi handle if there are any messages/informationals from the
 +individual transfers. Messages may include informationals such as an 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
 +NULL is returned as a signal that there is no more to get at this point. The
 +integer pointed to with \fImsgs_in_queue\fP will contain the number of
 +remaining messages after this function was called.
 +
 +When you fetch a message using this function, it is removed from the internal
 +queue so calling this function again will not return the same message
 +again. It will instead return new messages at each new invoke until the queue
 +is emptied.
 +
 +\fBWARNING:\fP The data the returned pointer points to will not survive
 +calling \fIcurl_multi_cleanup(3)\fP, \fIcurl_multi_remove_handle(3)\fP or
 +\fIcurl_easy_cleanup(3)\fP.
 +
 +The 'CURLMsg' struct is very simple and only contains very basic information.
 +If more involved information is wanted, the particular "easy handle" is
 +present in that struct and can be used in subsequent regular
 +\fIcurl_easy_getinfo(3)\fP calls (or similar):
 +
 +.nf
 + 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;
 + };
 +.fi
 +When \fBmsg\fP is \fICURLMSG_DONE\fP, the message identifies a transfer that
 +is done, and then \fBresult\fP contains the return code for the easy handle
 +that just completed.
 +
 +At this point, there are no other \fBmsg\fP types defined.
 +.SH EXAMPLE
 +.nf
 +struct CURLMsg *m;
 +
 +/* call curl_multi_perform or curl_multi_socket_action first, then loop
 +   through and check if there are any transfers that have completed */
 +
 +do {
 +  int msgq = 0;
 +  m = curl_multi_info_read(multi_handle, &msgq);
 +  if(m && (m->msg == CURLMSG_DONE)) {
 +    CURL *e = m->easy_handle;
 +    transfers--;
 +    curl_multi_remove_handle(multi_handle, e);
 +    curl_easy_cleanup(e);
 +  }
 +} while(m);
 +.fi
 +.SH "RETURN VALUE"
 +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.
 +.SH "SEE ALSO"
 +.BR curl_multi_cleanup "(3), " curl_multi_init "(3), " curl_multi_perform 
"(3)"
diff --cc docs/libcurl/gnurl_multi_init.3
index f711015cd,000000000..d06c12f4e
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_init.3
+++ b/docs/libcurl/gnurl_multi_init.3
@@@ -1,39 -1,0 +1,39 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_multi_init 3 "1 March 2002" "libcurl 7.9.5" "libgnurl Manual"
 +.SH NAME
 +curl_multi_init - create a multi handle
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLM *curl_multi_init( );"
 +.ad
 +.SH DESCRIPTION
 +This function returns a CURLM handle to be used as input to all the other
 +multi-functions, sometimes referred to as a multi handle in some places in the
 +documentation. This init call MUST have a corresponding call to
 +\fIcurl_multi_cleanup(3)\fP when the operation is complete.
 +.SH RETURN VALUE
 +If this function returns NULL, something went wrong and you cannot use the
 +other curl functions.
 +.SH "SEE ALSO"
 +.BR curl_multi_cleanup "(3)," curl_global_init "(3)," curl_easy_init "(3)"
diff --cc docs/libcurl/gnurl_multi_strerror.3
index 3dcd63a5d,000000000..c2ee1e4e2
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_strerror.3
+++ b/docs/libcurl/gnurl_multi_strerror.3
@@@ -1,37 -1,0 +1,37 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_multi_strerror 3 "26 Apr 2004" "libcurl 7.12" "libgnurl Manual"
 +.SH NAME
 +curl_multi_strerror - return string describing error code
 +.SH SYNOPSIS
 +.nf
 +.B #include <gnurl/curl.h>
 +.BI "const char *curl_multi_strerror(CURLMcode " errornum ");"
 +.SH DESCRIPTION
 +The curl_multi_strerror() function returns a string describing the CURLMcode
 +error code passed in the argument \fIerrornum\fP.
 +.SH AVAILABILITY
 +This function was added in libcurl 7.12.0
 +.SH RETURN VALUE
 +A pointer to a zero terminated string.
 +.SH "SEE ALSO"
 +.BR libcurl-errors "(3), " curl_easy_strerror "(3), " curl_share_strerror 
"(3)"
diff --cc docs/libcurl/gnurl_multi_timeout.3
index db84e69bc,000000000..e2620dd8f
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_timeout.3
+++ b/docs/libcurl/gnurl_multi_timeout.3
@@@ -1,78 -1,0 +1,78 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_multi_timeout 3 "2 Jan 2006" "libcurl 7.16.0" "libgnurl Manual"
 +.SH NAME
 +curl_multi_timeout \- how long to wait for action before proceeding
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_timeout(CURLM *multi_handle, long *timeout);
 +.SH DESCRIPTION
 +
 +An application using the libcurl multi interface should call
 +\fIcurl_multi_timeout(3)\fP to figure out how long it should wait for socket
 +actions \- at most \- before proceeding.
 +
 +Proceeding means either doing the socket-style timeout action: call the
 +\fIcurl_multi_socket_action(3)\fP function with the \fBsockfd\fP argument set
 +to CURL_SOCKET_TIMEOUT, or call \fIcurl_multi_perform(3)\fP if you're using
 +the simpler and older multi interface approach.
 +
 +The timeout value returned in the long \fBtimeout\fP points to, is in number
 +of milliseconds at this very moment. If 0, it means you should proceed
 +immediately without waiting for anything. If it returns -1, there's no timeout
 +at all set.
 +
 +An application that uses the multi_socket API SHOULD NOT use this function, 
but
 +SHOULD instead use \fIcurl_multi_setopt(3)\fP and its
 +\fPCURLMOPT_TIMERFUNCTION\fP option for proper and desired behavior.
 +
 +Note: if libcurl returns a -1 timeout here, it just means that libcurl
 +currently has no stored timeout value. You must not wait too long (more than a
 +few seconds perhaps) before you call curl_multi_perform() again.
 +.SH EXAMPLE
 +.nf
 +struct timeval timeout;
 +long timeo;
 +
 +curl_multi_timeout(multi_handle, &timeo);
 +if(timeo < 0)
 +  /* no set timeout, use a default */
 +  timeo = 980;
 +
 +timeout.tv_sec = timeo / 1000;
 +timeout.tv_usec = (timeo % 1000) * 1000;
 +
 +/* wait for activities no longer than the set timeout */
 +select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
 +.fi
 +.SH "RETURN VALUE"
 +The standard CURLMcode for multi interface error codes.
 +.SH "TYPICAL USAGE"
 +Call \fIcurl_multi_timeout(3)\fP, then wait for action on the sockets. You
 +figure out which sockets to wait for by calling \fIcurl_multi_fdset(3)\fP or
 +by a previous call to \fIcurl_multi_socket(3)\fP.
 +.SH AVAILABILITY
 +This function was added in libcurl 7.15.4.
 +.SH "SEE ALSO"
 +.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
 +.BR curl_multi_socket "(3), " curl_multi_setopt "(3) "
diff --cc docs/libcurl/gnurl_share_init.3
index 7bf00c183,000000000..4b479a614
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_share_init.3
+++ b/docs/libcurl/gnurl_share_init.3
@@@ -1,43 -1,0 +1,43 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_share_init 3 "8 Aug 2003" "libcurl 7.10.7" "libgnurl Manual"
 +.SH NAME
 +curl_share_init - Create a shared object
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLSH *curl_share_init( );"
 +.ad
 +.SH DESCRIPTION
 +This function returns a CURLSH handle to be used as input to all the other
 +share-functions, sometimes referred to as a share handle in some places in the
 +documentation. This init call MUST have a corresponding call to
 +\fIcurl_share_cleanup\fP when all operations using the share are complete.
 +
 +This \fIshare handle\fP is what you pass to curl using the
 +\fICURLOPT_SHARE(3)\fP option with \fIcurl_easy_setopt(3)\fP, to make that
 +specific curl handle use the data in this share.
 +.SH RETURN VALUE
 +If this function returns NULL, something went wrong (out of memory, etc.)
 +and therefore the share object was not created.
 +.SH "SEE ALSO"
 +.BR curl_share_cleanup "(3), " curl_share_setopt "(3)"
diff --cc docs/libcurl/gnurl_share_setopt.3
index b58bef623,000000000..052308360
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_share_setopt.3
+++ b/docs/libcurl/gnurl_share_setopt.3
@@@ -1,114 -1,0 +1,114 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_share_setopt 3 "8 Aug 2003" "libcurl 7.10.7" "libgnurl 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);
 +
 +The \fIdata\fP argument tells what kind of data libcurl wants to lock. Make
 +sure that the callback uses a different lock 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.
 +Note that this does not activate an easy handle's cookie handling. You can do
 +that separately by using \fICURLOPT_COOKIEFILE(3)\fP for example.
 +.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 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.
 +.IP CURL_LOCK_DATA_PSL
 +The Public Suffix List stored in the share object is made available to all
 +easy handle bound to the later. Since the Public Suffix List is periodically
 +refreshed, this avoids updates in too many different contexts.
 +
 +\fBCURL_LOCK_DATA_PSL\fP exists since 7.61.0.
 +
 +Note that when you use the multi interface, all easy handles added to the same
 +multi handle will share PSL 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<gnurl/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/gnurl_share_strerror.3
index 8b93a2451,000000000..bbb0a0d00
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_share_strerror.3
+++ b/docs/libcurl/gnurl_share_strerror.3
@@@ -1,37 -1,0 +1,37 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2011, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_share_strerror 3 "26 Apr 2004" "libcurl 7.12" "libgnurl Manual"
 +.SH NAME
 +curl_share_strerror - return string describing error code
 +.SH SYNOPSIS
 +.nf
 +.B #include <gnurl/curl.h>
 +.BI "const char *curl_share_strerror(CURLSHcode " errornum ");"
 +.SH DESCRIPTION
 +The curl_share_strerror() function returns a string describing the CURLSHcode
 +error code passed in the argument \fIerrornum\fP.
 +.SH AVAILABILITY
 +This function was added in libcurl 7.12.0
 +.SH RETURN VALUE
 +A pointer to a zero terminated string.
 +.SH "SEE ALSO"
 +.BR libcurl-errors "(3), " curl_multi_strerror "(3), " curl_easy_strerror 
"(3)"
diff --cc docs/libcurl/gnurl_unescape.3
index 6f3dce495,000000000..60c337816
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_unescape.3
+++ b/docs/libcurl/gnurl_unescape.3
@@@ -1,48 -1,0 +1,48 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_unescape 3 "22 March 2001" "libcurl 7.7" "libgnurl Manual"
 +.SH NAME
 +curl_unescape - URL decodes the given string
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "char *curl_unescape( const char *" url ", int "length " );"
 +.ad
 +.SH DESCRIPTION
 +Obsolete function. Use \fIcurl_easy_unescape(3)\fP instead!
 +
 +This function will convert the given URL encoded input string to a "plain
 +string" and return that as a new allocated string. All input characters that
 +are URL encoded (%XX where XX is a two-digit hexadecimal number) will be
 +converted to their plain text versions.
 +
 +If the 'length' argument is set to 0, curl_unescape() will use strlen() on the
 +input 'url' string to find out the size.
 +
 +You must \fIcurl_free(3)\fP the returned string when you're done with it.
 +.SH AVAILABILITY
 +Since 7.15.4, \fIcurl_easy_unescape(3)\fP should be used. This function will
 +be removed in a future release.
 +.SH RETURN VALUE
 +A pointer to a zero terminated string or NULL if it failed.
 +.SH "SEE ALSO"
 +.br curl_easy_escape "(3)," curl_easy_unescape "(3)," curl_free "(3)," RFC 
2396
diff --cc docs/libcurl/gnurl_version.3
index 2d3f02635,000000000..56ea8051f
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_version.3
+++ b/docs/libcurl/gnurl_version.3
@@@ -1,39 -1,0 +1,39 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_version 3 "5 March 2001" "libcurl 7.0" "libgnurl Manual"
 +.SH NAME
 +curl_version - returns the libcurl version string
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "char *curl_version( );"
 +.ad
 +.SH DESCRIPTION
 +Returns a human readable string with the version number of libcurl and some of
 +its important components (like OpenSSL version).
 +
 +We recommend using \fIcurl_version_info(3)\fP instead!
 +.SH RETURN VALUE
 +A pointer to a zero terminated string. The string resides in a statically
 +allocated buffer and must not be freed by the caller.
 +.SH "SEE ALSO"
 +.BR curl_version_info "(3)"
diff --cc docs/libcurl/gnurl_version_info.3
index 1ba8d8401,000000000..8ad92b435
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_version_info.3
+++ b/docs/libcurl/gnurl_version_info.3
@@@ -1,201 -1,0 +1,206 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 gnurl_version_info 3 "2 Nov 2014" "libcurl 7.40.0" "libgnurl Manual"
 +.SH NAME
 +curl_version_info - returns run-time libcurl version info
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "curl_version_info_data *curl_version_info( CURLversion "age ");"
 +.ad
 +.SH DESCRIPTION
 +Returns a pointer to a filled in static struct with information about various
 +features in the running version of libcurl. \fIage\fP should be set to the
 +version of this functionality by the time you write your program. This way,
 +libcurl will always return a proper struct that your program understands,
 +while programs in the future might get a different
 +struct. \fBCURLVERSION_NOW\fP will be the most recent one for the library you
 +have installed:
 +
 +        data = curl_version_info(CURLVERSION_NOW);
 +
 +Applications should use this information to judge if things are possible to do
 +or not, instead of using compile-time checks, as dynamic/DLL libraries can be
 +changed independent of applications.
 +
 +The curl_version_info_data struct looks like this
 +
 +.nf
 +typedef struct {
 +  CURLversion age;          /* see description below */
 +
-   /* when 'age' is 0 or higher, the members below also exist: */
 +  const char *version;      /* human readable string */
 +  unsigned int version_num; /* numeric representation */
 +  const char *host;         /* human readable string */
 +  int features;             /* bitmask, see below */
 +  char *ssl_version;        /* human readable string */
 +  long ssl_version_num;     /* not used, always zero */
 +  const char *libz_version; /* human readable string */
 +  const char * const *protocols; /* protocols */
 +
-   /* when 'age' is 1 or higher, the members below also exist: */
++  /* when 'age' is CURLVERSION_SECOND or higher, the members below exist */
 +  const char *ares;         /* human readable string */
 +  int ares_num;             /* number */
 +
-   /* when 'age' is 2 or higher, the member below also exists: */
++  /* when 'age' is CURLVERSION_THIRD or higher, the members below exist */
 +  const char *libidn;       /* human readable string */
 +
-   /* when 'age' is 3 or higher (7.16.1 or later), the members below also
-      exist  */
++  /* when 'age' is CURLVERSION_FOURTH or higher (>= 7.16.1), the members
++     below exist */
 +  int iconv_ver_num;       /* '_libiconv_version' if iconv support enabled */
 +
 +  const char *libssh_version; /* human readable string */
 +
-   /* when 'age' is 4 or higher (7.57.0 or later), the members below also
-      exist  */
++  /* when 'age' is CURLVERSION_FIFTH or higher (>= 7.57.0), the members
++     below exist */
 +  unsigned int brotli_ver_num; /* Numeric Brotli version
 +                                  (MAJOR << 24) | (MINOR << 12) | PATCH */
 +  const char *brotli_version; /* human readable string. */
 +
-   /* when 'age is CURLVERSION_SIXTH or alter (7.66.0 or later), these fields
-      also exist */
++  /* when 'age' is CURLVERSION_SIXTH or higher (>= 7.66.0), the members
++     below exist */
 +  unsigned int nghttp2_ver_num; /* Numeric nghttp2 version
 +                                   (MAJOR << 16) | (MINOR << 8) | PATCH */
 +  const char *nghttp2_version; /* human readable string. */
 +
 +  const char *quic_version;    /* human readable quic (+ HTTP/3) library +
 +                                  version or NULL */
 +
++  /* when 'age' is CURLVERSION_SEVENTH or higher (>= 7.70.0), the members
++     below exist */
++  const char *cainfo;          /* the built-in default CURLOPT_CAINFO, might
++                                  be NULL */
++  const char *capath;          /* the built-in default CURLOPT_CAPATH, might
++                                  be NULL */
 +} curl_version_info_data;
 +.fi
 +
 +\fIage\fP describes what the age of this struct is. The number depends on how
 +new the libcurl you're using is. You are however guaranteed to get a struct
 +that you have a matching struct for in the header, as you tell libcurl your
 +"age" with the input argument.
 +
 +\fIversion\fP is just an ascii string for the libcurl version.
 +
 +\fIversion_num\fP is a 24 bit number created like this: <8 bits major number>
 +| <8 bits minor number> | <8 bits patch number>. Version 7.9.8 is therefore
 +returned as 0x070908.
 +
 +\fIhost\fP is an ascii string showing what host information that this libcurl
 +was built for. As discovered by a configure script or set by the build
 +environment.
 +
 +\fIfeatures\fP can have none, one or more bits set, and the currently defined
 +bits are:
 +.RS
 +.IP CURL_VERSION_ALTSVC
 +HTTP Alt-Svc parsing and the associated options (Added in 7.64.1)
 +.IP CURL_VERSION_ASYNCHDNS
 +libcurl was built with support for asynchronous name lookups, which allows
 +more exact timeouts (even on Windows) and less blocking when using the multi
 +interface. (added in 7.10.7)
 +.IP CURL_VERSION_BROTLI
 +supports HTTP Brotli content encoding using libbrotlidec (Added in 7.57.0)
 +.IP CURL_VERSION_CONV
 +libcurl was built with support for character conversions, as provided by the
 +CURLOPT_CONV_* callbacks. (Added in 7.15.4)
 +.IP CURL_VERSION_CURLDEBUG
 +libcurl was built with memory tracking debug capabilities. This is mainly of
 +interest for libcurl hackers. (added in 7.19.6)
 +.IP CURL_VERSION_DEBUG
 +libcurl was built with debug capabilities (added in 7.10.6)
 +.IP CURL_VERSION_GSSAPI
 +libcurl was built with support for GSS-API. This makes libcurl use provided
 +functions for Kerberos and SPNEGO authentication. It also allows libcurl
 +to use the current user credentials without the app having to pass them on.
 +(Added in 7.38.0)
 +.IP CURL_VERSION_GSSNEGOTIATE
 +supports HTTP GSS-Negotiate (added in 7.10.6)
 +.IP CURL_VERSION_HTTPS_PROXY
 +libcurl was built with support for HTTPS-proxy.
 +(Added in 7.52.0)
 +.IP CURL_VERSION_HTTP2
 +libcurl was built with support for HTTP2.
 +(Added in 7.33.0)
 +.IP CURL_VERSION_HTTP3
 +HTTP/3 and QUIC support are built-in (Added in 7.66.0)
 +.IP CURL_VERSION_IDN
 +libcurl was built with support for IDNA, domain names with international
 +letters. (Added in 7.12.0)
 +.IP CURL_VERSION_IPV6
 +supports IPv6
 +.IP CURL_VERSION_KERBEROS4
 +supports Kerberos V4 (when using FTP)
 +.IP CURL_VERSION_KERBEROS5
 +supports Kerberos V5 authentication for FTP, IMAP, POP3, SMTP and SOCKSv5 
proxy
 +(Added in 7.40.0)
 +.IP CURL_VERSION_LARGEFILE
 +libcurl was built with support for large files. (Added in 7.11.1)
 +.IP CURL_VERSION_LIBZ
 +supports HTTP deflate using libz (Added in 7.10)
 +.IP CURL_VERSION_MULTI_SSL
 +libcurl was built with multiple SSL backends. For details, see
 +\fIcurl_global_sslset(3)\fP.
 +(Added in 7.56.0)
 +.IP CURL_VERSION_NTLM
 +supports HTTP NTLM (added in 7.10.6)
 +.IP CURL_VERSION_NTLM_WB
 +libcurl was built with support for NTLM delegation to a winbind helper.
 +(Added in 7.22.0)
 +.IP CURL_VERSION_PSL
 +libcurl was built with support for Mozilla's Public Suffix List. This makes
 +libcurl ignore cookies with a domain that's on the list.
 +(Added in 7.47.0)
 +.IP CURL_VERSION_SPNEGO
 +libcurl was built with support for SPNEGO authentication (Simple and Protected
 +GSS-API Negotiation Mechanism, defined in RFC 2478.) (added in 7.10.8)
 +.IP CURL_VERSION_SSL
 +supports SSL (HTTPS/FTPS) (Added in 7.10)
 +.IP CURL_VERSION_SSPI
 +libcurl was built with support for SSPI. This is only available on Windows and
 +makes libcurl use Windows-provided functions for Kerberos, NTLM, SPNEGO and
 +Digest authentication. It also allows libcurl to use the current user
 +credentials without the app having to pass them on. (Added in 7.13.2)
 +.IP CURL_VERSION_TLSAUTH_SRP
 +libcurl was built with support for TLS-SRP. (Added in 7.21.4)
 +.IP CURL_VERSION_UNIX_SOCKETS
 +libcurl was built with support for Unix domain sockets.
 +(Added in 7.40.0)
 +.RE
 +\fIssl_version\fP is an ASCII string for the TLS library name + version
 +used. If libcurl has no SSL support, this is NULL. For example "Schannel",
 +\&"SecureTransport" or "OpenSSL/1.1.0g".
 +
 +\fIssl_version_num\fP is always 0.
 +
 +\fIlibz_version\fP is an ASCII string (there is no numerical version). If
 +libcurl has no libz support, this is NULL.
 +
 +\fIprotocols\fP is a pointer to an array of char * pointers, containing the
 +names protocols that libcurl supports (using lowercase letters). The protocol
 +names are the same as would be used in URLs. The array is terminated by a NULL
 +entry.
 +.SH RETURN VALUE
 +A pointer to a curl_version_info_data struct.
 +.SH "SEE ALSO"
 +\fIcurl_version(3)\fP
diff --cc docs/libcurl/libgnurl.m4
index 7e79629d5,000000000..c4f484813
mode 100644,000000..100644
--- a/docs/libcurl/libgnurl.m4
+++ b/docs/libcurl/libgnurl.m4
@@@ -1,272 -1,0 +1,272 @@@
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
- # Copyright (C) 2006, David Shaw <address@hidden>
++# Copyright (C) 2006 - 2020, David Shaw <address@hidden>
 +#
 +# 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.
 +#
 +###########################################################################
 +# LIBCURL_CHECK_CONFIG ([DEFAULT-ACTION], [MINIMUM-VERSION],
 +#                       [ACTION-IF-YES], [ACTION-IF-NO])
 +# ----------------------------------------------------------
 +#      David Shaw <address@hidden>   May-09-2006
 +#
 +# Checks for libcurl.  DEFAULT-ACTION is the string yes or no to
 +# specify whether to default to --with-libcurl or --without-libcurl.
 +# If not supplied, DEFAULT-ACTION is yes.  MINIMUM-VERSION is the
 +# minimum version of libcurl to accept.  Pass the version as a regular
 +# version number like 7.10.1. If not supplied, any version is
 +# accepted.  ACTION-IF-YES is a list of shell commands to run if
 +# libcurl was successfully found and passed the various tests.
 +# ACTION-IF-NO is a list of shell commands that are run otherwise.
 +# Note that using --without-libcurl does run ACTION-IF-NO.
 +#
 +# This macro #defines HAVE_LIBCURL if a working libcurl setup is
 +# found, and sets @LIBCURL@ and @LIBCURL_CPPFLAGS@ to the necessary
 +# values.  Other useful defines are LIBCURL_FEATURE_xxx where xxx are
 +# the various features supported by libcurl, and LIBCURL_PROTOCOL_yyy
 +# where yyy are the various protocols supported by libcurl.  Both xxx
 +# and yyy are capitalized.  See the list of AH_TEMPLATEs at the top of
 +# the macro for the complete list of possible defines.  Shell
 +# variables $libcurl_feature_xxx and $libcurl_protocol_yyy are also
 +# defined to 'yes' for those features and protocols that were found.
 +# Note that xxx and yyy keep the same capitalization as in the
 +# curl-config list (e.g. it's "HTTP" and not "http").
 +#
 +# Users may override the detected values by doing something like:
 +# LIBCURL="-lcurl" LIBCURL_CPPFLAGS="-I/usr/myinclude" ./configure
 +#
 +# For the sake of sanity, this macro assumes that any libcurl that is
 +# found is after version 7.7.2, the first version that included the
 +# curl-config script.  Note that it is very important for people
 +# packaging binary versions of libcurl to include this script!
 +# Without curl-config, we can only guess what protocols are available,
 +# or use curl_version_info to figure it out at runtime.
 +
 +AC_DEFUN([LIBCURL_CHECK_CONFIG],
 +[
 +  AH_TEMPLATE([LIBCURL_FEATURE_SSL],[Defined if libcurl supports SSL])
 +  AH_TEMPLATE([LIBCURL_FEATURE_KRB4],[Defined if libcurl supports KRB4])
 +  AH_TEMPLATE([LIBCURL_FEATURE_IPV6],[Defined if libcurl supports IPv6])
 +  AH_TEMPLATE([LIBCURL_FEATURE_LIBZ],[Defined if libcurl supports libz])
 +  AH_TEMPLATE([LIBCURL_FEATURE_ASYNCHDNS],[Defined if libcurl supports 
AsynchDNS])
 +  AH_TEMPLATE([LIBCURL_FEATURE_IDN],[Defined if libcurl supports IDN])
 +  AH_TEMPLATE([LIBCURL_FEATURE_SSPI],[Defined if libcurl supports SSPI])
 +  AH_TEMPLATE([LIBCURL_FEATURE_NTLM],[Defined if libcurl supports NTLM])
 +
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_HTTP],[Defined if libcurl supports HTTP])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_HTTPS],[Defined if libcurl supports HTTPS])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_FTP],[Defined if libcurl supports FTP])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_FTPS],[Defined if libcurl supports FTPS])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_FILE],[Defined if libcurl supports FILE])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_TELNET],[Defined if libcurl supports TELNET])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_LDAP],[Defined if libcurl supports LDAP])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_DICT],[Defined if libcurl supports DICT])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_TFTP],[Defined if libcurl supports TFTP])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_RTSP],[Defined if libcurl supports RTSP])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_POP3],[Defined if libcurl supports POP3])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_IMAP],[Defined if libcurl supports IMAP])
 +  AH_TEMPLATE([LIBCURL_PROTOCOL_SMTP],[Defined if libcurl supports SMTP])
 +
 +  AC_ARG_WITH(libcurl,
 +     AS_HELP_STRING([--with-libcurl=PREFIX],[look for the curl library in 
PREFIX/lib and headers in PREFIX/include]),
 +     [_libcurl_with=$withval],[_libcurl_with=ifelse([$1],,[yes],[$1])])
 +
 +  if test "$_libcurl_with" != "no" ; then
 +
 +     AC_PROG_AWK
 +
 +     _libcurl_version_parse="eval $AWK '{split(\$NF,A,\".\"); 
X=256*256*A[[1]]+256*A[[2]]+A[[3]]; print X;}'"
 +
 +     _libcurl_try_link=yes
 +
 +     if test -d "$_libcurl_with" ; then
 +        LIBCURL_CPPFLAGS="-I$withval/include"
 +        _libcurl_ldflags="-L$withval/lib"
 +        AC_PATH_PROG([_libcurl_config],[curl-config],[],
 +                     ["$withval/bin"])
 +     else
 +        AC_PATH_PROG([_libcurl_config],[curl-config],[],[$PATH])
 +     fi
 +
 +     if test x$_libcurl_config != "x" ; then
 +        AC_CACHE_CHECK([for the version of libcurl],
 +           [libcurl_cv_lib_curl_version],
 +           [libcurl_cv_lib_curl_version=`$_libcurl_config --version | $AWK 
'{print $[]2}'`])
 +
 +        _libcurl_version=`echo $libcurl_cv_lib_curl_version | 
$_libcurl_version_parse`
 +        _libcurl_wanted=`echo ifelse([$2],,[0],[$2]) | 
$_libcurl_version_parse`
 +
 +        if test $_libcurl_wanted -gt 0 ; then
 +           AC_CACHE_CHECK([for libcurl >= version $2],
 +              [libcurl_cv_lib_version_ok],
 +              [
 +              if test $_libcurl_version -ge $_libcurl_wanted ; then
 +                 libcurl_cv_lib_version_ok=yes
 +              else
 +                 libcurl_cv_lib_version_ok=no
 +              fi
 +              ])
 +        fi
 +
 +        if test $_libcurl_wanted -eq 0 || test x$libcurl_cv_lib_version_ok = 
xyes ; then
 +           if test x"$LIBCURL_CPPFLAGS" = "x" ; then
 +              LIBCURL_CPPFLAGS=`$_libcurl_config --cflags`
 +           fi
 +           if test x"$LIBCURL" = "x" ; then
 +              LIBCURL=`$_libcurl_config --libs`
 +
 +              # This is so silly, but Apple actually has a bug in their
 +              # curl-config script.  Fixed in Tiger, but there are still
 +              # lots of Panther installs around.
 +              case "${host}" in
 +                 powerpc-apple-darwin7*)
 +                    LIBCURL=`echo $LIBCURL | sed -e 's|-arch i386||g'`
 +                 ;;
 +              esac
 +           fi
 +
 +           # All curl-config scripts support --feature
 +           _libcurl_features=`$_libcurl_config --feature`
 +
 +           # Is it modern enough to have --protocols? (7.12.4)
 +           if test $_libcurl_version -ge 461828 ; then
 +              _libcurl_protocols=`$_libcurl_config --protocols`
 +           fi
 +        else
 +           _libcurl_try_link=no
 +        fi
 +
 +        unset _libcurl_wanted
 +     fi
 +
 +     if test $_libcurl_try_link = yes ; then
 +
 +        # we didn't find curl-config, so let's see if the user-supplied
 +        # link line (or failing that, "-lcurl") is enough.
 +        LIBCURL=${LIBCURL-"$_libcurl_ldflags -lcurl"}
 +
 +        AC_CACHE_CHECK([whether libcurl is usable],
 +           [libcurl_cv_lib_curl_usable],
 +           [
 +           _libcurl_save_cppflags=$CPPFLAGS
 +           CPPFLAGS="$LIBCURL_CPPFLAGS $CPPFLAGS"
 +           _libcurl_save_libs=$LIBS
 +           LIBS="$LIBCURL $LIBS"
 +
 +           AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <gnurl/curl.h>]],[[
 +/* Try and use a few common options to force a failure if we are
 +   missing symbols or can't link. */
 +int x;
 +curl_easy_setopt(NULL,CURLOPT_URL,NULL);
 +x=CURL_ERROR_SIZE;
 +x=CURLOPT_WRITEFUNCTION;
 +x=CURLOPT_WRITEDATA;
 +x=CURLOPT_ERRORBUFFER;
 +x=CURLOPT_STDERR;
 +x=CURLOPT_VERBOSE;
 +if (x) {;}
 +]])],libcurl_cv_lib_curl_usable=yes,libcurl_cv_lib_curl_usable=no)
 +
 +           CPPFLAGS=$_libcurl_save_cppflags
 +           LIBS=$_libcurl_save_libs
 +           unset _libcurl_save_cppflags
 +           unset _libcurl_save_libs
 +           ])
 +
 +        if test $libcurl_cv_lib_curl_usable = yes ; then
 +
 +           # Does curl_free() exist in this version of libcurl?
 +           # If not, fake it with free()
 +
 +           _libcurl_save_cppflags=$CPPFLAGS
 +           CPPFLAGS="$CPPFLAGS $LIBCURL_CPPFLAGS"
 +           _libcurl_save_libs=$LIBS
 +           LIBS="$LIBS $LIBCURL"
 +
 +           AC_CHECK_FUNC(curl_free,,
 +              AC_DEFINE(curl_free,free,
 +                [Define curl_free() as free() if our version of curl lacks 
curl_free.]))
 +
 +           CPPFLAGS=$_libcurl_save_cppflags
 +           LIBS=$_libcurl_save_libs
 +           unset _libcurl_save_cppflags
 +           unset _libcurl_save_libs
 +
 +           AC_DEFINE(HAVE_LIBCURL,1,
 +             [Define to 1 if you have a functional curl library.])
 +           AC_SUBST(LIBCURL_CPPFLAGS)
 +           AC_SUBST(LIBCURL)
 +
 +           for _libcurl_feature in $_libcurl_features ; do
 +              
AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_feature_$_libcurl_feature),[1])
 +              eval AS_TR_SH(libcurl_feature_$_libcurl_feature)=yes
 +           done
 +
 +           if test "x$_libcurl_protocols" = "x" ; then
 +
 +              # We don't have --protocols, so just assume that all
 +              # protocols are available
 +              _libcurl_protocols="HTTP FTP FILE TELNET LDAP DICT TFTP"
 +
 +              if test x$libcurl_feature_SSL = xyes ; then
 +                 _libcurl_protocols="$_libcurl_protocols HTTPS"
 +
 +                 # FTPS wasn't standards-compliant until version
 +                 # 7.11.0 (0x070b00 == 461568)
 +                 if test $_libcurl_version -ge 461568; then
 +                    _libcurl_protocols="$_libcurl_protocols FTPS"
 +                 fi
 +              fi
 +
 +              # RTSP, IMAP, POP3 and SMTP were added in
 +              # 7.20.0 (0x071400 == 463872)
 +              if test $_libcurl_version -ge 463872; then
 +                 _libcurl_protocols="$_libcurl_protocols RTSP IMAP POP3 SMTP"
 +              fi
 +           fi
 +
 +           for _libcurl_protocol in $_libcurl_protocols ; do
 +              
AC_DEFINE_UNQUOTED(AS_TR_CPP(libcurl_protocol_$_libcurl_protocol),[1])
 +              eval AS_TR_SH(libcurl_protocol_$_libcurl_protocol)=yes
 +           done
 +        else
 +           unset LIBCURL
 +           unset LIBCURL_CPPFLAGS
 +        fi
 +     fi
 +
 +     unset _libcurl_try_link
 +     unset _libcurl_version_parse
 +     unset _libcurl_config
 +     unset _libcurl_feature
 +     unset _libcurl_features
 +     unset _libcurl_protocol
 +     unset _libcurl_protocols
 +     unset _libcurl_version
 +     unset _libcurl_ldflags
 +  fi
 +
 +  if test x$_libcurl_with = xno || test x$libcurl_cv_lib_curl_usable != xyes 
; then
 +     # This is the IF-NO path
 +     ifelse([$4],,:,[$4])
 +  else
 +     # This is the IF-YES path
 +     ifelse([$3],,:,[$3])
 +  fi
 +
 +  unset _libcurl_with
 +])dnl
diff --cc docs/libcurl/opts/GNURLINFO_CERTINFO.3
index e60aeed96,000000000..42482c473
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_CERTINFO.3
+++ b/docs/libcurl/opts/GNURLINFO_CERTINFO.3
@@@ -1,81 -1,0 +1,81 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_CERTINFO 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_CERTINFO \- get the TLS certificate chain
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CERTINFO,
 +                           struct curl_certinfo *chainp);
 +.SH DESCRIPTION
 +Pass a pointer to a 'struct curl_certinfo *' and you'll get it set to point to
 +struct that holds a number of linked lists with info about the certificate
 +chain, assuming you had \fICURLOPT_CERTINFO(3)\fP enabled when the request was
 +made. The struct reports how many certs it found and then you can extract info
 +for each of those certs by following the linked lists. The info chain is
 +provided in a series of data in the format "name:content" where the content is
 +for the specific named data. See also the certinfo.c example.
 +.SH PROTOCOLS
 +All TLS-based
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://www.example.com/";);
 +
 +  /* connect to any HTTPS site, trusted or not */
 +  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
 +  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
 +
 +  curl_easy_setopt(curl, CURLOPT_CERTINFO, 1L);
 +
 +  res = curl_easy_perform(curl);
 +
 +  if (!res) {
 +    struct curl_certinfo *ci;
 +    res = curl_easy_getinfo(curl, CURLINFO_CERTINFO, &ci);
 +
 +    if (!res) {
 +      printf("%d certs!\\n", ci->num_of_certs);
 +
 +      for(i = 0; i < ci->num_of_certs; i++) {
 +        struct curl_slist *slist;
 +
 +        for(slist = ci->certinfo[i]; slist; slist = slist->next)
 +          printf("%s\\n", slist->data);
 +      }
 +    }
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option is only working in libcurl built with OpenSSL, NSS, Schannel or
 +GSKit support. Schannel support added in 7.50.0
 +
 +Added in 7.19.1
 +.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_CONDITION_UNMET.3
index f39ae8f27,000000000..dcd6fc0e5
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,70 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_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
++CURLINFO_CONDITION_UNMET \- get info on unmet time conditional or 304 HTTP 
response.
 +.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 this argument points to will
- get a zero stored if the condition instead was met.
++get a zero stored if the condition instead was met. This can also return 1 if
++the server responded with a 304 HTTP status code, for example after sending a
++custom "If-Match-*" header.
 +.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_CONTENT_LENGTH_DOWNLOAD_T.3
index 74d34b706,000000000..74ca85049
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3
+++ b/docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_CONTENT_LENGTH_DOWNLOAD_T 3 "25 May 2017" "libcurl 7.55.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_CONTENT_LENGTH_DOWNLOAD_T \- get content-length of download
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T,
 +                           curl_off_t *content_length);
 +.SH DESCRIPTION
 +Pass a pointer to a \fIcurl_off_t\fP to receive the content-length of the
 +download. This is the value read from the Content-Length: field. Stores -1 if
 +the size isn't known.
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* check the size */
 +    curl_off_t cl;
 +    res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD_T, &cl);
 +    if(!res) {
 +      printf("Download size: %" CURL_FORMAT_CURL_OFF_T "\\n", cl);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.55.0
 +.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), "
 +.BR CURLINFO_CONTENT_LENGTH_UPLOAD_T "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_UPLOAD_T.3
index d11c1da92,000000000..f6c033fb8
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_UPLOAD_T.3
+++ b/docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_UPLOAD_T.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_CONTENT_LENGTH_UPLOAD_T 3 "25 May 2017" "libcurl 7.55.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_CONTENT_LENGTH_UPLOAD_T \- get the specified size of the upload
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD_T,
 +                           curl_off_t *content_length);
 +.SH DESCRIPTION
 +Pass a pointer to a \fIcurl_off_t\fP to receive the specified size of the
 +upload. Stores -1 if the size isn't known.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* Perform the upload */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* check the size */
 +    curl_off_t cl;
 +    res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD_T, &cl);
 +    if(!res) {
 +      printf("Upload size: %" CURL_FORMAT_CURL_OFF_T "\\n", cl);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.55.0
 +.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), "
 +.BR CURLINFO_CONTENT_LENGTH_DOWNLOAD_T "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_COOKIELIST.3
index 2335f71db,000000000..e82ddb8a3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_COOKIELIST.3
+++ b/docs/libcurl/opts/GNURLINFO_COOKIELIST.3
@@@ -1,77 -1,0 +1,77 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_COOKIELIST 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_COOKIELIST \- get all known cookies
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_COOKIELIST,
 +                           struct curl_slist **cookies);
 +.SH DESCRIPTION
 +Pass a pointer to a 'struct curl_slist *' to receive a linked-list of all
 +cookies curl knows (expired ones, too). Don't forget to call
 +\fIcurl_slist_free_all(3)\fP on the list after it has been used.  If there are
 +no cookies (cookies for the handle have not been enabled or simply none have
 +been received) 'struct curl_slist *' will be set to point to NULL.
 +
 +Since 7.43.0 cookies that were imported in the Set-Cookie format without a
 +domain name are not exported by this option.
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* enable the cookie engine */
 +  curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
 +
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* extract all known cookies */
 +    struct curl_slist *cookies = NULL;
 +    res = curl_easy_getinfo(curl, CURLINFO_COOKIELIST, &cookies);
 +    if(!res && cookies) {
 +      /* a linked list of cookies in cookie file format */
 +      struct curl_slist *each = cookies;
 +      while(each) {
 +        printf("%s\\n", each->data);
 +        each = each->next;
 +      }
 +      /* we must free these cookies when we're done */
 +      curl_slist_free_all(cookies);
 +    }
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.14.1
 +.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), "
 +.BR CURLOPT_COOKIELIST "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_OS_ERRNO.3
index 543df569f,000000000..2e987b1ae
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_OS_ERRNO.3
+++ b/docs/libcurl/opts/GNURLINFO_OS_ERRNO.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_OS_ERRNO 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_OS_ERRNO \- get errno number from last connect failure
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_OS_ERRNO, long *errnop);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the errno variable from a connect failure.
 +Note that the value is only set on failure, it is not reset upon a successful
 +operation. The number is OS and system specific.
 +.SH PROTOCOLS
 +All
 +.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);
 +  if(res != CURLE_OK) {
 +    long error;
 +    res = curl_easy_getinfo(curl, CURLINFO_OS_ERRNO, &error);
 +    if(res && error) {
 +      printf("Errno: %ld\\n", error);
 +    }
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.12.2
 +.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_PROTOCOL.3
index 794435aaa,000000000..ff6546379
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_PROTOCOL.3
+++ b/docs/libcurl/opts/GNURLINFO_PROTOCOL.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * 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 GNURLINFO_PROTOCOL 3 "23 November 2016" "libcurl 7.52.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_PROTOCOL \- get the protocol used in the connection
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROTOCOL, long *p);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the version used in the last http
 +connection.  The returned value will be exactly one of the CURLPROTO_* values:
 +
 +.nf
 +CURLPROTO_DICT, CURLPROTO_FILE, CURLPROTO_FTP, CURLPROTO_FTPS,
 +CURLPROTO_GOPHER, CURLPROTO_HTTP, CURLPROTO_HTTPS, CURLPROTO_IMAP,
 +CURLPROTO_IMAPS, CURLPROTO_LDAP, CURLPROTO_LDAPS, CURLPROTO_POP3,
 +CURLPROTO_POP3S, CURLPROTO_RTMP, CURLPROTO_RTMPE, CURLPROTO_RTMPS,
 +CURLPROTO_RTMPT, CURLPROTO_RTMPTE, CURLPROTO_RTMPTS, CURLPROTO_RTSP,
 +CURLPROTO_SCP, CURLPROTO_SFTP, CURLPROTO_SMB, CURLPROTO_SMBS, CURLPROTO_SMTP,
- CURLPROTO_SMTPS, CURLPROTO_TELNET, CURLPROTO_TFTP
++CURLPROTO_SMTPS, CURLPROTO_TELNET, CURLPROTO_TFTP, CURLPROTO_MQTT
 +.SH PROTOCOLS
 +All
 +.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);
 +  if(res == CURLE_OK) {
 +    long protocol;
 +    curl_easy_getinfo(curl, CURLINFO_PROTOCOL, &protocol);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLINFO_RESPONSE_CODE "(3), "
 +.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_REDIRECT_TIME.3
index f1224a873,000000000..26f3f5117
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_REDIRECT_TIME.3
+++ b/docs/libcurl/opts/GNURLINFO_REDIRECT_TIME.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_REDIRECT_TIME 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_REDIRECT_TIME \- get the time for all redirection steps
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME, double 
*timep);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the total time, in seconds, it took for
 +all redirection steps include name lookup, connect, pretransfer and transfer
 +before final transaction was started. CURLINFO_REDIRECT_TIME contains the
 +complete execution time for multiple redirections.
 +
 +See also the TIMES overview in the \fIcurl_easy_getinfo(3)\fP man page.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  double redirect;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_REDIRECT_TIME, &redirect);
 +    if(CURLE_OK == res) {
 +      printf("Time: %.1f", redirect);
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.9.7
 +.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), " 
CURLINFO_REDIRECT_TIME_T "(3)"
diff --cc docs/libcurl/opts/GNURLINFO_RESPONSE_CODE.3
index 6a413235a,000000000..9632fd837
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_RESPONSE_CODE.3
+++ b/docs/libcurl/opts/GNURLINFO_RESPONSE_CODE.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_RESPONSE_CODE 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_RESPONSE_CODE \- get the last response code
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RESPONSE_CODE, long *codep);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the last received HTTP, FTP or SMTP
 +response code. This option was previously known as CURLINFO_HTTP_CODE in
 +libcurl 7.10.7 and earlier. The stored value will be zero if no server
 +response code has been received. Note that a proxy's CONNECT response should
 +be read with \fICURLINFO_HTTP_CONNECTCODE(3)\fP and not this.
 +
 +Support for SMTP responses added in 7.25.0.
 +.SH PROTOCOLS
 +HTTP, FTP and SMTP
 +.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);
 +  if(res == CURLE_OK) {
 +    long response_code;
 +    curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &response_code);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.10.8. CURLINFO_HTTP_CODE was added in 7.4.1.
 +.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), "
 +.BR CURLINFO_HTTP_CONNECTCODE "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_RETRY_AFTER.3
index 52d926cd3,000000000..785c6b4df
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_RETRY_AFTER.3
+++ b/docs/libcurl/opts/GNURLINFO_RETRY_AFTER.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_RETRY_AFTER 3 "6 Aug 2019" "libcurl 7.66.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_RETRY_AFTER \- returns the Retry-After retry delay
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RETRY_AFTER, curl_off_t 
*retry);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_off_t variable to receive the number of seconds the
 +HTTP server suggesets the client should wait until the next request is
 +issued. The information from the "Retry-After:" header.
 +
 +While the HTTP header might contain a fixed date string, the
 +\fICURLINFO_RETRY_AFTER(3)\fP will always return number of seconds to wait -
 +or zero if there was no header or the header couldn't be parsed.
 +.SH DEFAULT
 +Returns zero delay if there was no header.
 +.SH PROTOCOLS
 +HTTP(S)
 +.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);
 +  if(res == CURLE_OK) {
 +    curl_off_t wait = 0;
 +    curl_easy_getinfo(curl, CURLINFO_RETRY_AFTER, &wait);
 +    if(wait)
 +      printf("Wait for %" CURL_FORMAT_CURL_OFF_T " seconds\\n", wait);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in curl 7.66.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_STDERR "(3), " CURLOPT_HEADERFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_SCHEME.3
index 7307370bf,000000000..69f20a9f4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SCHEME.3
+++ b/docs/libcurl/opts/GNURLINFO_SCHEME.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_SCHEME 3 "23 November 2016" "libcurl 7.52.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_SCHEME \- get the URL scheme (sometimes called protocol) used in the 
connection
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SCHEME, char **scheme);
 +.SH DESCRIPTION
 +Pass a pointer to a char pointer to receive the pointer to a zero-terminated
 +string holding the URL scheme used for the most recent connection done with
 +this CURL \fBhandle\fP.
 +
 +The \fBscheme\fP pointer will be NULL or pointing to private memory you MUST
 +NOT free - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
 +corresponding CURL handle.
 +.SH PROTOCOLS
 +All
 +.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);
 +  if(res == CURLE_OK) {
 +    char *scheme = NULL;
 +    curl_easy_getinfo(curl, CURLINFO_SCHEME, &scheme);
 +    if(scheme)
 +      printf("scheme: %s\\n", scheme); /* scheme: HTTP */
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLINFO_RESPONSE_CODE "(3), "
 +.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_SIZE_DOWNLOAD_T.3
index b77009c9f,000000000..bee15f477
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SIZE_DOWNLOAD_T.3
+++ b/docs/libcurl/opts/GNURLINFO_SIZE_DOWNLOAD_T.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_SIZE_DOWNLOAD_T 3 "25 May 2017" "libcurl 7.55.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_SIZE_DOWNLOAD_T \- get the number of downloaded bytes
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD_T, curl_off_t 
*dlp);
 +.SH DESCRIPTION
 +Pass a pointer to a \fIcurl_off_t\fP to receive the total amount of bytes that
 +were downloaded.  The amount is only for the latest transfer and will be reset
 +again for each new transfer. This counts actual payload data, what's also
 +commonly called body. All meta and header data are excluded and will not be
 +counted in this number.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* check the size */
 +    curl_off_t dl;
 +    res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD_T, &dl);
 +    if(!res) {
 +      printf("Downloaded %" CURL_FORMAT_CURL_OFF_T " bytes\\n", dl);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.55.0
 +.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), "
 +.BR CURLINFO_SIZE_DOWNLOAD "(3), "
 +.BR CURLINFO_SIZE_UPLOAD_T "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_SIZE_UPLOAD_T.3
index 5a75103fd,000000000..d042d7d7e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SIZE_UPLOAD_T.3
+++ b/docs/libcurl/opts/GNURLINFO_SIZE_UPLOAD_T.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_SIZE_UPLOAD_T 3 "25 May 2017" "libcurl 7.55.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_SIZE_UPLOAD_T \- get the number of uploaded bytes
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD_T, curl_off_t 
*uploadp);
 +.SH DESCRIPTION
 +Pass a pointer to a \fIcurl_off_t\fP to receive the total amount of bytes that
 +were uploaded.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    curl_off_t ul;
 +    res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD_T, &ul);
 +    if(!res) {
 +      printf("Uploaded %" CURL_FORMAT_CURL_OFF_T " bytes\\n", ul);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.55.0
 +.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), "
 +.BR CURLINFO_SIZE_DOWNLOAD_T "(3), " CURLINFO_SIZE_UPLOAD "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_SPEED_DOWNLOAD_T.3
index 488d1923e,000000000..2c574b44e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SPEED_DOWNLOAD_T.3
+++ b/docs/libcurl/opts/GNURLINFO_SPEED_DOWNLOAD_T.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_SPEED_DOWNLOAD_T 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_SPEED_DOWNLOAD_T \- get download speed
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD_T, 
curl_off_t *speed);
 +.SH DESCRIPTION
 +Pass a pointer to a \fIcurl_off_t\fP to receive the average download speed
 +that curl measured for the complete download. Measured in bytes/second.
 +.SH PROTOCOLS
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    curl_off_t speed;
 +    res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD_T, &speed);
 +    if(!res) {
 +      printf("Download speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\\n", 
speed);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.55.0
 +.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), "
 +.BR CURLINFO_SPEED_UPLOAD "(3), "
 +.BR CURLINFO_SIZE_UPLOAD_T "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_SPEED_UPLOAD_T.3
index 0a4a1829e,000000000..7959222d3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SPEED_UPLOAD_T.3
+++ b/docs/libcurl/opts/GNURLINFO_SPEED_UPLOAD_T.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLINFO_SPEED_UPLOAD_T 3 "25 May 2017" "libcurl 7.55.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_SPEED_UPLOAD_T \- get upload speed
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD_T, curl_off_t 
*speed);
 +.SH DESCRIPTION
 +Pass a pointer to a \fIcurl_off_t\fP to receive the average upload speed that
 +curl measured for the complete upload. Measured in bytes/second.
 +.SH PROTOCOLS
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    curl_off_t speed;
 +    res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD_T, &speed);
 +    if(!res) {
 +      printf("Upload speed %" CURL_FORMAT_CURL_OFF_T " bytes/sec\\n", speed);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.55.0
 +.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), "
 +.BR CURLINFO_SPEED_DOWNLOAD_T "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_MAXCONNECTS.3
index 6d16bb60b,000000000..942918aca
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_MAXCONNECTS.3
+++ b/docs/libcurl/opts/GNURLMOPT_MAXCONNECTS.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLMOPT_MAXCONNECTS 3 "17 Jun 2014" "libcurl 7.37.0" "curl_multi_setopt 
options"
 +.SH NAME
 +CURLMOPT_MAXCONNECTS \- set size of connection cache
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAXCONNECTS, long max);
 +.SH DESCRIPTION
 +Pass a long indicating the \fBmax\fP. The set number will be used as the
 +maximum amount of simultaneously open connections that libcurl may keep in its
 +connection cache after completed use. By default libcurl will enlarge the size
 +for each added easy handle to make it fit 4 times the number of added easy
 +handles.
 +
 +By setting this option, you can prevent the cache size from growing beyond the
 +limit set by you.
 +
 +When the cache is full, curl closes the oldest one in the cache to prevent the
 +number of open connections from increasing.
 +
 +This option is for the multi handle's use only, when using the easy interface
 +you should instead use the \fICURLOPT_MAXCONNECTS(3)\fP option.
 +
 +See \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP for limiting the number of active
 +connections.
 +
 +.SH DEFAULT
 +See DESCRIPTION
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURLM *m = curl_multi_init();
 +/* only keep 10 connections in the cache */
 +curl_multi_setopt(m, CURLMOPT_MAXCONNECTS, 10L);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.3
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
 +.BR CURLOPT_MAXCONNECTS "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_PUSHFUNCTION.3
index 9177a8ba2,000000000..ee4872336
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_PUSHFUNCTION.3
+++ b/docs/libcurl/opts/GNURLMOPT_PUSHFUNCTION.3
@@@ -1,133 -1,0 +1,133 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLMOPT_PUSHFUNCTION 3 "1 Jun 2015" "libcurl 7.44.0" "curl_multi_setopt 
options"
 +.SH NAME
 +CURLMOPT_PUSHFUNCTION \- callback that approves or denies server pushes
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +char *curl_pushheader_bynum(struct curl_pushheaders *h, size_t num);
 +char *curl_pushheader_byname(struct curl_pushheaders *h, const char *name);
 +
 +int curl_push_callback(CURL *parent,
 +                       CURL *easy,
 +                       size_t num_headers,
 +                       struct curl_pushheaders *headers,
 +                       void *userp);
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHFUNCTION,
 +                            curl_push_callback func);
 +.fi
 +.SH DESCRIPTION
 +This callback gets called when a new HTTP/2 stream is being pushed by the
 +server (using the PUSH_PROMISE frame). If no push callback is set, all offered
 +pushes will be denied automatically.
 +.SH CALLBACK DESCRIPTION
 +The callback gets its arguments like this:
 +
 +\fIparent\fP is the handle of the stream on which this push arrives. The new
 +handle has been duphandle()d from the parent, meaning that it has gotten all
 +its options inherited. It is then up to the application to alter any options
 +if desired.
 +
 +\fIeasy\fP is a newly created handle that represents this upcoming transfer.
 +
 +\fInum_headers\fP is the number of name+value pairs that was received and can
 +be accessed
 +
 +\fIheaders\fP is a handle used to access push headers using the accessor
 +functions described below. This only accesses and provides the PUSH_PROMISE
 +headers, the normal response headers will be provided in the header callback
 +as usual.
 +
 +\fIuserp\fP is the pointer set with \fICURLMOPT_PUSHDATA(3)\fP
 +
 +If the callback returns CURL_PUSH_OK, the 'easy' handle will be added to the
 +multi handle, the callback must not do that by itself.
 +
 +The callback can access PUSH_PROMISE headers with two accessor
 +functions. These functions can only be used from within this callback and they
 +can only access the PUSH_PROMISE headers. The normal response headers will be
 +passed to the header callback for pushed streams just as for normal streams.
 +.IP curl_pushheader_bynum
 +Returns the header at index 'num' (or NULL). The returned pointer points to a
 +"name:value" string that will be freed when this callback returns.
 +.IP curl_pushheader_byname
 +Returns the value for the given header name (or NULL). This is a shortcut so
 +that the application doesn't have to loop through all headers to find the one
 +it is interested in. The data pointed will be freed when this callback
 +returns. If more than one header field use the same name, this returns only
 +the first one.
 +.SH CALLBACK RETURN VALUE
 +.IP "CURL_PUSH_OK (0)"
 +The application has accepted the stream and it can now start receiving data,
 +the ownership of the CURL handle has been taken over by the application.
 +.IP "CURL_PUSH_DENY (1)"
 +The callback denies the stream and no data for this will reach the
 +application, the easy handle will be destroyed by libcurl.
 +.IP *
 +All other return codes are reserved for future use.
 +.SH DEFAULT
 +NULL, no callback
 +.SH PROTOCOLS
 +HTTP(S) (HTTP/2 only)
 +.SH EXAMPLE
 +.nf
 +/* only allow pushes for file names starting with "push-" */
 +int push_callback(CURL *parent,
 +                  CURL *easy,
 +                  size_t num_headers,
 +                  struct curl_pushheaders *headers,
 +                  void *userp)
 +{
 +  char *headp;
 +  int *transfers = (int *)userp;
 +  FILE *out;
 +  headp = curl_pushheader_byname(headers, ":path");
 +  if(headp && !strncmp(headp, "/push-", 6)) {
 +    fprintf(stderr, "The PATH is %s\\n", headp);
 +
 +    /* save the push here */
 +    out = fopen("pushed-stream", "wb");
 +
 +    /* write to this file */
 +    curl_easy_setopt(easy, CURLOPT_WRITEDATA, out);
 +
 +    (*transfers)++; /* one more */
 +
 +    return CURL_PUSH_OK;
 +  }
 +  return CURL_PUSH_DENY;
 +}
 +
 +curl_multi_setopt(multi, CURLMOPT_PUSHFUNCTION, push_callback);
 +curl_multi_setopt(multi, CURLMOPT_PUSHDATA, &counter);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.44.0
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_PUSHDATA "(3), " CURLMOPT_PIPELINING "(3), " CURLOPT_PIPEWAIT 
"(3), "
 +.BR RFC 7540
diff --cc docs/libcurl/opts/GNURLOPT_CHUNK_DATA.3
index 57065e827,000000000..04572f405
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CHUNK_DATA.3
+++ b/docs/libcurl/opts/GNURLOPT_CHUNK_DATA.3
@@@ -1,90 -1,0 +1,90 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_CHUNK_DATA 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_CHUNK_DATA \- custom pointer to the FTP chunk callbacks
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_DATA, void *pointer);
 +.SH DESCRIPTION
 +Pass a \fIpointer\fP that will be untouched by libcurl and passed as the ptr
 +argument to the \fICURLOPT_CHUNK_BGN_FUNCTION(3)\fP and
 +\fICURLOPT_CHUNK_END_FUNCTION(3)\fP.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +static long file_is_coming(struct curl_fileinfo *finfo,
 +                           struct callback_data *data,
 +                           int remains)
 +{
 +  printf("%3d %40s %10luB ", remains, finfo->filename,
 +         (unsigned long)finfo->size);
 +
 +  switch(finfo->filetype) {
 +  case CURLFILETYPE_DIRECTORY:
 +    printf(" DIR\\n");
 +    break;
 +  case CURLFILETYPE_FILE:
 +    printf("FILE ");
 +    break;
 +  default:
 +    printf("OTHER\\n");
 +    break;
 +  }
 +
 +  if(finfo->filetype == CURLFILETYPE_FILE) {
 +    /* do not transfer files >= 50B */
 +    if(finfo->size > 50) {
 +      printf("SKIPPED\\n");
 +      return CURL_CHUNK_BGN_FUNC_SKIP;
 +    }
 +
 +    data->output = fopen(finfo->filename, "wb");
 +    if(!data->output) {
 +      return CURL_CHUNK_BGN_FUNC_FAIL;
 +    }
 +  }
 +
 +  return CURL_CHUNK_BGN_FUNC_OK;
 +}
 +
 +int main()
 +{
 +  /* data for callback */
 +  struct callback_data callback_info;
 +
 +  /* callback is called before download of concrete file started */
 +  curl_easy_setopt(curl, CURLOPT_CHUNK_BGN_FUNCTION, file_is_coming);
 +  curl_easy_setopt(curl, CURLOPT_CHUNK_DATA, &callback_info);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.21.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CHUNK_BGN_FUNCTION "(3), " CURLOPT_WILDCARDMATCH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CLOSESOCKETDATA.3
index d81d30aa6,000000000..dd9e69594
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CLOSESOCKETDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_CLOSESOCKETDATA.3
@@@ -1,55 -1,0 +1,55 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_CLOSESOCKETDATA 3 "16 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CLOSESOCKETDATA \- pointer passed to the socket close callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETDATA, void 
*pointer);
 +.SH DESCRIPTION
 +Pass a \fIpointer\fP that will be untouched by libcurl and passed as the first
 +argument in the closesocket callback set with
 +\fICURLOPT_CLOSESOCKETFUNCTION(3)\fP.
 +.SH DEFAULT
 +The default value of this parameter is NULL.
 +.SH PROTOCOLS
 +All except file:
 +.SH EXAMPLE
 +.nf
 +static int closesocket(void *clientp, curl_socket_t item)
 +{
 +  printf("libcurl wants to close %d now\\n", (int)item);
 +  return 0;
 +}
 +
 +/* call this function to close sockets */
 +curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket);
 +curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &sockfd);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.21.7
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CLOSESOCKETFUNCTION "(3), " CURLOPT_OPENSOCKETFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CLOSESOCKETFUNCTION.3
index ebb1b7c61,000000000..f7d8d45b4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CLOSESOCKETFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_CLOSESOCKETFUNCTION.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_CLOSESOCKETFUNCTION 3 "16 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CLOSESOCKETFUNCTION \- callback to socket close replacement function
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +int closesocket_callback(void *clientp, curl_socket_t item);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CLOSESOCKETFUNCTION, 
closesocket_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This callback function gets called by libcurl instead of the \fIclose(3)\fP or
 +\fIclosesocket(3)\fP call when sockets are closed (not for any other file
 +descriptors). This is pretty much the reverse to the
 +\fICURLOPT_OPENSOCKETFUNCTION(3)\fP option. Return 0 to signal success and 1
 +if there was an error.
 +
 +The \fIclientp\fP pointer is set with
 +\fICURLOPT_CLOSESOCKETDATA(3)\fP. \fIitem\fP is the socket libcurl wants to be
 +closed.
 +.SH DEFAULT
 +By default libcurl uses the standard socket close function.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +static int closesocket(void *clientp, curl_socket_t item)
 +{
 +  printf("libcurl wants to close %d now\\n", (int)item);
 +  return 0;
 +}
 +
 +/* call this function to close sockets */
 +curl_easy_setopt(curl, CURLOPT_CLOSESOCKETFUNCTION, closesocket);
 +curl_easy_setopt(curl, CURLOPT_CLOSESOCKETDATA, &sockfd);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.21.7
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CLOSESOCKETDATA "(3), " CURLOPT_OPENSOCKETFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CONNECTTIMEOUT_MS.3
index cc4be2902,000000000..da836e0c8
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CONNECTTIMEOUT_MS.3
+++ b/docs/libcurl/opts/GNURLOPT_CONNECTTIMEOUT_MS.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_CONNECTTIMEOUT_MS 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CONNECTTIMEOUT_MS \- timeout for the connect phase
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT_MS, long 
timeout);
 +.SH DESCRIPTION
 +Pass a long. It should contain the maximum time in milliseconds that you allow
 +the connection phase to the server to take.  This only limits the connection
 +phase, it has no impact once it has connected. Set to zero to switch to the
 +default built-in connection timeout - 300 seconds. See also the
 +\fICURLOPT_TIMEOUT_MS(3)\fP option.
 +
 +In unix-like systems, this might cause signals to be used unless
 +\fICURLOPT_NOSIGNAL(3)\fP is set.
 +
 +If both \fICURLOPT_CONNECTTIMEOUT(3)\fP and \fICURLOPT_CONNECTTIMEOUT_MS(3)\fP
 +are set, the value set last will be used.
 +.SH DEFAULT
 +300000
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* complete connection within 10000 milliseconds */
 +  curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT_MS, 10000L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_CONNECTTIMEOUT "(3), "
 +.BR CURLOPT_TIMEOUT "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CONNECT_TO.3
index 999fca1a5,000000000..a54121001
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CONNECT_TO.3
+++ b/docs/libcurl/opts/GNURLOPT_CONNECT_TO.3
@@@ -1,111 -1,0 +1,111 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_CONNECT_TO 3 "10 April 2016" "libcurl 7.49.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_CONNECT_TO \- Connect to a specific host and port instead of the 
URL's host and port
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECT_TO,
 +                          struct curl_slist *connect_to);
 +.fi
 +.SH DESCRIPTION
 +Pass a pointer to a linked list of strings with "connect to" information to
 +use for establishing network connections 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 string should be written using the format
 +HOST:PORT:CONNECT-TO-HOST:CONNECT-TO-PORT where HOST is the host of the
 +request, PORT is the port of the request, CONNECT-TO-HOST is the host name to
 +connect to, and CONNECT-TO-PORT is the port to connect to.
 +
 +The first string that matches the request's host and port is used.
 +
 +Dotted numerical IP addresses are supported for HOST and CONNECT-TO-HOST.
 +A numerical IPv6 address must be written within [brackets].
 +
 +Any of the four values may be empty. When the HOST or PORT is empty, the host
 +or port will always match (the request's host or port is ignored).
 +When CONNECT-TO-HOST or CONNECT-TO-PORT is empty, the "connect to" feature
 +will be disabled for the host or port, and the request's host or port will be
 +used to establish the network connection.
 +
 +This option is suitable to direct the request at a specific server, e.g. at a
 +specific cluster node in a cluster of servers.
 +
 +The "connect to" host and port are only used to establish the network
 +connection. They do NOT affect the host and port that are used for TLS/SSL
 +(e.g. SNI, certificate verification) or for the application protocols.
 +
 +In contrast to \fICURLOPT_RESOLVE(3)\fP, the option
 +\fICURLOPT_CONNECT_TO(3)\fP does not pre-populate the DNS cache and therefore
 +it does not affect future transfers of other easy handles that have been added
 +to the same multi handle.
 +
 +The "connect to" host and port are ignored if they are equal to the host and
 +the port in the request URL, because connecting to the host and the port in
 +the request URL is the default behavior.
 +
 +If an HTTP proxy is used for a request having a special "connect to" host or
 +port, and the "connect to" host or port differs from the request's host and
 +port, the HTTP proxy is automatically switched to tunnel mode for this
 +specific request. This is necessary because it is not possible to connect to a
 +specific host or port in normal (non-tunnel) mode.
 +
 +When this option is passed to \fIcurl_easy_setopt(3)\fP, libcurl will not copy
 +the entire list so you \fBmust\fP keep it around until you no longer use this
 +\fIhandle\fP for a transfer before you call \fIcurl_slist_free_all(3)\fP on
 +the list.
 +
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl;
 +struct curl_slist *connect_to = NULL;
 +connect_to = curl_slist_append(NULL, "example.com::server1.example.com:");
 +
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_CONNECT_TO, connect_to);
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  curl_easy_perform(curl);
 +
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +
 +curl_slist_free_all(connect_to);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.49.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_URL "(3), " CURLOPT_RESOLVE "(3), " CURLOPT_FOLLOWLOCATION "(3), 
" CURLOPT_HTTPPROXYTUNNEL  "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_COOKIE.3
index 45b3517e9,000000000..d38dd2c07
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_COOKIE.3
+++ b/docs/libcurl/opts/GNURLOPT_COOKIE.3
@@@ -1,83 -1,0 +1,83 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_COOKIE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_COOKIE \- set contents of HTTP Cookie header
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIE, char *cookie);
 +.SH DESCRIPTION
 +Pass a pointer to a zero terminated string as parameter. It will be used to
 +set a cookie in the HTTP request. The format of the string should be
 +NAME=CONTENTS, where NAME is the cookie name and CONTENTS is what the cookie
 +should contain.
 +
 +If you need to set multiple cookies, set them all using a single option
 +concatenated like this: "name1=content1; name2=content2;" etc.
 +
 +This option sets the cookie header explicitly in the outgoing request(s). If
 +multiple requests are done due to authentication, followed redirections or
 +similar, they will all get this cookie passed on.
 +
 +The cookies set by this option are separate from the internal cookie storage
 +held by the cookie engine and will not be modified by it. If you enable the
 +cookie engine and either you've imported a cookie of the same name (e.g. 
'foo')
 +or the server has set one, it will have no effect on the cookies you set here.
 +A request to the server will send both the 'foo' held by the cookie engine and
 +the 'foo' held by this option. To set a cookie that is instead held by the
 +cookie engine and can be modified by the server use
 +\fICURLOPT_COOKIELIST(3)\fP.
 +
 +Using this option multiple times will only make the latest string override the
 +previous ones.
 +
 +This option will not enable the cookie engine. Use \fICURLOPT_COOKIEFILE(3)\fP
 +or \fICURLOPT_COOKIEJAR(3)\fP to enable parsing and sending cookies
 +automatically.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL, no cookies
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  curl_easy_setopt(curl, CURLOPT_COOKIE, "tool=curl; fun=yes;");
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +If HTTP is enabled
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is enabled, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_COOKIEFILE "(3), " CURLOPT_COOKIEJAR "(3), "  CURLOPT_COOKIELIST 
"(3), "
 +.BR CURLOPT_HTTPHEADER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_COPYPOSTFIELDS.3
index 91b76ef33,000000000..16f12f28a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_COPYPOSTFIELDS.3
+++ b/docs/libcurl/opts/GNURLOPT_COPYPOSTFIELDS.3
@@@ -1,70 -1,0 +1,70 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_COPYPOSTFIELDS 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_COPYPOSTFIELDS \- have libcurl copy data to POST
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COPYPOSTFIELDS, char *data);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should be the full \fIdata\fP to post in a
 +HTTP POST operation. It behaves as the \fICURLOPT_POSTFIELDS(3)\fP option, but
 +the original data is instead copied by the library, allowing the application
 +to overwrite the original data after setting this option.
 +
 +Because data are copied, care must be taken when using this option in
 +conjunction with \fICURLOPT_POSTFIELDSIZE(3)\fP or
 +\fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP: If the size has not been set prior to
 +\fICURLOPT_COPYPOSTFIELDS(3)\fP, the data is assumed to be a zero terminated
 +string; else the stored size informs the library about the byte count to
 +copy. In any case, the size must not be changed after
 +\fICURLOPT_COPYPOSTFIELDS(3)\fP, unless another \fICURLOPT_POSTFIELDS(3)\fP or
 +\fICURLOPT_COPYPOSTFIELDS(3)\fP option is issued.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  char local_buffer[1024]="data to send";
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* size of the data to copy from the buffer and send in the request */
 +  curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L);
 +
 +  /* send data from the local stack */
 +  curl_easy_setopt(curl, CURLOPT_COPYPOSTFIELDS, local_buffer);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.17.1
 +.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 CURLOPT_POSTFIELDS "(3), " CURLOPT_POSTFIELDSIZE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CUSTOMREQUEST.3
index 3b701c07b,000000000..84064876e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CUSTOMREQUEST.3
+++ b/docs/libcurl/opts/GNURLOPT_CUSTOMREQUEST.3
@@@ -1,111 -1,0 +1,111 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_CUSTOMREQUEST 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_CUSTOMREQUEST \- custom string for request
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CUSTOMREQUEST, char *request);
 +.SH DESCRIPTION
 +Pass a pointer to a zero terminated string as parameter.
 +
 +When you change the request method by setting \fICURLOPT_CUSTOMREQUEST(3)\fP
 +to something, you don't actually change how libcurl behaves or acts in regards
 +to the particular request method, it will only change the actual string sent
 +in the request.
 +
 +Restore to the internal default by setting this to NULL.
 +
 +This option can be used to specify the request:
 +.IP HTTP
 +Instead of GET or HEAD when performing HTTP based requests. This is
 +particularly useful, for example, for performing an HTTP DELETE request.
 +
 +For example:
 +
 +When you tell libcurl to do a HEAD request, but then specify a GET though a
 +custom request libcurl will still act as if it sent a HEAD. To switch to a
 +proper HEAD use \fICURLOPT_NOBODY(3)\fP, to switch to a proper POST use
 +\fICURLOPT_POST(3)\fP or \fICURLOPT_POSTFIELDS(3)\fP and to switch to a proper
 +GET use \fICURLOPT_HTTPGET(3)\fP.
 +
 +Many people have wrongly used this option to replace the entire request with
 +their own, including multiple headers and POST contents. While that might work
 +in many cases, it will cause libcurl to send invalid requests and it could
 +possibly confuse the remote server badly. Use \fICURLOPT_POST(3)\fP and
 +\fICURLOPT_POSTFIELDS(3)\fP to set POST data. Use \fICURLOPT_HTTPHEADER(3)\fP
 +to replace or extend the set of headers sent by libcurl. Use
 +\fICURLOPT_HTTP_VERSION(3)\fP to change HTTP version.
 +
 +.IP FTP
 +Instead of LIST and NLST when performing FTP directory listings.
 +.IP IMAP
 +Instead of LIST when issuing IMAP based requests.
 +.IP POP3
 +Instead of LIST and RETR when issuing POP3 based requests.
 +
 +For example:
 +
 +When you tell libcurl to use a custom request it will behave like a LIST or
 +RETR command was sent where it expects data to be returned by the server. As
 +such \fICURLOPT_NOBODY(3)\fP should be used when specifying commands such as
 +DELE and NOOP for example.
 +.IP SMTP
 +Instead of a HELP or VRFY when issuing SMTP based requests.
 +
 +For example:
 +
 +Normally a multiline response is returned which can be used, in conjunction
 +with \fICURLOPT_MAIL_RCPT(3)\fP, to specify an EXPN request. If the
 +\fICURLOPT_NOBODY(3)\fP option is specified then the request can be used to
 +issue NOOP and RSET commands.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP, FTP, IMAP, POP3 and SMTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/foo.bin";);
 +
 +  /* DELETE the given path */
 +  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +IMAP is supported since 7.30.0, POP3 since 7.26.0 and SMTP since 7.34.0.
 +.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 CURLOPT_HTTPHEADER "(3), " CURLOPT_NOBODY "(3), "
 +.BR CURLOPT_REQUEST_TARGET "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DEBUGDATA.3
index b6c54d021,000000000..1435ee039
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DEBUGDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_DEBUGDATA.3
@@@ -1,45 -1,0 +1,45 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_DEBUGDATA 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_DEBUGDATA \- custom pointer for debug callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGDATA, void *pointer);
 +.SH DESCRIPTION
 +Pass a \fIpointer\fP to whatever you want passed in to your
 +\fICURLOPT_DEBUGFUNCTION(3)\fP in the last void * argument. This pointer is
 +not used by libcurl, it is only passed to the callback.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +https://curl.haxx.se/libcurl/c/debug.html
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DEBUGFUNCTION.3
index 46f0187e7,000000000..7479034e3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DEBUGFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_DEBUGFUNCTION.3
@@@ -1,187 -1,0 +1,187 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_DEBUGFUNCTION 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_DEBUGFUNCTION \- debug callback
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +typedef enum {
 +  CURLINFO_TEXT = 0,
 +  CURLINFO_HEADER_IN,    /* 1 */
 +  CURLINFO_HEADER_OUT,   /* 2 */
 +  CURLINFO_DATA_IN,      /* 3 */
 +  CURLINFO_DATA_OUT,     /* 4 */
 +  CURLINFO_SSL_DATA_IN,  /* 5 */
 +  CURLINFO_SSL_DATA_OUT, /* 6 */
 +  CURLINFO_END
 +} curl_infotype;
 +
 +int debug_callback(CURL *handle,
 +                   curl_infotype type,
 +                   char *data,
 +                   size_t size,
 +                   void *userptr);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEBUGFUNCTION,
 +                          debug_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +\fICURLOPT_DEBUGFUNCTION(3)\fP replaces the standard debug function used when
 +\fICURLOPT_VERBOSE(3)\fP is in effect. This callback receives debug
 +information, as specified in the \fItype\fP argument. This function must
 +return 0. The \fIdata\fP pointed to by the char * passed to this function WILL
 +NOT be zero terminated, but will be exactly of the \fIsize\fP as told by the
 +\fIsize\fP argument.
 +
 +The \fIuserptr\fP argument is the pointer set with \fICURLOPT_DEBUGDATA(3)\fP.
 +
 +Available curl_infotype values:
 +.IP CURLINFO_TEXT
 +The data is informational text.
 +.IP CURLINFO_HEADER_IN
 +The data is header (or header-like) data received from the peer.
 +.IP CURLINFO_HEADER_OUT
 +The data is header (or header-like) data sent to the peer.
 +.IP CURLINFO_DATA_IN
 +The data is protocol data received from the peer.
 +.IP CURLINFO_DATA_OUT
 +The data is protocol data sent to the peer.
 +.IP CURLINFO_SSL_DATA_OUT
 +The data is SSL/TLS (binary) data sent to the peer.
 +.IP CURLINFO_SSL_DATA_IN
 +The data is SSL/TLS (binary) data received from the peer.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +static
 +void dump(const char *text,
 +          FILE *stream, unsigned char *ptr, size_t size)
 +{
 +  size_t i;
 +  size_t c;
 +  unsigned int width=0x10;
 +
 +  fprintf(stream, "%s, %10.10ld bytes (0x%8.8lx)\\n",
 +          text, (long)size, (long)size);
 +
 +  for(i=0; i<size; i+= width) {
 +    fprintf(stream, "%4.4lx: ", (long)i);
 +
 +    /* show hex to the left */
 +    for(c = 0; c < width; c++) {
 +      if(i+c < size)
 +        fprintf(stream, "%02x ", ptr[i+c]);
 +      else
 +        fputs("   ", stream);
 +    }
 +
 +    /* show data on the right */
 +    for(c = 0; (c < width) && (i+c < size); c++) {
 +      char x = (ptr[i+c] >= 0x20 && ptr[i+c] < 0x80) ? ptr[i+c] : '.';
 +      fputc(x, stream);
 +    }
 +
 +    fputc('\\n', stream); /* newline */
 +  }
 +}
 +
 +static
 +int my_trace(CURL *handle, curl_infotype type,
 +             char *data, size_t size,
 +             void *userp)
 +{
 +  const char *text;
 +  (void)handle; /* prevent compiler warning */
 +  (void)userp;
 +
 +  switch (type) {
 +  case CURLINFO_TEXT:
 +    fprintf(stderr, "== Info: %s", data);
 +  default: /* in case a new one is introduced to shock us */
 +    return 0;
 +
 +  case CURLINFO_HEADER_OUT:
 +    text = "=> Send header";
 +    break;
 +  case CURLINFO_DATA_OUT:
 +    text = "=> Send data";
 +    break;
 +  case CURLINFO_SSL_DATA_OUT:
 +    text = "=> Send SSL data";
 +    break;
 +  case CURLINFO_HEADER_IN:
 +    text = "<= Recv header";
 +    break;
 +  case CURLINFO_DATA_IN:
 +    text = "<= Recv data";
 +    break;
 +  case CURLINFO_SSL_DATA_IN:
 +    text = "<= Recv SSL data";
 +    break;
 +  }
 +
 +  dump(text, stderr, (unsigned char *)data, size);
 +  return 0;
 +}
 +
 +int main(void)
 +{
 +  CURL *curl;
 +  CURLcode res;
 +
 +  curl = curl_easy_init();
 +  if(curl) {
 +    curl_easy_setopt(curl, CURLOPT_DEBUGFUNCTION, my_trace);
 +
 +    /* the DEBUGFUNCTION has no effect until we enable VERBOSE */
 +    curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
 +
 +    /* example.com is redirected, so we tell libcurl to follow redirection */
 +    curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 +
 +    curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/";);
 +    res = curl_easy_perform(curl);
 +    /* Check for errors */
 +    if(res != CURLE_OK)
 +      fprintf(stderr, "curl_easy_perform() failed: %s\\n",
 +              curl_easy_strerror(res));
 +
 +    /* always cleanup */
 +    curl_easy_cleanup(curl);
 +  }
 +  return 0;
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_VERBOSE "(3), " CURLOPT_DEBUGDATA "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DEFAULT_PROTOCOL.3
index eb8564c1e,000000000..92f4fc253
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DEFAULT_PROTOCOL.3
+++ b/docs/libcurl/opts/GNURLOPT_DEFAULT_PROTOCOL.3
@@@ -1,82 -1,0 +1,82 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_DEFAULT_PROTOCOL 3 "18 Aug 2015" "libcurl 7.45.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_DEFAULT_PROTOCOL \- default protocol to use if the URL is missing a
 +scheme name
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DEFAULT_PROTOCOL, char
 +*protocol);
 +.SH DESCRIPTION
 +This option tells libcurl to use \fIprotocol\fP if the URL is missing a scheme
 +name.
 +
 +Use one of these protocol (scheme) names:
 +
 +dict, file, ftp, ftps, gopher, http, https, imap, imaps, ldap, ldaps, pop3,
 +pop3s, rtsp, scp, sftp, smb, smbs, smtp, smtps, telnet, tftp
 +
 +An unknown or unsupported protocol causes error
 +\fICURLE_UNSUPPORTED_PROTOCOL\fP when libcurl parses a schemeless URL. Parsing
 +happens when \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP is
 +called. The protocols supported by libcurl will vary depending on how it was
 +built. Use \fIcurl_version_info(3)\fP if you need a list of protocol names
 +supported by the build of libcurl that you are using.
 +
 +This option does not change the default proxy protocol (http).
 +
 +Without this option libcurl would make a guess based on the host, see
 +\fICURLOPT_URL(3)\fP for details.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL (make a guess based on the host)
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  /* set a URL without a scheme */
 +  curl_easy_setopt(curl, CURLOPT_URL, "example.com");
 +
 +  /* set the default protocol (scheme) for schemeless URLs */
 +  curl_easy_setopt(curl, CURLOPT_DEFAULT_PROTOCOL, "https");
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.45.0
 +.SH RETURN VALUE
 +CURLE_OK if the option is supported.
 +
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +
 +CURLE_UNKNOWN_OPTION if the option is not supported.
 +.SH "SEE ALSO"
 +.BR CURLOPT_URL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_ERRORBUFFER.3
index 593061d78,000000000..caf21ba21
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_ERRORBUFFER.3
+++ b/docs/libcurl/opts/GNURLOPT_ERRORBUFFER.3
@@@ -1,92 -1,0 +1,92 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_ERRORBUFFER 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_ERRORBUFFER \- set error buffer for error messages
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ERRORBUFFER, char *buf);
 +.SH DESCRIPTION
 +Pass a char * to a buffer that libcurl \fBmay\fP store human readable error
 +messages on failures or problems. This may be more helpful than just the
 +return code from \fIcurl_easy_perform(3)\fP and related functions. The buffer
 +\fBmust be at least CURL_ERROR_SIZE bytes big\fP.
 +
 +You must keep the associated buffer available until libcurl no longer needs
 +it. Failing to do so will cause very odd behavior or even crashes. libcurl
 +will need it until you call \fIcurl_easy_cleanup(3)\fP or you set the same
 +option again to use a different pointer.
 +
 +Do not rely on the contents of the buffer unless an error code was returned.
 +Since 7.60.0 libcurl will initialize the contents of the error buffer to an
 +empty string before performing the transfer. For earlier versions if an error
 +code was returned but there was no error detail then the buffer is untouched.
 +
 +Consider \fICURLOPT_VERBOSE(3)\fP and \fICURLOPT_DEBUGFUNCTION(3)\fP to better
 +debug and trace why errors happen.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  char errbuf[CURL_ERROR_SIZE];
 +
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* provide a buffer to store errors in */
 +  curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, errbuf);
 +
 +  /* set the error buffer as empty before performing a request */
 +  errbuf[0] = 0;
 +
 +  /* perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  /* if the request did not complete correctly, show the error
 +  information. if no detailed error information was written to errbuf
 +  show the more generic information from curl_easy_strerror instead.
 +  */
 +  if(res != CURLE_OK) {
 +    size_t len = strlen(errbuf);
 +    fprintf(stderr, "\\nlibcurl: (%d) ", res);
 +    if(len)
 +      fprintf(stderr, "%s%s", errbuf,
 +              ((errbuf[len - 1] != '\\n') ? "\\n" : ""));
 +    else
 +      fprintf(stderr, "%s\\n", curl_easy_strerror(res));
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_DEBUGFUNCTION "(3), " CURLOPT_VERBOSE "(3), "
 +.BR curl_easy_strerror "(3), " curl_multi_strerror "(3), "
 +.BR curl_share_strerror "(3) "
diff --cc docs/libcurl/opts/GNURLOPT_EXPECT_100_TIMEOUT_MS.3
index 51c52ee25,000000000..ce0dbcf64
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_EXPECT_100_TIMEOUT_MS.3
+++ b/docs/libcurl/opts/GNURLOPT_EXPECT_100_TIMEOUT_MS.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_EXPECT_100_TIMEOUT_MS 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_EXPECT_100_TIMEOUT_MS \- timeout for Expect: 100-continue response
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EXPECT_100_TIMEOUT_MS,
 +                          long milliseconds);
 +.SH DESCRIPTION
 +Pass a long to tell libcurl the number of \fImilliseconds\fP to wait for a
 +server response with the HTTP status 100 (Continue), 417 (Expectation Failed)
 +or similar after sending an HTTP request containing an Expect: 100-continue
 +header. If this times out before a response is received, the request body is
 +sent anyway.
 +.SH DEFAULT
 +1000 milliseconds
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* wait 3 seconds for 100-continue */
 +  curl_easy_setopt(curl, CURLOPT_EXPECT_100_TIMEOUT_MS, 3000L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.36.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_POST "(3), " CURLOPT_HTTPPOST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FAILONERROR.3
index 1a1217a32,000000000..2e9662c0e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FAILONERROR.3
+++ b/docs/libcurl/opts/GNURLOPT_FAILONERROR.3
@@@ -1,67 -1,0 +1,67 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_FAILONERROR 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FAILONERROR \- request failure on HTTP response >= 400
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FAILONERROR, long fail);
 +.SH DESCRIPTION
 +A long parameter set to 1 tells the library to fail the request if the HTTP
 +code returned is equal to or larger than 400. The default action would be to
 +return the page normally, ignoring that code.
 +
 +This method is not fail-safe and there are occasions where non-successful
 +response codes will slip through, especially when authentication is involved
 +(response codes 401 and 407).
 +
 +You might get some amounts of headers transferred before this situation is
 +detected, like when a "100-continue" is received as a response to a POST/PUT
 +and a 401 or 407 is received immediately afterwards.
 +
 +When this option is used and an error is detected, it will cause the
 +connection to get closed and \fICURLE_HTTP_RETURNED_ERROR\fP is returned.
 +.SH DEFAULT
 +0, do not fail on error
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_FAILONERROR, 1L);
 +  ret = curl_easy_perform(curl);
 +  if(ret == CURLE_HTTP_RETURNED_ERROR) {
 +    /* an HTTP response error problem */
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with HTTP.
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HTTP200ALIASES "(3), " CURLOPT_KEEP_SENDING_ON_ERROR "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTP_USE_EPRT.3
index a26587d89,000000000..9c6cd6365
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTP_USE_EPRT.3
+++ b/docs/libcurl/opts/GNURLOPT_FTP_USE_EPRT.3
@@@ -1,47 -1,0 +1,47 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_FTP_USE_EPRT 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FTP_USE_EPRT \- enable/disable use of EPRT with FTP
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPRT, long enabled);
 +.SH DESCRIPTION
 +Pass a long. If the value is 1, it tells curl to use the EPRT command when
 +doing active FTP downloads (which is enabled by
 +\fICURLOPT_FTPPORT(3)\fP). Using EPRT means that it will first attempt to use
 +EPRT before using PORT, but if you pass zero to this option, it will not try
 +using EPRT, only plain PORT.
 +
 +If the server is an IPv6 host, this option will have no effect as EPRT is
 +necessary then.
 +.SH DEFAULT
 +.SH PROTOCOLS
 +.SH EXAMPLE
 +.SH AVAILABILITY
 +Added in 7.10.5
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_FTP_USE_EPSV "(3), " CURLOPT_FTPPORT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3
index fc980486a,000000000..9c8ed42f1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3
+++ b/docs/libcurl/opts/GNURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS 3 "1 Feb 2018" "libcurl 7.59.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS \- head start for ipv6 for happy eyeballs
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, 
long timeout);
 +.SH DESCRIPTION
 +Happy eyeballs is an algorithm that attempts to connect to both IPv4 and IPv6
 +addresses for dual-stack hosts, preferring IPv6 first for \fItimeout\fP
 +milliseconds. If the IPv6 address cannot be connected to within that time then
 +a connection attempt is made to the IPv4 address in parallel. The first
 +connection to be established is the one that is used.
 +
 +The range of suggested useful values for \fItimeout\fP is limited. Happy
 +Eyeballs RFC 6555 says "It is RECOMMENDED that connection attempts be paced
 +150-250 ms apart to balance human factors against network load." libcurl
 +currently defaults to 200 ms. Firefox and Chrome currently default to 300 ms.
 +.SH DEFAULT
 +CURL_HET_DEFAULT (currently defined as 200L)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS, 300L);
 +
 +  curl_easy_perform(curl);
 +
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.59.0
 +.SH RETURN VALUE
 +Returns CURLE_OK
diff --cc docs/libcurl/opts/GNURLOPT_HTTPHEADER.3
index 454f9c103,000000000..017cb0a37
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HTTPHEADER.3
+++ b/docs/libcurl/opts/GNURLOPT_HTTPHEADER.3
@@@ -1,124 -1,0 +1,124 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_HTTPHEADER 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_HTTPHEADER \- set custom HTTP headers
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPHEADER, struct curl_slist 
*headers);
 +.SH DESCRIPTION
 +Pass a pointer to a linked list of HTTP headers to pass to the server and/or
 +proxy in your HTTP request. The same list can be used for both host and proxy
 +requests!
 +
 +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. If you add a
 +header that is otherwise generated and used by libcurl internally, your added
 +one will be used instead. If you add a header with no content as in 'Accept:'
 +(no data on the right side of the colon), the internally used header will get
 +disabled. With this option you can add new headers, replace internal headers
 +and remove internal headers. To add a header with no content (nothing to the
 +right side of the colon), use the form 'MyHeader;' (note the ending
 +semicolon).
 +
 +The headers included in the linked list \fBmust not\fP be CRLF-terminated,
 +because libcurl adds CRLF after each header item. Failure to comply with this
 +will result in strange bugs because the server will most likely ignore part of
 +the headers you specified.
 +
 +The first line in a request (containing the method, usually a GET or POST) is
 +not a header and cannot be replaced using this option. Only the lines
 +following the request-line are headers. Adding this method line in this list
 +of headers will only cause your request to send an invalid header. Use
 +\fICURLOPT_CUSTOMREQUEST(3)\fP to change the method.
 +
 +When this option is passed to \fIcurl_easy_setopt(3)\fP, libcurl will not copy
 +the entire list so you \fBmust\fP keep it around until you no longer use this
 +\fIhandle\fP for a transfer before you call \fIcurl_slist_free_all(3)\fP on
 +the list.
 +
 +Pass a NULL to this option to reset back to no custom headers.
 +
 +The most commonly replaced headers have "shortcuts" in the options
 +\fICURLOPT_COOKIE(3)\fP, \fICURLOPT_USERAGENT(3)\fP and
 +\fICURLOPT_REFERER(3)\fP. We recommend using those.
 +
 +There's an alternative option that sets or replaces headers only for requests
 +that are sent with CONNECT to a proxy: \fICURLOPT_PROXYHEADER(3)\fP. Use
 +\fICURLOPT_HEADEROPT(3)\fP to control the behavior.
 +.SH SECURITY CONCERNS
 +By default, this option makes libcurl send the given headers in all HTTP
 +requests done by this handle. You should therefore use this option with
 +caution if you for example connect to the remote site using a proxy and a
 +CONNECT request, you should to consider if that proxy is supposed to also get
 +the headers. They may be private or otherwise sensitive to leak.
 +
 +Use \fICURLOPT_HEADEROPT(3)\fP to make the headers only get sent to where you
 +intend them to get sent.
 +
 +Custom headers are sent in all requests done by the easy handles, which
 +implies that if you tell libcurl to follow redirects
 +(\fICURLOPT_FOLLOWLOCATION(3)\fP), the same set of custom headers will be sent
 +in the subsequent request. Redirects can of course go to other hosts and thus
 +those servers will get all the contents of your custom headers too.
 +
 +Starting in 7.58.0, libcurl will specifically prevent "Authorization:" headers
 +from being sent to other hosts than the first used one, unless specifically
 +permitted with the \fICURLOPT_UNRESTRICTED_AUTH(3)\fP option.
 +
 +Starting in 7.64.0, libcurl will specifically prevent "Cookie:" headers
 +from being sent to other hosts than the first used one, unless specifically
 +permitted with the \fICURLOPT_UNRESTRICTED_AUTH(3)\fP option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +
 +struct curl_slist *list = NULL;
 +
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  list = curl_slist_append(list, "Shoesize: 10");
 +  list = curl_slist_append(list, "Accept:");
 +
 +  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
 +
 +  curl_easy_perform(curl);
 +
 +  curl_slist_free_all(list); /* free the list again */
 +}
 +.fi
 +
 +.SH AVAILABILITY
 +As long as HTTP is enabled
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CUSTOMREQUEST "(3), " CURLOPT_HEADEROPT "(3), "
 +.BR CURLOPT_PROXYHEADER "(3), " CURLOPT_HEADER "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_HTTPPROXYTUNNEL.3
index a183cb0bf,000000000..d4975406f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HTTPPROXYTUNNEL.3
+++ b/docs/libcurl/opts/GNURLOPT_HTTPPROXYTUNNEL.3
@@@ -1,68 -1,0 +1,68 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_HTTPPROXYTUNNEL 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_HTTPPROXYTUNNEL \- tunnel through HTTP proxy
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPPROXYTUNNEL, long tunnel);
 +.SH DESCRIPTION
 +Set the \fBtunnel\fP parameter to 1L to make libcurl tunnel all operations
 +through the HTTP proxy (set with \fICURLOPT_PROXY(3)\fP). There is a big
 +difference between using a proxy and to tunnel through it.
 +
 +Tunneling means that an HTTP CONNECT request is sent to the proxy, asking it
 +to connect to a remote host on a specific port number and then the traffic is
 +just passed through the proxy. Proxies tend to white-list specific port 
numbers
 +it allows CONNECT requests to and often only port 80 and 443 are allowed.
 +
 +To suppress proxy CONNECT response headers from user callbacks use
 +\fICURLOPT_SUPPRESS_CONNECT_HEADERS(3)\fP.
 +
 +HTTP proxies can generally only speak HTTP (for obvious reasons), which makes
 +libcurl convert non-HTTP requests to HTTP when using an HTTP proxy without
 +this tunnel option set. For example, asking for an FTP URL and specifying an
 +HTTP proxy will make libcurl send an FTP URL in an HTTP GET request to the
 +proxy. By instead tunneling through the proxy, you avoid that conversion (that
 +rarely works through the proxy anyway).
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +All network protocols
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:80";);
 +  curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), " CURLOPT_PROXYPORT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_IGNORE_CONTENT_LENGTH.3
index 3ce98ebcb,000000000..bee16681c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_IGNORE_CONTENT_LENGTH.3
+++ b/docs/libcurl/opts/GNURLOPT_IGNORE_CONTENT_LENGTH.3
@@@ -1,67 -1,0 +1,67 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_IGNORE_CONTENT_LENGTH 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_IGNORE_CONTENT_LENGTH \- ignore content length
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IGNORE_CONTENT_LENGTH,
 +                          long ignore);
 +.SH DESCRIPTION
 +If \fIignore\fP is set to 1L, ignore the Content-Length header in the HTTP
 +response and ignore asking for or relying on it for FTP transfers.
 +
 +This is useful for HTTP with Apache 1.x (and similar servers) which will
 +report incorrect content length for files over 2 gigabytes. If this option is
 +used, curl will not be able to accurately report progress, and will simply
 +stop the download when the server ends the connection.
 +
 +It is also useful with FTP when for example the file is growing while the
 +transfer is in progress which otherwise will unconditionally cause libcurl to
 +report error.
 +
 +Only use this option if strictly necessary.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* we know the server is silly, ignore content-length */
 +  curl_easy_setopt(curl, CURLOPT_IGNORE_CONTENT_LENGTH, 1L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.14.1. Support for FTP added in 7.46.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HTTP_VERSION "(3), " CURLOPT_MAXFILESIZE_LARGE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_INFILESIZE.3
index 1bb55118d,000000000..197f9cd46
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_INFILESIZE.3
+++ b/docs/libcurl/opts/GNURLOPT_INFILESIZE.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_INFILESIZE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_INFILESIZE \- set size of the input file to send off
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INFILESIZE, long filesize);
 +.SH DESCRIPTION
 +When uploading a file to a remote site, \fIfilesize\fP should be used to tell
 +libcurl what the expected size of the input file is. This value must be passed
 +as a long. See also \fICURLOPT_INFILESIZE_LARGE(3)\fP for sending files larger
 +than 2GB.
 +
 +For uploading using SCP, this option or \fICURLOPT_INFILESIZE_LARGE(3)\fP is
 +mandatory.
 +
 +To unset this value again, set it to -1.
 +
 +When sending emails using SMTP, this command can be used to specify the
 +optional SIZE parameter for the MAIL FROM command.
 +
 +This option does not limit how much data libcurl will actually send, as that
 +is controlled entirely by what the read callback returns, but telling one
 +value and sending a different amount may lead to errors.
 +.SH DEFAULT
 +Unset
 +.SH PROTOCOLS
 +Many
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  long uploadsize = FILE_SIZE;
 +
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/destination.tar.gz";);
 +
 +  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 +
 +  curl_easy_setopt(curl, CURLOPT_INFILESIZE, uploadsize);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +SMTP support added in 7.23.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_INFILESIZE_LARGE "(3), " CURLOPT_UPLOAD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_INFILESIZE_LARGE.3
index 2aefeb44c,000000000..8a5acfc04
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_INFILESIZE_LARGE.3
+++ b/docs/libcurl/opts/GNURLOPT_INFILESIZE_LARGE.3
@@@ -1,72 -1,0 +1,72 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_INFILESIZE_LARGE 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_INFILESIZE_LARGE \- set size of the input file to send off
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INFILESIZE_LARGE,
 +                          curl_off_t filesize);
 +.SH DESCRIPTION
 +When uploading a file to a remote site, \fIfilesize\fP should be used to tell
 +libcurl what the expected size of the input file is. This value must be passed
 +as a \fBcurl_off_t\fP.
 +
 +For uploading using SCP, this option or \fICURLOPT_INFILESIZE(3)\fP is
 +mandatory.
 +
 +To unset this value again, set it to -1.
 +
 +When sending emails using SMTP, this command can be used to specify the
 +optional SIZE parameter for the MAIL FROM command.
 +
 +This option does not limit how much data libcurl will actually send, as that
 +is controlled entirely by what the read callback returns, but telling one
 +value and sending a different amount may lead to errors.
 +.SH DEFAULT
 +Unset
 +.SH PROTOCOLS
 +Many
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_off_t uploadsize = FILE_SIZE;
 +
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/destination.tar.gz";);
 +
 +  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 +
 +  curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, uploadsize);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +SMTP support added in 7.23.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_INFILESIZE "(3), " CURLOPT_UPLOAD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_INTERLEAVEFUNCTION.3
index bd5995963,000000000..c2c267e7f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_INTERLEAVEFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_INTERLEAVEFUNCTION.3
@@@ -1,84 -1,0 +1,84 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, 2017, Daniel Stenberg, <address@hidden>, et 
al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_INTERLEAVEFUNCTION 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_INTERLEAVEFUNCTION \- callback function for RTSP interleaved data
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +size_t interleave_callback(void *ptr, size_t size, size_t nmemb,
 +                           void *userdata);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERLEAVEFUNCTION,
 +                          interleave_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This callback function gets called by libcurl as soon as it has received
 +interleaved RTP data. This function gets called for each $ block and therefore
 +contains exactly one upper-layer protocol unit (e.g.  one RTP packet). Curl
 +writes the interleaved header as well as the included data for each call. The
 +first byte is always an ASCII dollar sign. The dollar sign is followed by a
 +one byte channel identifier and then a 2 byte integer length in network byte
 +order. See \fIRFC2326 Section 10.12\fP for more information on how RTP
 +interleaving behaves. If unset or set to NULL, curl will use the default write
 +function.
 +
 +Interleaved RTP poses some challenges for the client application. Since the
 +stream data is sharing the RTSP control connection, it is critical to service
 +the RTP in a timely fashion. If the RTP data is not handled quickly,
 +subsequent response processing may become unreasonably delayed and the
 +connection may close. The application may use \fICURL_RTSPREQ_RECEIVE\fP to
 +service RTP data when no requests are desired. If the application makes a
 +request, (e.g.  \fICURL_RTSPREQ_PAUSE\fP) then the response handler will
 +process any pending RTP data before marking the request as finished.
 +
 +The \fICURLOPT_INTERLEAVEDATA(3)\fP is passed in the \fIuserdata\fP argument 
in
 +the callback.
 +.SH DEFAULT
 +NULL, the interleave data is then passed to the regular write function:
 +\fICURLOPT_WRITEFUNCTION(3)\fP.
 +.SH PROTOCOLS
 +RTSP
 +.SH EXAMPLE
 +.nf
 +static size_t rtp_write(void *ptr, size_t size, size_t nmemb, void *user)
 +{
 +  struct local *l = (struct local *)user;
 +  /* take care of the packet in 'ptr', then return... */
 +  return size * nmemb;
 +}
 +{
 +  struct local rtp_data;
 +  curl_easy_setopt(curl, CURLOPT_INTERLEAVEFUNCTION, rtp_write);
 +  curl_easy_setopt(curl, CURLOPT_INTERLEAVEDATA, &rtp_data);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.20.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_INTERLEAVEDATA "(3), " CURLOPT_RTSP_REQUEST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_IOCTLFUNCTION.3
index 5d8a72fd1,000000000..f37f9c036
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_IOCTLFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_IOCTLFUNCTION.3
@@@ -1,92 -1,0 +1,92 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_IOCTLFUNCTION 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_IOCTLFUNCTION \- callback for I/O operations
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +typedef enum {
 +  CURLIOE_OK,            /* I/O operation successful */
 +  CURLIOE_UNKNOWNCMD,    /* command was unknown to callback */
 +  CURLIOE_FAILRESTART,   /* failed to restart the read */
 +  CURLIOE_LAST           /* never use */
 +} curlioerr;
 +
 +typedef enum  {
 +  CURLIOCMD_NOP,         /* no operation */
 +  CURLIOCMD_RESTARTREAD, /* restart the read stream from start */
 +  CURLIOCMD_LAST         /* never use */
 +} curliocmd;
 +
 +curlioerr ioctl_callback(CURL *handle, int cmd, void *clientp);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IOCTLFUNCTION, 
ioctl_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This callback function gets called by libcurl when something special
 +I/O-related needs to be done that the library can't do by itself. For now,
 +rewinding the read data stream is the only action it can request. The
 +rewinding of the read data stream may be necessary when doing an HTTP PUT or
 +POST with a multi-pass authentication method.
 +
 +The callback MUST return \fICURLIOE_UNKNOWNCMD\fP if the input \fIcmd\fP is
 +not \fICURLIOCMD_RESTARTREAD\fP.
 +
 +The \fIclientp\fP argument to the callback is set with the
 +\fICURLOPT_IOCTLDATA(3)\fP option.
 +
 +This option is deprecated! Do not use it. Use \fICURLOPT_SEEKFUNCTION(3)\fP
 +instead to provide seeking! If \fICURLOPT_SEEKFUNCTION(3)\fP is set, this
 +parameter will be ignored when seeking.
 +.SH DEFAULT
 +By default, this parameter is set to NULL. Not used.
 +.SH PROTOCOLS
 +Used with HTTP
 +.SH EXAMPLE
 +.nf
 +static curlioerr ioctl_callback(CURL *handle, int cmd, void *clientp)
 +{
 +  struct data *io = (struct data *)clientp;
 +  if(cmd == CURLIOCMD_RESTARTREAD) {
 +    lseek(fd, 0, SEEK_SET);
 +    current_offset = 0;
 +    return CURLIOE_OK;
 +  }
 +  return CURLIOE_UNKNOWNCMD;
 +}
 +{
 +  struct data ioctl_data;
 +  curl_easy_setopt(curl, CURLOPT_IOCTLFUNCTION, ioctl_callback);
 +  curl_easy_setopt(curl, CURLOPT_IOCTLDATA, &ioctl_data);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.12.3
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_IOCTLDATA "(3), " CURLOPT_SEEKFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAXREDIRS.3
index 8740fe7f8,000000000..159bf7b71
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAXREDIRS.3
+++ b/docs/libcurl/opts/GNURLOPT_MAXREDIRS.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_MAXREDIRS 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_MAXREDIRS \- maximum number of redirects allowed
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXREDIRS, long amount);
 +.SH DESCRIPTION
 +Pass a long. The set number will be the redirection limit \fIamount\fP. If
 +that many redirections have been followed, the next redirect will cause an
 +error (\fICURLE_TOO_MANY_REDIRECTS\fP). This option only makes sense if the
 +\fICURLOPT_FOLLOWLOCATION(3)\fP is used at the same time.
 +
 +Setting the limit to 0 will make libcurl refuse any redirect.
 +
 +Set it to -1 for an infinite number of redirects.
 +.SH DEFAULT
 +-1, unlimited
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/";);
 +
 +  /* enable redirect following */
 +  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 +
 +  /* allow three redirects */
 +  curl_easy_setopt(curl, CURLOPT_MAXREDIRS, 3L);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with HTTP
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_FOLLOWLOCATION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_NETRC.3
index b0c681c48,000000000..67b1772bf
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_NETRC.3
+++ b/docs/libcurl/opts/GNURLOPT_NETRC.3
@@@ -1,84 -1,0 +1,84 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_NETRC 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_NETRC \- request that .netrc is used
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC, long level);
 +.SH DESCRIPTION
 +This parameter controls the preference \fIlevel\fP of libcurl between using
 +user names and passwords from your \fI~/.netrc\fP file, relative to user names
 +and passwords in the URL supplied with \fICURLOPT_URL(3)\fP. On Windows,
 +libcurl will use the file as \fI%HOME%/_netrc\fP, but you can also tell
 +libcurl a different file name to use with \fICURLOPT_NETRC_FILE(3)\fP.
 +
 +libcurl uses a user name (and supplied or prompted password) supplied with
 +\fICURLOPT_USERPWD(3)\fP or \fICURLOPT_USERNAME(3)\fP in preference to any of
 +the options controlled by this parameter.
 +
 +Only machine name, user name and password are taken into account (init macros
 +and similar things aren't supported).
 +
 +libcurl does not verify that the file has the correct properties set (as the
 +standard Unix ftp client does). It should only be readable by user.
 +
 +\fIlevel\fP should be set to one of the values described below.
 +
 +.IP CURL_NETRC_OPTIONAL
 +The use of the \fI~/.netrc\fP file is optional, and information in the URL is
 +to be preferred.  The file will be scanned for the host and user name (to find
 +the password only) or for the host only, to find the first user name and
 +password after that \fImachine\fP, which ever information is not specified.
 +
 +Undefined values of the option will have this effect.
 +.IP CURL_NETRC_IGNORED
 +The library will ignore the \fI~/.netrc\fP file.
 +
 +This is the default.
 +.IP CURL_NETRC_REQUIRED
 +The use of the \fI~/.netrc\fP file is required, and information in the URL is
 +to be ignored.  The file will be scanned for the host and user name (to find
 +the password only) or for the host only, to find the first user name and
 +password after that \fImachine\fP, which ever information is not specified.
 +.SH DEFAULT
 +CURL_NETRC_IGNORED
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_NETRC, CURL_NETRC_OPTIONAL);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_USERPWD "(3), " CURLOPT_USERNAME "(3), " CURLOPT_NETRC_FILE "(3), 
"
diff --cc docs/libcurl/opts/GNURLOPT_NOSIGNAL.3
index f5f71aa0f,000000000..8a38d8f34
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_NOSIGNAL.3
+++ b/docs/libcurl/opts/GNURLOPT_NOSIGNAL.3
@@@ -1,55 -1,0 +1,55 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_NOSIGNAL 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_NOSIGNAL \- skip all signal handling
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOSIGNAL, long onoff);
 +.SH DESCRIPTION
 +If \fIonoff\fP is 1, libcurl will not use any functions that install signal
 +handlers or any functions that cause signals to be sent to the process. This
 +option is here to allow multi-threaded unix applications to still set/use all
 +timeout options etc, without risking getting signals.
 +
 +If this option is set and libcurl has been built with the standard name
 +resolver, timeouts will not occur while the name resolve takes place.
 +Consider building libcurl with the c-ares or threaded resolver backends to
 +enable asynchronous DNS lookups, to enable timeouts for name resolves without
 +the use of signals.
 +
 +Setting \fICURLOPT_NOSIGNAL(3)\fP to 1 makes libcurl NOT ask the system to
 +ignore SIGPIPE signals, which otherwise are sent by the system when trying to
 +send data to a socket which is closed in the other end. libcurl makes an
 +effort to never cause such SIGPIPEs to trigger, but some operating systems
 +have no way to avoid them and even on those that have there are some corner
 +cases when they may still happen, contrary to our desire. In addition, using
 +\fICURLAUTH_NTLM_WB\fP authentication could cause a SIGCHLD signal to be
 +raised.
 +.SH DEFAULT
 +0
 +.SH AVAILABILITY
 +Added in 7.10
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
diff --cc docs/libcurl/opts/GNURLOPT_PASSWORD.3
index 397af1b2e,000000000..01b7cf7c6
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PASSWORD.3
+++ b/docs/libcurl/opts/GNURLOPT_PASSWORD.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PASSWORD 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PASSWORD \- password to use in authentication
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PASSWORD, char *pwd);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should be pointing to the zero terminated
 +password to use for the transfer.
 +
 +The \fICURLOPT_PASSWORD(3)\fP option should be used in conjunction with the
 +\fICURLOPT_USERNAME(3)\fP option.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +blank
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/foo.bin";);
 +
 +  curl_easy_setopt(curl, CURLOPT_PASSWORD, "qwerty");
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.1
 +.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 CURLOPT_USERPWD "(3), " CURLOPT_USERNAME "(3), "
 +.BR CURLOPT_HTTPAUTH "(3), " CURLOPT_PROXYAUTH "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_PATH_AS_IS.3
index 4b62e0b1a,000000000..eb03d0ed1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PATH_AS_IS.3
+++ b/docs/libcurl/opts/GNURLOPT_PATH_AS_IS.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PATH_AS_IS 3 "17 Jun 2014" "libcurl 7.42.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PATH_AS_IS \- do not handle dot dot sequences
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PATH_AS_IS, long leaveit);
 +.SH DESCRIPTION
 +Set the long \fIleaveit\fP to 1, to explicitly tell libcurl to not alter the
 +given path before passing it on to the server.
 +
 +This instructs libcurl to NOT squash sequences of "/../" or "/./" that may
 +exist in the URL's path part and that is supposed to be removed according to
 +RFC 3986 section 5.2.4.
 +
 +Some server implementations are known to (erroneously) require the dot dot
 +sequences to remain in the path and some clients want to pass these on in
 +order to try out server implementations.
 +
 +By default libcurl will merge such sequences before using the path.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, 
"http://example.com/../../etc/password";);
 +
 +  curl_easy_setopt(curl, CURLOPT_PATH_AS_IS, 1L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +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_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
 +.BR CURLOPT_URL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_POSTFIELDS.3
index 80b746320,000000000..88b16a302
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_POSTFIELDS.3
+++ b/docs/libcurl/opts/GNURLOPT_POSTFIELDS.3
@@@ -1,88 -1,0 +1,88 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_POSTFIELDS 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_POSTFIELDS \- specify data to POST to server
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDS, char *postdata);
 +.SH DESCRIPTION
 +Pass a char * as parameter, pointing to the full data to send in an HTTP POST
 +operation. You must make sure that the data is formatted the way you want the
 +server to receive it. libcurl will not convert or encode it for you in any
 +way. For example, the web server may assume that this data is url-encoded.
 +
 +The data pointed to is NOT copied by the library: as a consequence, it must be
 +preserved by the calling application until the associated transfer finishes.
 +This behaviour can be changed (so libcurl does copy the data) by setting the
 +\fICURLOPT_COPYPOSTFIELDS(3)\fP option.
 +
 +This POST is a normal application/x-www-form-urlencoded kind (and libcurl will
 +set that Content-Type by default when this option is used), which is commonly
 +used by HTML forms. Change Content-Type with \fICURLOPT_HTTPHEADER(3)\fP.
 +
 +You can use \fIcurl_easy_escape(3)\fP to url-encode your data, if necessary. 
It
 +returns a pointer to an encoded string that can be passed as \fIpostdata\fP.
 +
 +Using \fICURLOPT_POSTFIELDS(3)\fP implies setting \fICURLOPT_POST(3)\fP to 1.
 +
 +If \fICURLOPT_POSTFIELDS(3)\fP is explicitly set to NULL then libcurl will get
 +the POST data from the read callback. If you want to send a zero-byte POST set
 +\fICURLOPT_POSTFIELDS(3)\fP to an empty string, or set \fICURLOPT_POST(3)\fP 
to
 +1 and \fICURLOPT_POSTFIELDSIZE(3)\fP to 0.
 +
 +Using POST with HTTP 1.1 implies the use of a "Expect: 100-continue" header,
 +and libcurl will add that header automatically if the POST is either known to
 +be larger than 1MB or if the expected size is unknown. You can disable this
 +header with \fICURLOPT_HTTPHEADER(3)\fP as usual.
 +
 +To make multipart/formdata posts (aka RFC2388-posts), check out the
 +\fICURLOPT_HTTPPOST(3)\fP option combined with \fIcurl_formadd(3)\fP.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  const char *data = "data to send";
 +
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* size of the POST data */
 +  curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, 12L);
 +
 +  /* pass in a pointer to the data - libcurl will not copy */
 +  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_POSTFIELDSIZE "(3), " CURLOPT_READFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_POSTFIELDSIZE.3
index df30744f7,000000000..c3603e00e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_POSTFIELDSIZE.3
+++ b/docs/libcurl/opts/GNURLOPT_POSTFIELDSIZE.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_POSTFIELDSIZE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_POSTFIELDSIZE \- size of POST data pointed to
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE, long size);
 +.SH DESCRIPTION
 +If you want to post data to the server without having libcurl do a strlen() to
 +measure the data size, this option must be used. When this option is used you
 +can post fully binary data, which otherwise is likely to fail. If this size is
 +set to -1, the library will use strlen() to get the size.
 +
 +If you post more than 2GB, use \fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP.
 +.SH DEFAULT
 +-1
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  const char *data = "data to send";
 +
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* size of the POST data */
 +  curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long) strlen(data));
 +
 +  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with HTTP
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_POSTFIELDS "(3), " CURLOPT_POSTFIELDSIZE_LARGE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_POSTFIELDSIZE_LARGE.3
index f8f025c8f,000000000..8d4750a20
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_POSTFIELDSIZE_LARGE.3
+++ b/docs/libcurl/opts/GNURLOPT_POSTFIELDSIZE_LARGE.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_POSTFIELDSIZE_LARGE 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_POSTFIELDSIZE_LARGE \- size of POST data pointed to
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTFIELDSIZE_LARGE,
 +                          curl_off_t size);
 +.SH DESCRIPTION
 +If you want to post data to the server without having libcurl do a strlen() to
 +measure the data size, this option must be used. When this option is used you
 +can post fully binary data, which otherwise is likely to fail. If this size is
 +set to -1, the library will use strlen() to get the size.
 +.SH DEFAULT
 +-1
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  const char *data = large_chunk;
 +  curl_off_t length_of_data; /* set somehow */
 +
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* size of the POST data */
 +  curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE_LARGE, length_of_data);
 +
 +  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, data);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with HTTP
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_POSTFIELDS "(3), " CURLOPT_COPYPOSTFIELDS "(3), "
 +.BR CURLOPT_POSTFIELDSIZE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_POSTQUOTE.3
index f4ebeb00a,000000000..1e82453be
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_POSTQUOTE.3
+++ b/docs/libcurl/opts/GNURLOPT_POSTQUOTE.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_POSTQUOTE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_POSTQUOTE \- (S)FTP commands to run after the transfer
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTQUOTE, struct curl_slist 
*cmds);
 +.SH DESCRIPTION
 +Pass a pointer to a linked list of FTP or SFTP commands to pass to the server
 +after your FTP transfer request. The commands will only be run if no error
 +occurred. The linked list should be a fully valid list of struct curl_slist
 +structs properly filled in as described for \fICURLOPT_QUOTE(3)\fP.
 +
 +Disable this operation again by setting a NULL to this option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +SFTP and FTP
 +.SH EXAMPLE
 +.nf
 +struct curl_slist *cmdlist = NULL;
 +cmdlist = curl_slist_append(cmdlist, "RNFR source-name");
 +cmdlist = curl_slist_append(cmdlist, "RNTO new-name");
 +
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin";);
 +
 +  /* pass in the FTP commands to run after the transfer */
 +  curl_easy_setopt(curl, CURLOPT_POSTQUOTE, cmdlist);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +If support for the protocols are built-in.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_QUOTE "(3), " CURLOPT_PREQUOTE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_POSTREDIR.3
index f0215bcbb,000000000..1729c843f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_POSTREDIR.3
+++ b/docs/libcurl/opts/GNURLOPT_POSTREDIR.3
@@@ -1,73 -1,0 +1,73 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_POSTREDIR 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_POSTREDIR \- how to act on an HTTP POST redirect
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POSTREDIR,
 +                          long bitmask);
 +.SH DESCRIPTION
 +Pass a bitmask to control how libcurl acts on redirects after POSTs that get a
 +301, 302 or 303 response back.  A parameter with bit 0 set (value
 +\fBCURL_REDIR_POST_301\fP) tells the library to respect RFC 7231 (section
 +6.4.2 to 6.4.4) and not convert POST requests into GET requests when following
 +a 301 redirection.  Setting bit 1 (value \fBCURL_REDIR_POST_302\fP) makes
 +libcurl maintain the request method after a 302 redirect whilst setting bit 2
 +(value \fBCURL_REDIR_POST_303\fP) makes libcurl maintain the request method
 +after a 303 redirect. The value \fBCURL_REDIR_POST_ALL\fP is a convenience
 +define that sets all three bits.
 +
 +The non-RFC behaviour is ubiquitous in web browsers, so the library does the
 +conversion by default to maintain consistency. However, a server may require a
 +POST to remain a POST after such a redirection. This option is meaningful only
 +when setting \fICURLOPT_FOLLOWLOCATION(3)\fP.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* a silly POST example */
 +  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data=true");
 +
 +  /* example.com is redirected, so we tell libcurl to send POST on 301, 302 
and
 +     303 HTTP response codes */
 +  curl_easy_setopt(curl, CURLOPT_POSTREDIR, CURL_REDIR_POST_ALL);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.17.1. This option was known as CURLOPT_POST301 up to 7.19.0 as it
 +only supported the 301 then. CURL_REDIR_POST_303 was added in 7.26.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_FOLLOWLOCATION "(3), " CURLOPT_POSTFIELDS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PREQUOTE.3
index 10bb993a6,000000000..16d3cc0b6
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PREQUOTE.3
+++ b/docs/libcurl/opts/GNURLOPT_PREQUOTE.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PREQUOTE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PREQUOTE \- commands to run before an FTP transfer
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PREQUOTE,
 +                          struct curl_slist *cmds);
 +.SH DESCRIPTION
 +Pass a pointer to a linked list of FTP commands to pass to the server after
 +the transfer type is set. The linked list should be a fully valid list of
 +struct curl_slist structs properly filled in as described for
 +\fICURLOPT_QUOTE(3)\fP. Disable this operation again by setting a NULL to this
 +option.
 +
 +While \fICURLOPT_QUOTE(3)\fP and \fICURLOPT_POSTQUOTE(3)\fP work for SFTP,
 +this option does not.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +struct curl_slist *cmdlist = NULL;
 +cmdlist = curl_slist_append(cmdlist, "SYST");
 +
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin";);
 +
 +  /* pass in the FTP commands to run */
 +  curl_easy_setopt(curl, CURLOPT_PREQUOTE, cmdlist);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with the protocol support
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_QUOTE "(3), " CURLOPT_POSTQUOTE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PRE_PROXY.3
index 9d53222d5,000000000..f1640e444
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PRE_PROXY.3
+++ b/docs/libcurl/opts/GNURLOPT_PRE_PROXY.3
@@@ -1,79 -1,0 +1,79 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PRE_PROXY 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PRE_PROXY \- set pre-proxy to use
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRE_PROXY, char *preproxy);
 +.SH DESCRIPTION
 +Set the \fIpreproxy\fP to use for the upcoming request. The parameter
 +should be a char * to a zero terminated string holding the host name or dotted
 +numerical IP address. A numerical IPv6 address must be written within
 +[brackets].
 +
 +To specify port number in this string, append :[port] to the end of the host
 +name. The proxy's port number may optionally be specified with the separate
 +option \fICURLOPT_PROXYPORT(3)\fP. If not specified, libcurl will default to
 +using port 1080 for proxies.
 +
 +A pre proxy is a SOCKS proxy that curl connects to before it connects to the
 +HTTP(S) proxy specified in the \fICURLOPT_PROXY\fP option. The pre proxy can
 +only be a SOCKS proxy.
 +
 +The pre proxy string should be prefixed with [scheme]:// to specify which kind
 +of socks is used. Use socks4://, socks4a://, socks5:// or socks5h:// (the last
 +one to enable socks5 and asking the proxy to do the resolving, also known as
 +\fICURLPROXY_SOCKS5_HOSTNAME\fP type) to request the specific SOCKS version to
 +be used. Otherwise SOCKS4 is used as default.
 +
 +Setting the pre proxy string to "" (an empty string) will explicitly disable
 +the use of a pre proxy.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +Default is NULL, meaning no pre proxy is used.
 +
 +When you set a host name to use, do not assume that there's any particular
 +single port number used widely for proxies. Specify it!
 +.SH PROTOCOLS
 +All except file://. Note that some protocols don't do very well over proxy.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/file.txt";);
 +  curl_easy_setopt(curl, CURLOPT_PREPROXY, "socks4://socks-proxy:1080");
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80";);
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if proxies are supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY "(3), " CURLOPT_HTTPPROXYTUNNEL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PRIVATE.3
index 1269f8e3e,000000000..7074cb8a1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PRIVATE.3
+++ b/docs/libcurl/opts/GNURLOPT_PRIVATE.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PRIVATE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PRIVATE \- store a private pointer
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PRIVATE, void *pointer);
 +.SH DESCRIPTION
 +Pass a void * as parameter, pointing to data that should be associated with
 +this curl handle.  The pointer can subsequently be retrieved using
 +\fIcurl_easy_getinfo(3)\fP with the CURLINFO_PRIVATE option. libcurl itself
 +never does anything with this data.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +struct private secrets;
 +if(curl) {
 +  struct private *extracted;
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* store a pointer to our private struct */
 +  curl_easy_setopt(curl, CURLOPT_PRIVATE, &secrets);
 +
 +  curl_easy_perform(curl);
 +
 +  /* we can extract the private pointer again too */
 +  curl_easy_getinfo(curl, CURLINFO_PRIVATE, &extracted);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.10.3
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_VERBOSE "(3), " CURLOPT_STDERR "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROGRESSDATA.3
index c9e36ef3d,000000000..8156eaa38
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROGRESSDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_PROGRESSDATA.3
@@@ -1,44 -1,0 +1,44 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROGRESSDATA 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROGRESSDATA \- custom pointer passed to the progress callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROGRESSDATA, void *pointer);
 +.SH DESCRIPTION
 +Pass a \fIpointer\fP that will be untouched by libcurl and passed as the first
 +argument in the progress callback set with \fICURLOPT_PROGRESSFUNCTION(3)\fP.
 +.SH DEFAULT
 +The default value of this parameter is NULL.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +https://curl.haxx.se/libcurl/c/progressfunc.html
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROGRESSFUNCTION "(3), " CURLOPT_XFERINFOFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROGRESSFUNCTION.3
index 47ca33b27,000000000..bfa566ec6
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROGRESSFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_PROGRESSFUNCTION.3
@@@ -1,87 -1,0 +1,87 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROGRESSFUNCTION 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROGRESSFUNCTION \- callback to progress meter function
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +int progress_callback(void *clientp,
 +                      double dltotal,
 +                      double dlnow,
 +                      double ultotal,
 +                      double ulnow);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROGRESSFUNCTION, 
progress_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +We encourage users to use the newer \fICURLOPT_XFERINFOFUNCTION(3)\fP instead,
 +if you can.
 +
 +This function gets called by libcurl instead of its internal equivalent with a
 +frequent interval. While data is being transferred it will be called very
 +frequently, and during slow periods like when nothing is being transferred it
 +can slow down to about one call per second.
 +
 +\fIclientp\fP is the pointer set with \fICURLOPT_PROGRESSDATA(3)\fP, it is not
 +used by libcurl but is only passed along from the application to the callback.
 +
 +The callback gets told how much data libcurl will transfer and has
 +transferred, in number of bytes. \fIdltotal\fP is the total number of bytes
 +libcurl expects to download in this transfer. \fIdlnow\fP is the number of
 +bytes downloaded so far. \fIultotal\fP is the total number of bytes libcurl
 +expects to upload in this transfer. \fIulnow\fP is the number of bytes
 +uploaded so far.
 +
 +Unknown/unused argument values passed to the callback will be set to zero
 +(like if you only download data, the upload size will remain 0). Many times
 +the callback will be called one or more times first, before it knows the data
 +sizes so a program must be made to handle that.
 +
 +If your callback function returns CURL_PROGRESSFUNC_CONTINUE it will cause
 +libcurl to continue executing the default progress function.
 +
 +Returning any other non-zero value from this callback will cause libcurl to
 +abort the transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP.
 +
 +If you transfer data with the multi interface, this function will not be
 +called during periods of idleness unless you call the appropriate libcurl
 +function that performs transfers.
 +
 +\fICURLOPT_NOPROGRESS(3)\fP must be set to 0 to make this function actually
 +get called.
 +.SH DEFAULT
 +By default, libcurl has an internal progress meter. That's rarely wanted by
 +users.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +https://curl.haxx.se/libcurl/c/progressfunc.html
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK.
 +.SH "SEE ALSO"
 +.BR CURLOPT_VERBOSE "(3), " CURLOPT_NOPROGRESS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROTOCOLS.3
index 5f9ea295d,000000000..fe540720f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROTOCOLS.3
+++ b/docs/libcurl/opts/GNURLOPT_PROTOCOLS.3
@@@ -1,93 -1,0 +1,93 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROTOCOLS 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROTOCOLS \- set allowed protocols
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROTOCOLS, long bitmask);
 +.SH DESCRIPTION
 +Pass a long that holds a bitmask of CURLPROTO_* defines. If used, this bitmask
 +limits what protocols libcurl may use in the transfer. This allows you to have
 +a libcurl built to support a wide range of protocols but still limit specific
 +transfers to only be allowed to use a subset of them. By default libcurl will
 +accept all protocols it supports (\fICURLPROTO_ALL\fP). See also
 +\fICURLOPT_REDIR_PROTOCOLS(3)\fP.
 +
 +These are the available protocol defines:
 +.nf
 +CURLPROTO_DICT
 +CURLPROTO_FILE
 +CURLPROTO_FTP
 +CURLPROTO_FTPS
 +CURLPROTO_GOPHER
 +CURLPROTO_HTTP
 +CURLPROTO_HTTPS
 +CURLPROTO_IMAP
 +CURLPROTO_IMAPS
 +CURLPROTO_LDAP
 +CURLPROTO_LDAPS
 +CURLPROTO_POP3
 +CURLPROTO_POP3S
 +CURLPROTO_RTMP
 +CURLPROTO_RTMPE
 +CURLPROTO_RTMPS
 +CURLPROTO_RTMPT
 +CURLPROTO_RTMPTE
 +CURLPROTO_RTMPTS
 +CURLPROTO_RTSP
 +CURLPROTO_SCP
 +CURLPROTO_SFTP
 +CURLPROTO_SMB
 +CURLPROTO_SMBS
 +CURLPROTO_SMTP
 +CURLPROTO_SMTPS
 +CURLPROTO_TELNET
 +CURLPROTO_TFTP
 +.fi
 +.SH DEFAULT
 +All protocols built-in
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  /* pass in the URL from an external source */
 +  curl_easy_setopt(curl, CURLOPT_URL, argv[1]);
 +
 +  /* only allow HTTP, TFTP and SFTP */
 +  curl_easy_setopt(curl, CURLOPT_PROTOCOLS,
 +                   CURLPROTO_HTTP | CURLPROTO_TFTP | CURLPROTO_SFTP);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.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 CURLOPT_REDIR_PROTOCOLS "(3), " CURLOPT_URL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_CAINFO.3
index b365cf471,000000000..bcff39f75
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_CAINFO.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_CAINFO.3
@@@ -1,83 -1,0 +1,83 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROXY_CAINFO 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXY_CAINFO \- path to proxy Certificate Authority (CA) bundle
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAINFO, char *path);
 +.SH DESCRIPTION
 +This option is for connecting to an HTTPS proxy, not an HTTPS server.
 +
 +Pass a char * to a zero terminated string naming a file holding one or more
 +certificates to verify the HTTPS proxy with.
 +
 +If \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP is zero and you avoid verifying the
 +server's certificate, \fICURLOPT_PROXY_CAINFO(3)\fP need not even indicate an
 +accessible file.
 +
 +This option is by default set to the system path where libcurl's cacert bundle
 +is assumed to be stored, as established at build time.
 +
 +If curl is built against the NSS SSL library, the NSS PEM PKCS#11 module
 +(libnsspem.so) needs to be available for this option to work properly.
 +
 +(iOS and macOS only) If curl is built against Secure Transport, then this
 +option is supported for backward compatibility with other SSL engines, but it
 +should not be set. If the option is not set, then curl will use the
 +certificates in the system and user Keychain to verify the peer, which is the
 +preferred method of verifying the peer's certificate chain.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +Built-in system specific
 +.SH PROTOCOLS
 +Used with HTTPS proxy
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* using an HTTPS proxy */
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_CAINFO, "/etc/certs/cabundle.pem");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +
 +For TLS backends that don't support certificate files, the
 +\fICURLOPT_PROXY_CAINFO(3)\fP option is ignored. Refer to
 +https://curl.haxx.se/docs/ssl-compared.html
 +.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 CURLOPT_PROXY_CAPATH "(3), "
 +.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_CAPATH "(3), "
 +.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_CRLFILE.3
index 064d6d8e5,000000000..68451777b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_CRLFILE.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_CRLFILE.3
@@@ -1,75 -1,0 +1,75 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROXY_CRLFILE 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXY_CRLFILE \- specify a proxy Certificate Revocation List file
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CRLFILE, char *file);
 +.SH DESCRIPTION
 +This option is for connecting to an HTTPS proxy, not an HTTPS server.
 +
 +Pass a char * to a zero terminated string naming a \fIfile\fP with the
 +concatenation of CRL (in PEM format) to use in the certificate validation that
 +occurs during the SSL exchange.
 +
 +When curl is built to use NSS or GnuTLS, there is no way to influence the use
 +of CRL passed to help in the verification process. When libcurl is built with
 +OpenSSL support, X509_V_FLAG_CRL_CHECK and X509_V_FLAG_CRL_CHECK_ALL are both
 +set, requiring CRL check against all the elements of the certificate chain if
 +a CRL file is passed.
 +
 +This option makes sense only when used in combination with the
 +\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP option.
 +
 +A specific error code (\fICURLE_SSL_CRL_BADFILE\fP) is defined with the
 +option. It is returned when the SSL exchange fails because the CRL file cannot
 +be loaded.  A failure in certificate verification due to a revocation
 +information found in the CRL does not trigger this specific error.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +Used with HTTPS proxy.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:80";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_CRLFILE, "/etc/certs/crl.pem");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +.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 CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_KEYPASSWD.3
index d72dae1fa,000000000..b5134f5b4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_KEYPASSWD.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_KEYPASSWD.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROXY_KEYPASSWD 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_KEYPASSWD \- set passphrase to proxy private key
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_KEYPASSWD, char *pwd);
 +.SH DESCRIPTION
 +This option is for connecting to an HTTPS proxy, not an HTTPS server.
 +
 +Pass a pointer to a zero terminated string as parameter. It will be used as
 +the password required to use the \fICURLOPT_PROXY_SSLKEY(3)\fP private key.
 +You never needed a pass phrase to load a certificate but you need one to load
 +your private key.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +Used with HTTPS proxy
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "superman");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +.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_PROXY_SSLKEY "(3), " CURLOPT_SSH_PRIVATE_KEYFILE "(3), "
 +.BR CURLOPT_SSLKEY "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSLCERT.3
index 305f8b2c0,000000000..38f558349
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSLCERT.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSLCERT.3
@@@ -1,72 -1,0 +1,72 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROXY_SSLCERT 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXY_SSLCERT \- set SSL proxy client certificate
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERT, char *cert);
 +.SH DESCRIPTION
 +This option is for connecting to an HTTPS proxy, not an HTTPS server.
 +
 +Pass a pointer to a zero terminated string as parameter. The string should be
 +the file name of your client certificate used to connect to the HTTPS proxy.
 +The default format is "P12" on Secure Transport and "PEM" on other engines,
 +and can be changed with \fICURLOPT_PROXY_SSLCERTTYPE(3)\fP.
 +
 +With NSS or Secure Transport, this can also be the nickname of the certificate
 +you wish to authenticate with as it is named in the security database. If you
 +want to use a file from the current directory, please precede it with "./"
 +prefix, in order to avoid confusion with a nickname.
 +
 +When using a client certificate, you most likely also need to provide a
 +private key with \fICURLOPT_PROXY_SSLKEY(3)\fP.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +Used with HTTPS proxy
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +.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_PROXY_SSLCERTTYPE "(3), " CURLOPT_PROXY_SSLKEY "(3), "
 +.BR CURLOPT_SSLCERT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSLCERTTYPE.3
index a0ff85e3f,000000000..6c6cb5e38
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSLCERTTYPE.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSLCERTTYPE.3
@@@ -1,67 -1,0 +1,67 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROXY_SSLCERTTYPE 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_SSLCERTTYPE \- specify type of the proxy client SSL certificate
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERTTYPE, char 
*type);
 +.SH DESCRIPTION
 +Pass a pointer to a zero terminated string as parameter. The string should be
 +the format of your client certificate used when connecting to an HTTPS proxy.
 +
 +Supported formats are "PEM" and "DER", except with Secure Transport. OpenSSL
 +(versions 0.9.3 and later) and Secure Transport (on iOS 5 or later, or OS X
 +10.7 or later) also support "P12" for PKCS#12-encoded files.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +"PEM"
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERTTYPE, "PEM");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +
 +If built TLS enabled.
 +.SH RETURN VALUE
 +Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY_SSLCERT "(3), " CURLOPT_PROXY_SSLKEY "(3), "
 +.BR CURLOPT_SSLCERTTYPE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSLKEYTYPE.3
index 1c6ac5149,000000000..7826e1d44
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSLKEYTYPE.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSLKEYTYPE.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROXY_SSLKEYTYPE 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_SSLKEYTYPE \- set type of the proxy private key file
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEYTYPE, char *type);
 +.SH DESCRIPTION
 +This option is for connecting to an HTTPS proxy, not an HTTPS server.
 +
 +Pass a pointer to a zero terminated string as parameter. The string should be
 +the format of your private key. Supported formats are "PEM", "DER" and "ENG".
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH PROTOCOLS
 +Used with HTTPS proxy
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT, "client.pem");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEYTYPE, "PEM");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY_SSLKEY "(3), " CURLOPT_PROXY_SSLCERT "(3), "
 +.BR CURLOPT_SSLKEYTYPE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSL_CIPHER_LIST.3
index cfe20446e,000000000..59440c8c4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSL_CIPHER_LIST.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSL_CIPHER_LIST.3
@@@ -1,81 -1,0 +1,81 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROXY_SSL_CIPHER_LIST 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_SSL_CIPHER_LIST \- specify ciphers to use for proxy TLS
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_CIPHER_LIST, char 
*list);
 +.SH DESCRIPTION
 +Pass a char *, pointing to a zero terminated string holding the list of
 +ciphers to use for the connection to the HTTPS proxy. The list must be
 +syntactically correct, it consists of one or more cipher strings separated by
 +colons. Commas or spaces are also acceptable separators but colons are
 +normally used, \&!, \&- and \&+ can be used as operators.
 +
 +For OpenSSL and GnuTLS valid examples of cipher lists include 'RC4-SHA',
 +\'SHA1+DES\', 'TLSv1' and 'DEFAULT'. The default list is normally set when you
 +compile OpenSSL.
 +
 +You'll find more details about cipher lists on this URL:
 +
 + https://www.openssl.org/docs/apps/ciphers.html
 +
 +For NSS, valid examples of cipher lists include 'rsa_rc4_128_md5',
 +\'rsa_aes_128_sha\', etc. With NSS you don't add/remove ciphers. If one uses
 +this option then all known ciphers are disabled and only those passed in are
 +enabled.
 +
 +You'll find more details about the NSS cipher lists on this URL:
 +
 + 
http://git.fedorahosted.org/cgit/mod_nss.git/plain/docs/mod_nss.html#Directives
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL, use internal default
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSL_CIPHER_LIST, "TLSv1");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +
 +If built TLS enabled.
 +.SH RETURN VALUE
 +Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY_TLS13_CIPHERS "(3), " CURLOPT_PROXY_SSLVERSION "(3), "
 +.BR CURLOPT_SSL_CIPHER_LIST "(3), " CURLOPT_TLS13_CIPHERS "(3), "
 +.BR CURLOPT_SSLVERSION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSL_OPTIONS.3
index 9b6e3b09e,000000000..46e926c97
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSL_OPTIONS.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSL_OPTIONS.3
@@@ -1,75 -1,0 +1,82 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROXY_SSL_OPTIONS 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_SSL_OPTIONS \- set proxy SSL behavior options
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_OPTIONS, long 
bitmask);
 +.SH DESCRIPTION
 +Pass a long with a bitmask to tell libcurl about specific SSL
 +behaviors. Available bits:
 +.IP CURLSSLOPT_ALLOW_BEAST
 +Tells libcurl to not attempt to use any workarounds for a security flaw in the
 +SSL3 and TLS1.0 protocols.  If this option isn't used or this bit is set to 0,
 +the SSL layer libcurl uses may use a work-around for this flaw although it
 +might cause interoperability problems with some (older) SSL
 +implementations. WARNING: avoiding this work-around lessens the security, and
 +by setting this option to 1 you ask for exactly that.  This option is only
 +supported for DarwinSSL, NSS and OpenSSL.
 +.IP CURLSSLOPT_NO_REVOKE
 +Tells libcurl to disable certificate revocation checks for those SSL backends
 +where such behavior is present. This option is only supported for Schannel
 +(the native Windows SSL library), with an exception in the case of Windows'
 +Untrusted Publishers blacklist which it seems can't be bypassed. (Added in
 +7.44.0)
 +.IP CURLSSLOPT_NO_PARTIALCHAIN
 +Tells libcurl to not accept "partial" certificate chains, which it otherwise
 +does by default. This option is only supported for OpenSSL and will fail the
 +certificate verification if the chain ends with an intermediate certificate
 +and not with a root cert. (Added in 7.68.0)
++
++.IP CURLSSLOPT_REVOKE_BEST_EFFORT
++Tells libcurl to ignore certificate revocation checks in case of missing or
++offline distribution points for those SSL backends where such behavior is
++present. This option is only supported for Schannel (the native Windows SSL
++library). If combined with \fICURLSSLOPT_NO_REVOKE\fP, the latter takes
++precedence. (Added in 7.70.0)
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +All TLS-based protocols
 +.SH AVAILABLE
 +Added in 7.52.0
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy";);
 +  /* weaken TLS only for use with silly proxies */
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSL_OPTIONS, CURLSSLOPT_ALLOW_BEAST |
 +                   CURLSSLOPT_NO_REVOKE);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY_SSLVERSION "(3), " CURLOPT_PROXY_SSL_CIPHER_LIST "(3), "
 +.BR CURLOPT_SSLVERSION "(3), " CURLOPT_SSL_CIPHER_LIST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_TRANSFER_MODE.3
index 760c39678,000000000..66fbdcc65
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_TRANSFER_MODE.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_TRANSFER_MODE.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PROXY_TRANSFER_MODE 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_TRANSFER_MODE \- append FTP transfer mode to URL for proxy
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TRANSFER_MODE, long 
enabled);
 +.SH DESCRIPTION
 +Pass a long. If the value is set to 1 (one), it tells libcurl to set the
 +transfer mode (binary or ASCII) for FTP transfers done via an HTTP proxy, by
 +appending ;type=a or ;type=i to the URL. Without this setting, or it being set
 +to 0 (zero, the default), \fICURLOPT_TRANSFERTEXT(3)\fP has no effect when
 +doing FTP via a proxy. Beware that not all proxies support this feature.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +FTP over proxy
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, 
"ftp://example.com/old-server/file.txt";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:80";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_TRANSFER_MODE, 1L);
 +  curl_easy_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.18.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if the
 +enabled value is not supported.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY "(3), " CURLOPT_HTTPPROXYTUNNEL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PUT.3
index 76dd9bf4f,000000000..54cf0400c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PUT.3
+++ b/docs/libcurl/opts/GNURLOPT_PUT.3
@@@ -1,46 -1,0 +1,46 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_PUT 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PUT \- make an HTTP PUT request
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PUT, long put);
 +.SH DESCRIPTION
 +A parameter set to 1 tells the library to use HTTP PUT to transfer data. The
 +data should be set with \fICURLOPT_READDATA(3)\fP and
 +\fICURLOPT_INFILESIZE(3)\fP.
 +
 +This option is \fBdeprecated\fP since version 7.12.1. Use
 +\fICURLOPT_UPLOAD(3)\fP!
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +HTTP
 +.SH AVAILABILITY
 +Deprecated since 7.12.1. Do not use.
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_UPLOAD "(3), " CURLOPT_HTTPGET "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_QUOTE.3
index 7740d1d6a,000000000..a429b72b0
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_QUOTE.3
+++ b/docs/libcurl/opts/GNURLOPT_QUOTE.3
@@@ -1,105 -1,0 +1,105 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_QUOTE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_QUOTE \- (S)FTP commands to run before transfer
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_QUOTE, struct curl_slist 
*cmds);
 +.SH DESCRIPTION
 +Pass a pointer to a linked list of FTP or SFTP commands to pass to the server
 +prior to your request. This will be done before any other commands are issued
 +(even before the CWD command for FTP). The linked list should be a fully valid
 +list of 'struct curl_slist' structs properly filled in with text strings. Use
 +\fIcurl_slist_append(3)\fP to append strings (commands) to the list, and clear
 +the entire list afterwards with \fIcurl_slist_free_all(3)\fP. Disable this
 +operation again by setting a NULL to this option. When speaking to an FTP
 +server, prefix the command with an asterisk (*) to make libcurl continue even
 +if the command fails as by default libcurl will stop at first failure.
 +
 +The set of valid FTP commands depends on the server (see RFC959 for a list of
 +mandatory commands).
 +
 +The valid SFTP commands are:
 +.RS
 +.IP "chgrp group file"
 +The chgrp command sets the group ID of the file named by the file operand to
 +the group ID specified by the group operand. The group operand is a decimal
 +integer group ID.
 +.IP "chmod mode file"
 +The chmod command modifies the file mode bits of the specified file. The
 +mode operand is an octal integer mode number.
 +.IP "chown user file"
 +The chown command sets the owner of the file named by the file operand to the
 +user ID specified by the user operand. The user operand is a decimal
 +integer user ID.
 +.IP "ln source_file target_file"
 +The ln and symlink commands create a symbolic link at the target_file location
 +pointing to the source_file location.
 +.IP "mkdir directory_name"
 +The mkdir command creates the directory named by the directory_name operand.
 +.IP "pwd"
 +The pwd command returns the absolute pathname of the current working 
directory.
 +.IP "rename source target"
 +The rename command renames the file or directory named by the source
 +operand to the destination path named by the target operand.
 +.IP "rm file"
 +The rm command removes the file specified by the file operand.
 +.IP "rmdir directory"
 +The rmdir command removes the directory entry specified by the directory
 +operand, provided it is empty.
 +.IP "statvfs file"
 +The statvfs command returns statistics on the file system in which specified
 +file resides. (Added in 7.49.0)
 +.IP "symlink source_file target_file"
 +See ln.
 +.RE
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +SFTP and FTP
 +.SH EXAMPLE
 +.nf
 +struct curl_slist *cmdlist = NULL;
 +cmdlist = curl_slist_append(cmdlist, "RNFR source-name");
 +cmdlist = curl_slist_append(cmdlist, "RNTO new-name");
 +
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin";);
 +
 +  /* pass in the FTP commands to run before the transfer */
 +  curl_easy_setopt(curl, CURLOPT_QUOTE, cmdlist);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +SFTP support added in 7.16.3. *-prefix for SFTP added in 7.24.0
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_POSTQUOTE "(3), " CURLOPT_PREQUOTE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_READDATA.3
index 167fca583,000000000..9b532248d
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_READDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_READDATA.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_READDATA 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_READDATA \- custom pointer passed to the read callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_READDATA, void *pointer);
 +.SH DESCRIPTION
 +Data \fIpointer\fP to pass to the file read function. If you use the
 +\fICURLOPT_READFUNCTION(3)\fP option, this is the pointer you'll get as
 +input in the 4th argument to the callback.
 +
 +If you don't specify a read callback but instead rely on the default internal
 +read function, this data must be a valid readable FILE * (cast to 'void *').
 +
 +If you're using libcurl as a win32 DLL, you \fBMUST\fP use a
 +\fICURLOPT_READFUNCTION(3)\fP if you set this option or you will experience
 +crashes.
 +.SH DEFAULT
 +By default, this is a FILE * to stdin.
 +.SH PROTOCOLS
 +This is used for all protocols when sending data.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +struct MyData this;
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* pass pointer that gets passed in to the
 +     CURLOPT_READFUNCTION callback */
 +  curl_easy_setopt(curl, CURLOPT_READDATA, &this);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option was once known by the older name CURLOPT_INFILE, the name
 +\fICURLOPT_READDATA(3)\fP was introduced in 7.9.7.
 +.SH RETURN VALUE
 +This will return CURLE_OK.
 +.SH "SEE ALSO"
 +.BR CURLOPT_READFUNCTION "(3), " CURLOPT_WRITEDATA "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_READFUNCTION.3
index e269b438c,000000000..ff07c5212
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_READFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_READFUNCTION.3
@@@ -1,111 -1,0 +1,111 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_READFUNCTION 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_READFUNCTION \- read callback for data uploads
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +size_t read_callback(char *buffer, size_t size, size_t nitems, void 
*userdata);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_READFUNCTION, read_callback);
 +
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, as the prototype shows above.
 +
 +This callback function gets called by libcurl as soon as it needs to read data
 +in order to send it to the peer - like if you ask it to upload or post data to
 +the server. The data area pointed at by the pointer \fIbuffer\fP should be
 +filled up with at most \fIsize\fP multiplied with \fInitems\fP number of bytes
 +by your function.
 +
 +Set the \fIuserdata\fP argument with the \fICURLOPT_READDATA(3)\fP option.
 +
 +Your function must return the actual number of bytes that it stored in the 
data
 +area pointed at by the pointer \fIbuffer\fP. Returning 0 will signal
 +end-of-file to the library and cause it to stop the current transfer.
 +
 +If you stop the current transfer by returning 0 "pre-maturely" (i.e before the
 +server expected it, like when you've said you will upload N bytes and you
 +upload less than N bytes), you may experience that the server "hangs" waiting
 +for the rest of the data that won't come.
 +
 +The read callback may return \fICURL_READFUNC_ABORT\fP to stop the current
 +operation immediately, resulting in a \fICURLE_ABORTED_BY_CALLBACK\fP error
 +code from the transfer.
 +
 +The callback can return \fICURL_READFUNC_PAUSE\fP to cause reading from this
 +connection to pause. See \fIcurl_easy_pause(3)\fP for further details.
 +
 +\fBBugs\fP: when doing TFTP uploads, you must return the exact amount of data
 +that the callback wants, or it will be considered the final packet by the
 +server end and the transfer will end there.
 +
 +If you set this callback pointer to NULL, or don't set it at all, the default
 +internal read function will be used. It is doing an fread() on the FILE *
 +userdata set with \fICURLOPT_READDATA(3)\fP.
 +.SH DEFAULT
 +The default internal read callback is fread().
 +.SH PROTOCOLS
 +This is used for all protocols when doing uploads.
 +.SH EXAMPLE
 +.nf
 +size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userdata)
 +{
 +  FILE *readhere = (FILE *)userdata;
 +  curl_off_t nread;
 +
 +  /* copy as much data as possible into the 'ptr' buffer, but no more than
 +     'size' * 'nmemb' bytes! */
 +  size_t retcode = fread(ptr, size, nmemb, readhere);
 +
 +  nread = (curl_off_t)retcode;
 +
 +  fprintf(stderr, "*** We read %" CURL_FORMAT_CURL_OFF_T
 +          " bytes from file\\n", nread);
 +  return retcode;
 +}
 +
 +void setup(char *uploadthis)
 +{
 +  FILE *file = fopen(uploadthis, "rb");
 +  CURLcode result;
 +
 +  /* set callback to use */
 +  curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
 +
 +  /* pass in suitable argument to callback */
 +  curl_easy_setopt(curl, CURLOPT_READDATA, (void *)file);
 +
 +  result = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +CURL_READFUNC_PAUSE return code was added in 7.18.0 and CURL_READFUNC_ABORT
 +was added in 7.12.1.
 +.SH RETURN VALUE
 +This will return CURLE_OK.
 +.SH "SEE ALSO"
 +.BR CURLOPT_READDATA "(3), " CURLOPT_WRITEFUNCTION "(3), "
 +.BR CURLOPT_SEEKFUNCTION "(3), " CURLOPT_UPLOAD "(3), " CURLOPT_POST "(3), "
 +.BR CURLOPT_UPLOAD_BUFFERSIZE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_REFERER.3
index 72331e56a,000000000..26ce192aa
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_REFERER.3
+++ b/docs/libcurl/opts/GNURLOPT_REFERER.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_REFERER 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_REFERER \- set the HTTP referer header
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REFERER, char *where);
 +.SH DESCRIPTION
 +Pass a pointer to a zero terminated string as parameter. It will be used to
 +set the Referer: header in the http request sent to the remote server. This
 +can be used to fool servers or scripts. You can also set any custom header
 +with \fICURLOPT_HTTPHEADER(3)\fP.
 +
 +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";);
 +
 +  /* tell it where we found the link to this place */
 +  curl_easy_setopt(curl, CURLOPT_REFERER, "http://example.com/aboutme.html";);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +If built with HTTP support
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP support is enabled, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_USERAGENT "(3), " CURLOPT_HTTPHEADER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_RESOLVE.3
index b738241b7,000000000..5a064eca4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RESOLVE.3
+++ b/docs/libcurl/opts/GNURLOPT_RESOLVE.3
@@@ -1,97 -1,0 +1,97 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_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[,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.
 +
 +If the DNS cache already have an entry for the given host+port pair, then
 +this entry will be removed and a new entry will be created. This is because
 +old entry may have have different addresses or be ordinary entries with
 +time-outs.
 +
 +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_RESUME_FROM.3
index 2c06999bf,000000000..4e3d06f91
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RESUME_FROM.3
+++ b/docs/libcurl/opts/GNURLOPT_RESUME_FROM.3
@@@ -1,72 -1,0 +1,72 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_RESUME_FROM 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_RESUME_FROM \- set a point to resume transfer from
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESUME_FROM, long from);
 +.SH DESCRIPTION
 +Pass a long as parameter. It contains the offset in number of bytes that you
 +want the transfer to start from. Set this option to 0 to make the transfer
 +start from the beginning (effectively disabling resume). For FTP, set this
 +option to -1 to make the transfer start from the end of the target file
 +(useful to continue an interrupted upload).
 +
 +When doing uploads with FTP, the resume position is where in the local/source
 +file libcurl should try to resume the upload from and it will then append the
 +source file to the remote target file.
 +
 +If you need to resume a transfer beyond the 2GB limit, use
 +\fICURLOPT_RESUME_FROM_LARGE(3)\fP instead.
 +.SH DEFAULT
 +0, not used
 +.SH PROTOCOLS
 +HTTP, FTP, SFTP, FILE
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com";);
 +
 +  /* resume upload at byte index 200 */
 +  curl_easy_setopt(curl, CURLOPT_RESUME_FROM, 200L);
 +
 +  /* ask for upload */
 +  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 +
 +  /* set total data amount to expect */
 +  curl_easy_setopt(curl, CURLOPT_INFILESIZE, size_of_file);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_RESUME_FROM_LARGE "(3), " CURLOPT_RANGE "(3), "
 +.BR CURLOPT_INFILESIZE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_RESUME_FROM_LARGE.3
index 8077637d5,000000000..1f38993f4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RESUME_FROM_LARGE.3
+++ b/docs/libcurl/opts/GNURLOPT_RESUME_FROM_LARGE.3
@@@ -1,74 -1,0 +1,74 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_RESUME_FROM_LARGE 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_RESUME_FROM_LARGE \- set a point to resume transfer from
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESUME_FROM_LARGE,
 +                          curl_off_t from);
 +.SH DESCRIPTION
 +Pass a curl_off_t as parameter. It contains the offset in number of bytes that
 +you want the transfer to start from. Set this option to 0 to make the transfer
 +start from the beginning (effectively disabling resume). For FTP, set this
 +option to -1 to make the transfer start from the end of the target file
 +(useful to continue an interrupted upload).
 +
 +When doing uploads with FTP, the resume position is where in the local/source
 +file libcurl should try to resume the upload from and it will then append the
 +source file to the remote target file.
 +.SH DEFAULT
 +0, not used
 +.SH PROTOCOLS
 +HTTP, FTP, SFTP, FILE
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_off_t resume_position = GET_IT_SOMEHOW;
 +  curl_off_t file_size = GET_IT_SOMEHOW_AS_WELL;
 +
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com";);
 +
 +  /* resuming upload at this position, possibly beyond 2GB */
 +  curl_easy_setopt(curl, CURLOPT_RESUME_FROM_LARGE, resume_position);
 +
 +  /* ask for upload */
 +  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 +
 +  /* set total data amount to expect */
 +  curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, file_size);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.11.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_RESUME_FROM "(3), " CURLOPT_RANGE "(3), "
 +.BR CURLOPT_INFILESIZE_LARGE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_RTSP_CLIENT_CSEQ.3
index 1ccc71fa9,000000000..2dd0a545a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RTSP_CLIENT_CSEQ.3
+++ b/docs/libcurl/opts/GNURLOPT_RTSP_CLIENT_CSEQ.3
@@@ -1,53 -1,0 +1,53 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_RTSP_CLIENT_CSEQ 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_RTSP_CLIENT_CSEQ \- set the RTSP client CSEQ number
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_CLIENT_CSEQ, long cseq);
 +.SH DESCRIPTION
 +Pass a long to set the CSEQ number to issue for the next RTSP
 +request. Useful if the application is resuming a previously broken
 +connection. The CSEQ will increment from this new number henceforth.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +RTSP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_RTSP_CLIENT_CSEQ, 1234L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.20.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_RTSP_SERVER_CSEQ "(3), " CURLOPT_RTSP_REQUEST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SEEKFUNCTION.3
index 85eca1d68,000000000..3d4ad7403
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SEEKFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_SEEKFUNCTION.3
@@@ -1,89 -1,0 +1,89 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_SEEKFUNCTION 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SEEKFUNCTION \- user callback for seeking in input stream
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +/* These are the return codes for the seek callbacks */
 +#define CURL_SEEKFUNC_OK       0
 +#define CURL_SEEKFUNC_FAIL     1 /* fail the entire transfer */
 +#define CURL_SEEKFUNC_CANTSEEK 2 /* tell libcurl seeking can't be done, so
 +                                    libcurl might try other means instead */
 +
 +int seek_callback(void *userp, curl_off_t offset, int origin);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKFUNCTION, seek_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This function gets called by libcurl to seek to a certain position in the
 +input stream and can be used to fast forward a file in a resumed upload
 +(instead of reading all uploaded bytes with the normal read
 +function/callback). It is also called to rewind a stream when data has already
 +been sent to the server and needs to be sent again. This may happen when doing
 +an HTTP PUT or POST with a multi-pass authentication method, or when an
 +existing HTTP connection is reused too late and the server closes the
 +connection. The function shall work like fseek(3) or lseek(3) and it gets
 +SEEK_SET, SEEK_CUR or SEEK_END as argument for \fIorigin\fP, although libcurl
 +currently only passes SEEK_SET.
 +
 +\fIuserp\fP is the pointer you set with \fICURLOPT_SEEKDATA(3)\fP.
 +
 +The callback function must return \fICURL_SEEKFUNC_OK\fP on success,
 +\fICURL_SEEKFUNC_FAIL\fP to cause the upload operation to fail or
 +\fICURL_SEEKFUNC_CANTSEEK\fP to indicate that while the seek failed, libcurl
 +is free to work around the problem if possible. The latter can sometimes be
 +done by instead reading from the input or similar.
 +
 +If you forward the input arguments directly to fseek(3) or lseek(3), note that
 +the data type for \fIoffset\fP is not the same as defined for curl_off_t on
 +many systems!
 +.SH DEFAULT
 +By default, this is NULL and unused.
 +.SH PROTOCOLS
 +HTTP, FTP, SFTP
 +.SH EXAMPLE
 +.nf
 +static int seek_cb(void *userp, curl_off_t offset, int origin)
 +{
 +  struct data *d = (struct data *)userp;
 +  lseek(our_fd, offset, origin);
 +  return CURL_SEEKFUNC_OK;
 +}
 +
 +{
 +  struct data seek_data;
 +  curl_easy_setopt(CURL *handle, CURLOPT_SEEKFUNCTION, seek_cb);
 +  curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, &seek_data);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.18.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SEEKDATA "(3), " CURLOPT_IOCTLFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSL_CIPHER_LIST.3
index f80caad60,000000000..05e42fa47
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_CIPHER_LIST.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_CIPHER_LIST.3
@@@ -1,77 -1,0 +1,77 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_SSL_CIPHER_LIST 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSL_CIPHER_LIST \- specify ciphers to use for TLS
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CIPHER_LIST, char *list);
 +.SH DESCRIPTION
 +Pass a char *, pointing to a zero terminated string holding the list of
 +ciphers to use for the SSL connection. The list must be syntactically correct,
 +it consists of one or more cipher strings separated by colons. Commas or
 +spaces are also acceptable separators but colons are normally used, \&!, \&-
 +and \&+ can be used as operators.
 +
 +For OpenSSL and GnuTLS valid examples of cipher lists include 'RC4-SHA',
 +\'SHA1+DES\', 'TLSv1' and 'DEFAULT'. The default list is normally set when you
 +compile OpenSSL.
 +
 +You'll find more details about cipher lists on this URL:
 +
 + https://curl.haxx.se/docs/ssl-ciphers.html
 +
 +For NSS, valid examples of cipher lists include 'rsa_rc4_128_md5',
 +\'rsa_aes_128_sha\', etc. With NSS you don't add/remove ciphers. If one uses
 +this option then all known ciphers are disabled and only those passed in are
 +enabled.
 +
 +For WolfSSL, valid examples of cipher lists include
 +\'ECDHE-RSA-RC4-SHA\', 'AES256-SHA:AES256-SHA256', etc.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL, use internal default
 +.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_SSL_CIPHER_LIST, "TLSv1");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +If built TLS enabled.
 +.SH RETURN VALUE
 +Returns CURLE_OK if TLS is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_TLS13_CIPHERS "(3), " CURLOPT_SSLVERSION "(3), "
 +.BR CURLOPT_PROXY_SSL_CIPHER_LIST "(3), " CURLOPT_PROXY_TLS13_CIPHERS "(3), "
 +.BR CURLOPT_USE_SSL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSL_OPTIONS.3
index bf7fee028,000000000..19bfbd910
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_OPTIONS.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_OPTIONS.3
@@@ -1,73 -1,0 +1,79 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_SSL_OPTIONS 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSL_OPTIONS \- set SSL behavior options
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_OPTIONS, long bitmask);
 +.SH DESCRIPTION
 +Pass a long with a bitmask to tell libcurl about specific SSL
 +behaviors. Available bits:
 +.IP CURLSSLOPT_ALLOW_BEAST
 +Tells libcurl to not attempt to use any workarounds for a security flaw in the
 +SSL3 and TLS1.0 protocols.  If this option isn't used or this bit is set to 0,
 +the SSL layer libcurl uses may use a work-around for this flaw although it
 +might cause interoperability problems with some (older) SSL
 +implementations. WARNING: avoiding this work-around lessens the security, and
 +by setting this option to 1 you ask for exactly that.  This option is only
 +supported for DarwinSSL, NSS and OpenSSL.
 +.IP CURLSSLOPT_NO_REVOKE
 +Tells libcurl to disable certificate revocation checks for those SSL backends
 +where such behavior is present. This option is only supported for Schannel
 +(the native Windows SSL library), with an exception in the case of Windows'
 +Untrusted Publishers blacklist which it seems can't be bypassed. (Added in
 +7.44.0)
 +.IP CURLSSLOPT_NO_PARTIALCHAIN
 +Tells libcurl to not accept "partial" certificate chains, which it otherwise
 +does by default. This option is only supported for OpenSSL and will fail the
 +certificate verification if the chain ends with an intermediate certificate
 +and not with a root cert. (Added in 7.68.0)
++.IP CURLSSLOPT_REVOKE_BEST_EFFORT
++Tells libcurl to ignore certificate revocation checks in case of missing or
++offline distribution points for those SSL backends where such behavior is
++present. This option is only supported for Schannel (the native Windows SSL
++library). If combined with \fICURLSSLOPT_NO_REVOKE\fP, the latter takes
++precedence. (Added in 7.70.0)
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +All TLS-based protocols
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* weaken TLS only for use with silly servers */
 +  curl_easy_setopt(curl, CURLOPT_SSL_OPTIONS, CURLSSLOPT_ALLOW_BEAST |
 +                   CURLSSLOPT_NO_REVOKE);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.25.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSLVERSION "(3), " CURLOPT_SSL_CIPHER_LIST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_STDERR.3
index 6855e412f,000000000..c2758d54a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_STDERR.3
+++ b/docs/libcurl/opts/GNURLOPT_STDERR.3
@@@ -1,54 -1,0 +1,54 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_STDERR 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_STDERR \- redirect stderr to another stream
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STDERR, FILE *stream);
 +.SH DESCRIPTION
 +Pass a FILE * as parameter. Tell libcurl to use this \fIstream\fP instead of
 +stderr when showing the progress meter and displaying \fICURLOPT_VERBOSE(3)\fP
 +data.
 +.SH DEFAULT
 +stderr
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +FILE *filep = fopen("dump", "wb");
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_STDERR, filep);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_VERBOSE "(3), " CURLOPT_NOPROGRESS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_STREAM_DEPENDS_E.3
index ff2c72442,000000000..128ae5e65
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_STREAM_DEPENDS_E.3
+++ b/docs/libcurl/opts/GNURLOPT_STREAM_DEPENDS_E.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_STREAM_DEPENDS_E 3 "13 Sep 2015" "libcurl 7.46.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_STREAM_DEPENDS_E \- set stream this transfer depends on exclusively
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS_E, CURL 
*dephandle);
 +.SH DESCRIPTION
 +Pass a CURL * pointer in \fIdephandle\fP to identify the stream within the
 +same connection that this stream is depending upon exclusively. That means it
 +depends on it and sets the Exclusive bit.
 +
 +The spec says "Including a dependency expresses a preference to allocate
 +resources to the identified stream rather than to the dependent stream."
 +
 +Setting a dependency with the exclusive flag for a reprioritized stream causes
 +all the dependencies of the new parent stream to become dependent on the
 +reprioritized stream.
 +
 +This option can be set during transfer.
 +
 +\fIdephandle\fP must not be the same as \fIhandle\fP, that will cause this
 +function to return an error. It must be another easy handle, and it also needs
 +to be a handle of a transfer that will be sent over the same HTTP/2 connection
 +for this option to have an actual effect.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP/2
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +CURL *curl2 = curl_easy_init(); /* a second handle */
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/one";);
 +
 +  /* the second depends on the first */
 +  curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/two";);
 +  curl_easy_setopt(curl2, CURLOPT_STREAM_DEPENDS_E, curl);
 +
 +  /* then add both to a multi handle and transfer them! */
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.46.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_STREAM_WEIGHT "(3), " CURLOPT_STREAM_DEPENDS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_STREAM_WEIGHT.3
index 7348c35bc,000000000..2d4fa9f6b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_STREAM_WEIGHT.3
+++ b/docs/libcurl/opts/GNURLOPT_STREAM_WEIGHT.3
@@@ -1,76 -1,0 +1,76 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_STREAM_WEIGHT 3 "13 Sep 2015" "libcurl 7.46.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_STREAM_WEIGHT \- set numerical stream weight
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_WEIGHT, long weight);
 +.SH DESCRIPTION
 +Set the long \fIweight\fP to a number between 1 and 256.
 +
 +When using HTTP/2, this option sets the individual weight for this particular
 +stream used by the easy \fIhandle\fP. Setting and using weights only makes
 +sense and is only usable when doing multiple streams over the same
 +connections, which thus implies that you use \fICURLMOPT_PIPELINING(3)\fP.
 +
 +This option can be set during transfer and will then cause the updated weight
 +info get sent to the server the next time an HTTP/2 frame is sent to the
 +server.
 +
 +See section 5.3 of RFC 7540 for protocol details:
 +https://httpwg.github.io/specs/rfc7540.html#StreamPriority
 +
 +Streams with the same parent should be allocated resources proportionally
 +based on their weight. So if you have two streams going, stream A with weight
 +16 and stream B with weight 32, stream B will get two thirds (32/48) of the
 +available bandwidth (assuming the server can send off the data equally for
 +both streams).
 +.SH DEFAULT
 +If nothing is set, the HTTP/2 protocol itself will use its own default which
 +is 16.
 +.SH PROTOCOLS
 +HTTP/2
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +CURL *curl2 = curl_easy_init(); /* a second handle */
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/one";);
 +  curl_easy_setopt(curl, CURLOPT_STREAM_WEIGHT, 10L);
 +
 +  /* the second has twice the weight */
 +  curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/two";);
 +  curl_easy_setopt(curl2, CURLOPT_STREAM_WEIGHT, 20L);
 +
 +  /* then add both to a multi handle and transfer them! */
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.46.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_STREAM_DEPENDS "(3), " CURLOPT_STREAM_DEPENDS_E "(3), "
 +.BR CURLOPT_PIPEWAIT "(3), " CURLMOPT_PIPELINING "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TCP_KEEPALIVE.3
index cf781ea22,000000000..155f5e1c5
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TCP_KEEPALIVE.3
+++ b/docs/libcurl/opts/GNURLOPT_TCP_KEEPALIVE.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_TCP_KEEPALIVE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TCP_KEEPALIVE \- enable TCP keep-alive probing
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPALIVE, long probe);
 +.SH DESCRIPTION
 +Pass a long. If set to 1, TCP keepalive probes will be sent. The delay and
 +frequency of these probes can be controlled by the
 +\fICURLOPT_TCP_KEEPIDLE(3)\fP and \fICURLOPT_TCP_KEEPINTVL(3)\fP options,
 +provided the operating system supports them. Set to 0 (default behavior) to
 +disable keepalive probes
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* enable TCP keep-alive for this transfer */
 +  curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
 +
 +  /* keep-alive idle time to 120 seconds */
 +  curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
 +
 +  /* interval time between keep-alive probes: 60 seconds */
 +  curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.25.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_TCP_KEEPIDLE "(3), " CURLOPT_TCP_KEEPINTVL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TCP_KEEPIDLE.3
index ffe82d41d,000000000..08f7934c1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TCP_KEEPIDLE.3
+++ b/docs/libcurl/opts/GNURLOPT_TCP_KEEPIDLE.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_TCP_KEEPIDLE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TCP_KEEPIDLE \- set TCP keep-alive idle time wait
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPIDLE, long delay);
 +.SH DESCRIPTION
 +Pass a long. Sets the \fIdelay\fP, in seconds, that the operating system will
 +wait while the connection is idle before sending keepalive probes. Not all
 +operating systems support this option.
 +.SH DEFAULT
 +60
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* enable TCP keep-alive for this transfer */
 +  curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
 +
 +  /* set keep-alive idle time to 120 seconds */
 +  curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
 +
 +  /* interval time between keep-alive probes: 60 seconds */
 +  curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.25.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_TCP_KEEPALIVE "(3), " CURLOPT_TCP_KEEPINTVL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TCP_KEEPINTVL.3
index f658b0164,000000000..d9e23b603
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TCP_KEEPINTVL.3
+++ b/docs/libcurl/opts/GNURLOPT_TCP_KEEPINTVL.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_TCP_KEEPINTVL 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TCP_KEEPINTVL \- set TCP keep-alive interval
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_KEEPINTVL, long interval);
 +.SH DESCRIPTION
 +Pass a long. Sets the interval, in seconds, that the operating system will
 +wait between sending keepalive probes. Not all operating systems support this
 +option. (Added in 7.25.0)
 +.SH DEFAULT
 +60
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* enable TCP keep-alive for this transfer */
 +  curl_easy_setopt(curl, CURLOPT_TCP_KEEPALIVE, 1L);
 +
 +  /* set keep-alive idle time to 120 seconds */
 +  curl_easy_setopt(curl, CURLOPT_TCP_KEEPIDLE, 120L);
 +
 +  /* interval time between keep-alive probes: 60 seconds */
 +  curl_easy_setopt(curl, CURLOPT_TCP_KEEPINTVL, 60L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_TCP_KEEPALIVE "(3), " CURLOPT_TCP_KEEPIDLE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TCP_NODELAY.3
index 6a87ab89a,000000000..dd6fb6251
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TCP_NODELAY.3
+++ b/docs/libcurl/opts/GNURLOPT_TCP_NODELAY.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_TCP_NODELAY 3 "30 Jun 2016" "libcurl 7.50.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TCP_NODELAY \- set the TCP_NODELAY option
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_NODELAY, long nodelay);
 +.SH DESCRIPTION
 +Pass a long specifying whether the TCP_NODELAY option is to be set or cleared
 +(1L = set, 0 = clear). The option is set by default. This will have no effect
 +after the connection has been established.
 +
 +Setting this option to 1L will disable TCP's Nagle algorithm on this
 +connection. The purpose of this algorithm is to try to minimize the number of
 +small packets on the network (where "small packets" means TCP segments less
 +than the Maximum Segment Size (MSS) for the network).
 +
 +Maximizing the amount of data sent per TCP segment is good because it
 +amortizes the overhead of the send. However, in some cases small segments may
 +need to be sent without delay. This is less efficient than sending larger
 +amounts of data at a time, and can contribute to congestion on the network if
 +overdone.
 +.SH DEFAULT
 +1
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +  /* disable Nagle */
 +  curl_easy_setopt(curl, CURLOPT_TCP_NODELAY, 0);
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always. The default was changed to 1 from 0 in 7.50.2.
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_SOCKOPTFUNCTION "(3), " CURLOPT_TCP_KEEPALIVE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TIMEOUT_MS.3
index 62c719e2e,000000000..8bd7b8651
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TIMEOUT_MS.3
+++ b/docs/libcurl/opts/GNURLOPT_TIMEOUT_MS.3
@@@ -1,74 -1,0 +1,74 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_TIMEOUT_MS 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TIMEOUT_MS \- set maximum time the request is allowed to take
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT_MS, long timeout);
 +.SH DESCRIPTION
 +Pass a long as parameter containing \fItimeout\fP - the maximum time in
 +milliseconds that you allow the libcurl transfer operation to take. Normally,
 +name lookups can take a considerable time and limiting operations to less than
 +a few minutes risk aborting perfectly normal operations. This option may cause
 +libcurl to use the SIGALRM signal to timeout system calls.
 +
 +If libcurl is built to use the standard system name resolver, that portion of
 +the transfer will still use full-second resolution for timeouts with a minimum
 +timeout allowed of one second.
 +
 +In unix-like systems, this might cause signals to be used unless
 +\fICURLOPT_NOSIGNAL(3)\fP is set.
 +
 +If both \fICURLOPT_TIMEOUT(3)\fP and \fICURLOPT_TIMEOUT_MS(3)\fP are set, the
 +value set last will be used.
 +
 +Since this puts a hard limit for how long time a request is allowed to take,
 +it has limited use in dynamic use cases with varying transfer times. You are
 +then advised to explore \fICURLOPT_LOW_SPEED_LIMIT(3)\fP,
 +\fICURLOPT_LOW_SPEED_TIME(3)\fP or using \fICURLOPT_PROGRESSFUNCTION(3)\fP to
 +implement your own timeout logic.
 +.SH DEFAULT
 +Default timeout is 0 (zero) which means it never times out during transfer.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  /* complete within 20000 milliseconds */
 +  curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, 20000L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_TIMEOUT "(3), "
 +.BR CURLOPT_CONNECTTIMEOUT "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_UNIX_SOCKET_PATH.3
index a42958772,000000000..355cf576e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_UNIX_SOCKET_PATH.3
+++ b/docs/libcurl/opts/GNURLOPT_UNIX_SOCKET_PATH.3
@@@ -1,81 -1,0 +1,81 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_UNIX_SOCKET_PATH 3 "09 Oct 2014" "libcurl 7.40.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_UNIX_SOCKET_PATH \- set Unix domain socket
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNIX_SOCKET_PATH, char *path);
 +.SH DESCRIPTION
 +Enables the use of Unix domain sockets as connection endpoint and sets the 
path
 +to \fIpath\fP. If \fIpath\fP is NULL, then Unix domain sockets are disabled. 
An
 +empty string will result in an error at some point, it will not disable use of
 +Unix domain sockets.
 +
 +When enabled, curl will connect to the Unix domain socket instead of
 +establishing a TCP connection to a host. Since no TCP connection is created,
 +curl does not need to resolve the DNS hostname in the URL.
 +
 +The maximum path length on Cygwin, Linux and Solaris is 107. On other 
platforms
 +it might be even less.
 +
 +Proxy and TCP options such as
 +.BR CURLOPT_TCP_NODELAY "(3)
 +are not supported. Proxy options such as
 +.BR CURLOPT_PROXY "(3)
 +have no effect either as these are TCP-oriented, and asking a proxy server to
 +connect to a certain Unix domain socket is not possible.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +Default is NULL, meaning that no Unix domain sockets are used.
 +.SH PROTOCOLS
 +All protocols except for file:// and FTP are supported in theory. HTTP, IMAP,
 +POP3 and SMTP should in particular work (including their SSL/TLS variants).
 +.SH EXAMPLE
 +Given that you have an nginx server running, listening on /tmp/nginx.sock, you
 +can request an HTTP resource with:
 +
 +.nf
 +    curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, 
"/tmp/nginx.sock");
 +    curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost/";);
 +.fi
 +
 +If you are on Linux and somehow have a need for paths larger than 107 bytes, 
you
 +could use the proc filesystem to bypass the limitation:
 +
 +.nf
 +    int dirfd = open(long_directory_path_to_socket, O_DIRECTORY | O_RDONLY);
 +    char path[108];
 +    snprintf(path, sizeof(path), "/proc/self/fd/%d/nginx.sock", dirfd);
 +    curl_easy_setopt(curl_handle, CURLOPT_UNIX_SOCKET_PATH, path);
 +    /* Be sure to keep dirfd valid until you discard the handle */
 +.fi
 +.SH AVAILABILITY
 +Since 7.40.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_OPENSOCKETFUNCTION "(3), " unix "(7), "
diff --cc docs/libcurl/opts/GNURLOPT_UPLOAD.3
index 5d0e90933,000000000..970b1281c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_UPLOAD.3
+++ b/docs/libcurl/opts/GNURLOPT_UPLOAD.3
@@@ -1,78 -1,0 +1,78 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_UPLOAD 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_UPLOAD \- enable data upload
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD, long upload);
 +.SH DESCRIPTION
 +The long parameter \fIupload\fP set to 1 tells the library to prepare for and
 +perform an upload. The \fICURLOPT_READDATA(3)\fP and
 +\fICURLOPT_INFILESIZE(3)\fP or \fICURLOPT_INFILESIZE_LARGE(3)\fP options are
 +also interesting for uploads. If the protocol is HTTP, uploading means using
 +the PUT request unless you tell libcurl otherwise.
 +
 +Using PUT with HTTP 1.1 implies the use of a "Expect: 100-continue" header.
 +You can disable this header with \fICURLOPT_HTTPHEADER(3)\fP as usual.
 +
 +If you use PUT to an HTTP 1.1 server, you can upload data without knowing the
 +size before starting the transfer if you use chunked encoding. You enable this
 +by adding a header like "Transfer-Encoding: chunked" with
 +\fICURLOPT_HTTPHEADER(3)\fP. With HTTP 1.0 or without chunked transfer, you
 +must specify the size.
 +.SH DEFAULT
 +0, default is download
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  /* we want to use our own read function */
 +  curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback);
 +
 +  /* enable uploading */
 +  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 +
 +  /* specify target */
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile";);
 +
 +  /* now specify which pointer to pass to our callback */
 +  curl_easy_setopt(curl, CURLOPT_READDATA, hd_src);
 +
 +  /* Set the size of the file to upload */
 +  curl_easy_setopt(curl, CURLOPT_INFILESIZE_LARGE, (curl_off_t)fsize);
 +
 +  /* Now run off and do what you've been told! */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_PUT "(3), " CURLOPT_READFUNCTION "(3), "
 +.BR CURLOPT_INFILESIZE_LARGE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_URL.3
index 473ea4f8a,000000000..25c52c25f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_URL.3
+++ b/docs/libcurl/opts/GNURLOPT_URL.3
@@@ -1,356 -1,0 +1,360 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_URL 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_URL \- provide the URL to use in the request
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_URL, char *URL);
 +.SH DESCRIPTION
 +Pass in a pointer to the \fIURL\fP to work with. The parameter should be a
 +char * to a zero terminated string which must be URL-encoded in the following
 +format:
 +
 +scheme://host:port/path
 +
 +For a greater explanation of the format please see RFC3986.
 +
 +libcurl doesn't validate the syntax or use this variable until the transfer is
 +issued. Even if you set a crazy value here, \fIcurl_easy_setopt(3)\fP will
 +still return \fICURLE_OK\fP.
 +
 +If the given URL is missing a scheme name (such as "http://"; or "ftp://"; etc)
 +then libcurl will make a guess based on the host. If the outermost sub-domain
 +name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then that protocol will be
 +used, otherwise HTTP will be used. Since 7.45.0 guessing can be disabled by
 +setting a default protocol, see \fICURLOPT_DEFAULT_PROTOCOL(3)\fP for details.
 +
 +Should the protocol, either that specified by the scheme or deduced by libcurl
 +from the host name, not be supported by libcurl then
 +\fICURLE_UNSUPPORTED_PROTOCOL\fP will be returned from either the
 +\fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP functions when you
 +call them. Use \fIcurl_version_info(3)\fP for detailed information of which
 +protocols are supported by the build of libcurl you are using.
 +
 +\fICURLOPT_PROTOCOLS(3)\fP can be used to limit what protocols libcurl will
 +use for this transfer, independent of what libcurl has been compiled to
 +support. That may be useful if you accept the URL from an external source and
 +want to limit the accessibility.
 +
 +The \fICURLOPT_URL(3)\fP string will be ignored if \fICURLOPT_CURLU(3)\fP is
 +set.
 +
 +\fICURLOPT_URL(3)\fP or \fICURLOPT_CURLU(3)\fP \fBmust\fP be set before a
 +transfer is started.
 +
 +The host part of the URL contains the address of the server that you want to
 +connect to. This can be the fully qualified domain name of the server, the
 +local network name of the machine on your network or the IP address of the
 +server or machine represented by either an IPv4 or IPv6 address. For example:
 +
 +http://www.example.com/
 +
 +http://hostname/
 +
 +http://192.168.0.1/
 +
 +http://[2001:1890:1112:1::20]/
 +
 +It is also possible to specify the user name, password and any supported login
 +options as part of the host, for the following protocols, when connecting to
 +servers that require authentication:
 +
 +http://user:address@hidden
 +
 +ftp://user:address@hidden
 +
 +smb://domain%2fuser:address@hidden
 +
 +imap://user:password;address@hidden
 +
 +pop3://user:password;address@hidden
 +
 +smtp://user:password;address@hidden
 +
 +At present only IMAP, POP3 and SMTP support login options as part of the host.
 +For more information about the login options in URL syntax please see RFC2384,
 +RFC5092 and IETF draft draft-earhart-url-smtp-00.txt (Added in 7.31.0).
 +
 +The port is optional and when not specified libcurl will use the default port
 +based on the determined or specified protocol: 80 for HTTP, 21 for FTP and 25
 +for SMTP, etc. The following examples show how to specify the port:
 +
 +http://www.example.com:8080/ - This will connect to a web server using port
 +8080 rather than 80.
 +
 +smtp://mail.example.com:587/ - This will connect to a SMTP server on the
 +alternative mail port.
 +
 +The path part of the URL is protocol specific and whilst some examples are
 +given below this list is not conclusive:
 +
 +.IP HTTP
 +The path part of an HTTP request specifies the file to retrieve and from what
 +directory. If the directory is not specified then the web server's root
 +directory is used. If the file is omitted then the default document will be
 +retrieved for either the directory specified or the root directory. The exact
 +resource returned for each URL is entirely dependent on the server's
 +configuration.
 +
 +http://www.example.com - This gets the main page from the web server.
 +
 +http://www.example.com/index.html - This returns the main page by explicitly
 +requesting it.
 +
 +http://www.example.com/contactus/ - This returns the default document from
 +the contactus directory.
 +
 +.IP FTP
 +The path part of an FTP request specifies the file to retrieve and from what
 +directory. If the file part is omitted then libcurl downloads the directory
 +listing for the directory specified. If the directory is omitted then
 +the directory listing for the root / home directory will be returned.
 +
 +ftp://ftp.example.com - This retrieves the directory listing for the root
 +directory.
 +
 +ftp://ftp.example.com/readme.txt - This downloads the file readme.txt from the
 +root directory.
 +
 +ftp://ftp.example.com/libcurl/readme.txt - This downloads readme.txt from the
 +libcurl directory.
 +
 +ftp://user:address@hidden/readme.txt - This retrieves the readme.txt
 +file from the user's home directory. When a username and password is
 +specified, everything that is specified in the path part is relative to the
 +user's home directory. To retrieve files from the root directory or a
 +directory underneath the root directory then the absolute path must be
 +specified by prepending an additional forward slash to the beginning of the
 +path.
 +
 +ftp://user:address@hidden//readme.txt - This retrieves the readme.txt
 +from the root directory when logging in as a specified user.
 +
++.IP FILE
++When a FILE:// URL is accessed on Windows systems, it can be crafted in a way
++so that Windows attempts to connect to a (remote) machine when curl wants to
++read or write such a path.
 +.IP SMTP
 +The path part of a SMTP request specifies the host name to present during
 +communication with the mail server. If the path is omitted then libcurl will
 +attempt to resolve the local computer's host name. However, this may not
 +return the fully qualified domain name that is required by some mail servers
 +and specifying this path allows you to set an alternative name, such as
 +your machine's fully qualified domain name, which you might have obtained
 +from an external function such as gethostname or getaddrinfo.
 +
 +smtp://mail.example.com - This connects to the mail server at example.com and
 +sends your local computer's host name in the HELO / EHLO command.
 +
 +smtp://mail.example.com/client.example.com - This will send 
client.example.com in
 +the HELO / EHLO command to the mail server at example.com.
 +
 +.IP POP3
 +The path part of a POP3 request specifies the message ID to retrieve. If the
 +ID is not specified then a list of waiting messages is returned instead.
 +
 +pop3://user:address@hidden - This lists the available messages for
 +the user
 +
 +pop3://user:address@hidden/1 - This retrieves the first message for
 +the user
 +
 +.IP IMAP
 +The path part of an IMAP request not only specifies the mailbox to list (Added
 +in 7.30.0) or select, but can also be used to check the UIDVALIDITY of the
 +mailbox, to specify the UID, SECTION (Added in 7.30.0) and PARTIAL octets
 +(Added in 7.37.0) of the message to fetch and to specify what messages to
 +search for (Added in 7.37.0).
 +
 +imap://user:address@hidden - Performs a top level folder list
 +
 +imap://user:address@hidden/INBOX - Performs a folder list on the
 +user's inbox
 +
 +imap://user:address@hidden/INBOX/;UID=1 - Selects the user's inbox
 +and fetches message with uid = 1
 +
 +imap://user:address@hidden/INBOX/;MAILINDEX=1 - Selects the user's inbox
 +and fetches the first message in the mail box
 +
 +imap://user:address@hidden/INBOX;UIDVALIDITY=50/;UID=2 - Selects
 +the user's inbox, checks the UIDVALIDITY of the mailbox is 50 and fetches
 +message 2 if it is
 +
 +imap://user:address@hidden/INBOX/;UID=3/;SECTION=TEXT - Selects the
 +user's inbox and fetches the text portion of message 3
 +
 +imap://user:address@hidden/INBOX/;UID=4/;PARTIAL=0.1024 - Selects
 +the user's inbox and fetches the first 1024 octets of message 4
 +
 +imap://user:address@hidden/INBOX?NEW - Selects the user's inbox and
 +checks for NEW messages
 +
 +imap://user:address@hidden/INBOX?SUBJECT%20shadows - Selects the
 +user's inbox and searches for messages containing "shadows" in the subject
 +line
 +
 +For more information about the individual components of an IMAP URL please
 +see RFC5092.
 +
 +.IP SCP
 +The path part of a SCP request specifies the file to retrieve and from what
 +directory. The file part may not be omitted. The file is taken as an absolute
 +path from the root directory on the server. To specify a path relative to the
 +user's home directory on the server, prepend ~/ to the path portion.  If the
 +user name is not embedded in the URL, it can be set with the
 +\fICURLOPT_USERPWD(3)\fP or \fICURLOPT_USERNAME(3)\fP option.
 +
 +scp://address@hidden/etc/issue - This specifies the file /etc/issue
 +
 +scp://example.com/~/my-file - This specifies the file my-file in the
 +user's home directory on the server
 +.IP SFTP
 +The path part of a SFTP request specifies the file to retrieve and from what
 +directory. If the file part is omitted then libcurl downloads the directory
 +listing for the directory specified.  If the path ends in a / then a directory
 +listing is returned instead of a file.  If the path is omitted entirely then
 +the directory listing for the root / home directory will be returned.  If the
 +user name is not embedded in the URL, it can be set with the
 +\fICURLOPT_USERPWD(3)\fP or \fICURLOPT_USERNAME(3)\fP option.
 +
 +sftp://user:address@hidden/etc/issue - This specifies the file
 +/etc/issue
 +
 +sftp://address@hidden/~/my-file - This specifies the file my-file in the
 +user's home directory
 +
 +sftp://ssh.example.com/~/Documents/ - This requests a directory listing
 +of the Documents directory under the user's home directory
 +
 +.IP SMB
 +The path part of a SMB request specifies the file to retrieve and from what
 +share and directory or the share to upload to and as such, may not be omitted.
 +If the user name is not embedded in the URL, it can be set with the
 +\fICURLOPT_USERPWD(3)\fP or \fICURLOPT_USERNAME(3)\fP option. If the user name
 +is embedded in the URL then it must contain the domain name and as such, the
 +backslash must be URL encoded as %2f.
 +
 +smb://server.example.com/files/issue - This specifies the file "issue" located
 +in the root of the "files" share
 +
 +smb://server.example.com/files/ -T issue - This specifies the file "issue" 
will
 +be uploaded to the root of the "files" share.
 +
 +curl supports SMB version 1 (only)
 +.IP LDAP
 +The path part of a LDAP request can be used to specify the: Distinguished
 +Name, Attributes, Scope, Filter and Extension for a LDAP search. Each field
 +is separated by a question mark and when that field is not required an empty
 +string with the question mark separator should be included.
 +
 +ldap://ldap.example.com/o=My%20Organisation - This will perform a LDAP search
 +with the DN as My Organisation.
 +
 +ldap://ldap.example.com/o=My%20Organisation?postalAddress - This will perform
 +the same search but will only return postalAddress attributes.
 +
 +ldap://ldap.example.com/?rootDomainNamingContext - This specifies an empty DN
 +and requests information about the rootDomainNamingContext attribute for an
 +Active Directory server.
 +
 +For more information about the individual components of a LDAP URL please
 +see RFC4516.
 +.IP RTMP
 +There's no official URL spec for RTMP so libcurl uses the URL syntax supported
 +by the underlying librtmp library. It has a syntax where it wants a
 +traditional URL, followed by a space and a series of space-separated
 +name=value pairs.
 +
 +While space is not typically a "legal" letter, libcurl accepts them. When a
 +user wants to pass in a '#' (hash) character it will be treated as a fragment
 +and get cut off by libcurl if provided literally. You will instead have to
 +escape it by providing it as backslash and its ASCII value in hexadecimal:
 +"\\23".
 +
 +.RS 0
 +The application does not have to keep the string around after setting this
 +option.
 +.SH ENCODING
 +The string pointed to in the \fICURLOPT_URL(3)\fP argument is generally
 +expected to be a sequence of characters using an ASCII compatible encoding.
 +
 +If libcurl is built with IDN support, the server name part of the URL can use
 +an "international name" by using the current encoding (according to locale) or
 +UTF-8 (when winidn is used).
 +
 +If libcurl is built without IDN support, the server name is used exactly as
 +specified when passed to the name resolver functions.
 +.SH DEFAULT
 +There is no default URL. If this option isn't set, no transfer can be
 +performed.
 +.SH SECURITY CONCERNS
 +Applications may at times find it convenient to allow users to specify URLs
 +for various purposes and that string would then end up fed to this option.
 +
 +Getting a URL from an external untrusted party will bring reasons for several
 +security concerns:
 +
 +If you have an application that runs as or in a server application, getting an
 +unfiltered URL can easily trick your application to access a local resource
 +instead of a remote. Protecting yourself against localhost accesses is very
 +hard when accepting user provided URLs.
 +
 +Such custom URLs can also access other ports than you planned as port numbers
 +are part of the regular URL format. The combination of a local host and a
 +custom port number can allow external users to play tricks with your local
 +services.
 +
 +Accepting external URLs may also use other protocols than http:// or other
 +common ones. Restrict what accept with \fICURLOPT_PROTOCOLS(3)\fP.
 +
 +User provided URLs can also be made to point to sites that redirect further on
 +(possibly to other protocols too). Consider your
 +\fICURLOPT_FOLLOWLOCATION(3)\fP and \fICURLOPT_REDIR_PROTOCOLS(3)\fP settings.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +POP3 and SMTP were added in 7.31.0
 +.SH RETURN VALUE
 +Returns CURLE_OK on success or CURLE_OUT_OF_MEMORY if there was insufficient
 +heap space.
 +
 +Note that \fIcurl_easy_setopt(3)\fP won't actually parse the given string so
 +given a bad URL, it will not be detected until \fIcurl_easy_perform(3)\fP or
 +similar is called.
 +.SH "SEE ALSO"
 +.BR CURLOPT_VERBOSE "(3), " CURLOPT_PROTOCOLS "(3), "
 +.BR CURLOPT_FORBID_REUSE "(3), " CURLOPT_FRESH_CONNECT "(3), "
 +.BR curl_easy_perform "(3), "
 +.BR CURLINFO_REDIRECT_URL "(3), " CURLOPT_PATH_AS_IS "(3), " CURLOPT_CURLU 
"(3), "
diff --cc docs/libcurl/opts/GNURLOPT_USERAGENT.3
index d05588890,000000000..8bb754cc2
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_USERAGENT.3
+++ b/docs/libcurl/opts/GNURLOPT_USERAGENT.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_USERAGENT 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_USERAGENT \- set HTTP user-agent header
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERAGENT, char *ua);
 +.SH DESCRIPTION
 +Pass a pointer to a zero terminated string as parameter. It will be used to
 +set the User-Agent: header in the HTTP request sent to the remote server. This
 +can be used to fool servers or scripts. You can also set any custom header
 +with \fICURLOPT_HTTPHEADER(3)\fP.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL, no User-Agent: header is used by default.
 +.SH PROTOCOLS
 +HTTP, HTTPS
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
 +
 +  curl_easy_setopt(curl, CURLOPT_USERAGENT, "Dark Secret Ninja/1.0");
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +As long as HTTP is supported
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_REFERER "(3), " CURLOPT_HTTPHEADER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_USE_SSL.3
index 6e5d276f3,000000000..ee1f1c7e2
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_USE_SSL.3
+++ b/docs/libcurl/opts/GNURLOPT_USE_SSL.3
@@@ -1,70 -1,0 +1,70 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_USE_SSL 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_USE_SSL \- request using SSL / TLS for the transfer
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USE_SSL, long level);
 +.SH DESCRIPTION
 +Pass a long using one of the values from below, to make libcurl use your
 +desired \fIlevel\fP of SSL for the transfer.
 +
 +These are all protocols that start out plain text and get "upgraded" to SSL
 +using the STARTTLS command.
 +
 +This is for enabling SSL/TLS when you use FTP, SMTP, POP3, IMAP etc.
 +.IP CURLUSESSL_NONE
 +Don't attempt to use SSL.
 +.IP CURLUSESSL_TRY
 +Try using SSL, proceed as normal otherwise.
 +.IP CURLUSESSL_CONTROL
 +Require SSL for the control connection or fail with 
\fICURLE_USE_SSL_FAILED\fP.
 +.IP CURLUSESSL_ALL
 +Require SSL for all communication or fail with \fICURLE_USE_SSL_FAILED\fP.
 +.SH DEFAULT
 +CURLUSESSL_NONE
 +.SH PROTOCOLS
 +FTP, SMTP, POP3, IMAP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/file.ext";);
 +
 +  /* require use of SSL for this, or fail */
 +  curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.11.0. This option was known as CURLOPT_FTP_SSL up to 7.16.4, and
 +the constants were known as CURLFTPSSL_*
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSLVERSION "(3), " CURLOPT_PROXY_SSLVERSION "(3), "
 +.BR CURLOPT_SSL_OPTIONS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_WRITEDATA.3
index 6862cd1ce,000000000..f875f40ee
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_WRITEDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_WRITEDATA.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2015, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_WRITEDATA 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_WRITEDATA \- custom pointer passed to the write callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEDATA, void *pointer);
 +.SH DESCRIPTION
 +A data \fIpointer\fP to pass to the write callback. If you use the
 +\fICURLOPT_WRITEFUNCTION(3)\fP option, this is the pointer you'll get in that
 +callback's 4th argument. If you don't use a write callback, you must make
 +\fIpointer\fP a 'FILE *' (cast to 'void *') as libcurl will pass this to
 +\fIfwrite(3)\fP when writing data.
 +
 +The internal \fICURLOPT_WRITEFUNCTION(3)\fP will write the data to the FILE *
 +given with this option, or to stdout if this option hasn't been set.
 +
 +If you're using libcurl as a win32 DLL, you \fBMUST\fP use a
 +\fICURLOPT_WRITEFUNCTION(3)\fP if you set this option or you will experience
 +crashes.
 +.SH DEFAULT
 +By default, this is a FILE * to stdout.
 +.SH PROTOCOLS
 +Used for all protocols.
 +.SH EXAMPLE
 +A common technique is to use the write callback to store the incoming data
 +into a dynamically growing allocated buffer, and then this
 +\fICURLOPT_WRITEDATA(3)\fP is used to point to a struct or the buffer to store
 +data in. Like in the getinmemory example:
 +https://curl.haxx.se/libcurl/c/getinmemory.html
 +.SH AVAILABILITY
 +Available in all libcurl versions. This option was formerly known as
 +\fICURLOPT_FILE\fP, the name \fICURLOPT_WRITEDATA(3)\fP was introduced in
 +7.9.7.
 +.SH RETURN VALUE
 +This will return CURLE_OK.
 +.SH "SEE ALSO"
 +.BR CURLOPT_WRITEFUNCTION "(3), " CURLOPT_READDATA "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_WRITEFUNCTION.3
index 543bbc037,000000000..e76d26a6b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_WRITEFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_WRITEFUNCTION.3
@@@ -1,83 -1,0 +1,112 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_WRITEFUNCTION 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_WRITEFUNCTION \- set callback for writing received data
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WRITEFUNCTION, 
write_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This callback function gets called by libcurl as soon as there is data
 +received that needs to be saved. For most transfers, this callback gets called
 +many times and each invoke delivers another chunk of data. \fIptr\fP points to
 +the delivered data, and the size of that data is \fInmemb\fP; \fIsize\fP is
 +always 1.
 +
 +The callback function will be passed as much data as possible in all invokes,
 +but you must not make any assumptions. It may be one byte, it may be
 +thousands. The maximum amount of body data that will be passed to the write
 +callback is defined in the curl.h header file: \fICURL_MAX_WRITE_SIZE\fP (the
 +usual default is 16K). If \fICURLOPT_HEADER(3)\fP is enabled, which makes
 +header data get passed to the write callback, you can get up to
 +\fICURL_MAX_HTTP_HEADER\fP bytes of header data passed into it. This usually
 +means 100K.
 +
 +This function may be called with zero bytes data if the transferred file is
 +empty.
 +
 +The data passed to this function will not be zero terminated!
 +
 +Set the \fIuserdata\fP argument with the \fICURLOPT_WRITEDATA(3)\fP option.
 +
 +Your callback should return the number of bytes actually taken care of. If
 +that amount differs from the amount passed to your callback function, it'll
 +signal an error condition to the library. This will cause the transfer to get
 +aborted and the libcurl function used will return \fICURLE_WRITE_ERROR\fP.
 +
 +If your callback function returns CURL_WRITEFUNC_PAUSE it will cause this
 +transfer to become paused.  See \fIcurl_easy_pause(3)\fP for further details.
 +
 +Set this option to NULL to get the internal default function used instead of
 +your callback. The internal default function will write the data to the FILE *
 +given with \fICURLOPT_WRITEDATA(3)\fP.
 +.SH DEFAULT
 +libcurl will use 'fwrite' as a callback by default.
 +.SH PROTOCOLS
 +For all protocols
 +.SH AVAILABILITY
 +Support for the CURL_WRITEFUNC_PAUSE return code was added in version 7.18.0.
 +.SH RETURN VALUE
 +This will return CURLE_OK.
 +.SH EXAMPLE
- A common technique is to use this callback to store the incoming data into a
- dynamically growing allocated buffer. Like in the getinmemory example:
- https://curl.haxx.se/libcurl/c/getinmemory.html
++.NF
++ struct memory {
++   char *response;
++   size_t size;
++ };
++
++ static size_t cb(void *data, size_t size, size_t nmemb, void *userp)
++ {
++   size_t realsize = size * nmemb;
++   struct memory *mem = (struct memory *)userp;
++
++   char *ptr = realloc(mem->response, mem->size + realsize + 1);
++   if(ptr == NULL)
++     return 0;  /* out of memory! */
++
++   mem->response = ptr;
++   memcpy(&(mem->response[mem->size]), data, realsize);
++   mem->size += realsize;
++   mem->response[mem->size] = 0;
++
++   return realsize;
++ }
++
++ struct memory chunk;
++
++ /* send all data to this function  */
++ curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, cb);
++
++ /* we pass our 'chunk' struct to the callback function */
++ curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, (void *)&chunk);
++.FI
 +.SH "SEE ALSO"
 +.BR CURLOPT_WRITEDATA "(3), " CURLOPT_READFUNCTION "(3), "
++.BR CURLOPT_HEADERFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_XFERINFOFUNCTION.3
index 02f471535,000000000..777732b21
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_XFERINFOFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_XFERINFOFUNCTION.3
@@@ -1,84 -1,0 +1,84 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2014, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_XFERINFOFUNCTION 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_XFERINFOFUNCTION \- callback to progress meter function
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +int progress_callback(void *clientp,
 +                      curl_off_t dltotal,
 +                      curl_off_t dlnow,
 +                      curl_off_t ultotal,
 +                      curl_off_t ulnow);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFOFUNCTION, 
progress_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This function gets called by libcurl instead of its internal equivalent with a
 +frequent interval. While data is being transferred it will be called very
 +frequently, and during slow periods like when nothing is being transferred it
 +can slow down to about one call per second.
 +
 +\fIclientp\fP is the pointer set with \fICURLOPT_XFERINFODATA(3)\fP, it is not
 +used by libcurl but is only passed along from the application to the callback.
 +
 +The callback gets told how much data libcurl will transfer and has
 +transferred, in number of bytes. \fIdltotal\fP is the total number of bytes
 +libcurl expects to download in this transfer. \fIdlnow\fP is the number of
 +bytes downloaded so far. \fIultotal\fP is the total number of bytes libcurl
 +expects to upload in this transfer. \fIulnow\fP is the number of bytes
 +uploaded so far.
 +
 +Unknown/unused argument values passed to the callback will be set to zero
 +(like if you only download data, the upload size will remain 0). Many times
 +the callback will be called one or more times first, before it knows the data
 +sizes so a program must be made to handle that.
 +
 +If your callback function returns CURL_PROGRESSFUNC_CONTINUE it will cause
 +libcurl to continue executing the default progress function.
 +
 +Returning any other non-zero value from this callback will cause libcurl to
 +abort the transfer and return \fICURLE_ABORTED_BY_CALLBACK\fP.
 +
 +If you transfer data with the multi interface, this function will not be
 +called during periods of idleness unless you call the appropriate libcurl
 +function that performs transfers.
 +
 +\fICURLOPT_NOPROGRESS(3)\fP must be set to 0 to make this function actually
 +get called.
 +.SH DEFAULT
 +By default, libcurl has an internal progress meter. That's rarely wanted by
 +users.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +https://curl.haxx.se/libcurl/c/progressfunc.html
 +.SH AVAILABILITY
 +Added in 7.32.0. This callback replaces \fICURLOPT_PROGRESSFUNCTION(3)\fP
 +.SH RETURN VALUE
 +Returns CURLE_OK.
 +.SH "SEE ALSO"
 +.BR CURLOPT_XFERINFODATA "(3), " CURLOPT_NOPROGRESS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_XOAUTH2_BEARER.3
index 6bcefa5c4,000000000..60e4c88ee
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_XOAUTH2_BEARER.3
+++ b/docs/libcurl/opts/GNURLOPT_XOAUTH2_BEARER.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <address@hidden>, et al.
++.\" * Copyright (C) 1998 - 2020, 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 GNURLOPT_XOAUTH2_BEARER 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_XOAUTH2_BEARER \- specify OAuth 2.0 access token
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XOAUTH2_BEARER, char *token);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should point to the zero terminated OAuth
 +2.0 Bearer Access Token for use with HTTP, IMAP, POP3 and SMTP servers
 +that support the OAuth 2.0 Authorization Framework.
 +
 +Note: For IMAP, POP3 and SMTP, the user name used to generate the Bearer Token
 +should be supplied via the \fICURLOPT_USERNAME(3)\fP option.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +IMAP, POP3 and SMTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "pop3://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_XOAUTH2_BEARER, "1ab9cb22ba269a7");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.33.0
 +.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 CURLOPT_MAIL_AUTH "(3), " CURLOPT_USERNAME "(3), "
diff --cc include/Makefile.am
index 3d036b8ff,e33aecc00..1f722ddda
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@@ -1,4 -1,25 +1,25 @@@
+ #***************************************************************************
+ #                                  _   _ ____  _
+ #  Project                     ___| | | |  _ \| |
+ #                             / __| | | | |_) | |
+ #                            | (__| |_| |  _ <| |___
+ #                             \___|\___/|_| \_\_____|
+ #
+ # Copyright (C) 1998 - 2020, 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.
+ #
+ ###########################################################################
 -SUBDIRS = curl
 +SUBDIRS = gnurl
  
  EXTRA_DIST = README
  
diff --cc lib/CMakeLists.txt
index dcedbc56d,1d71e1490..94f59159d
--- a/lib/CMakeLists.txt
+++ b/lib/CMakeLists.txt
@@@ -1,4 -1,25 +1,25 @@@
+ #***************************************************************************
+ #                                  _   _ ____  _
+ #  Project                     ___| | | |  _ \| |
+ #                             / __| | | | |_) | |
+ #                            | (__| |_| |  _ <| |___
+ #                             \___|\___/|_| \_\_____|
+ #
+ # Copyright (C) 1998 - 2020, 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.
+ #
+ ###########################################################################
 -set(LIB_NAME libcurl)
 +set(LIB_NAME libgnurl)
  
  if(BUILD_SHARED_LIBS)
    set(CURL_STATICLIB NO)
@@@ -121,6 -147,6 +147,6 @@@ install(TARGETS ${LIB_NAME
  )
  
  export(TARGETS ${LIB_NAME}
 -       APPEND FILE ${PROJECT_BINARY_DIR}/libcurl-target.cmake
 +       APPEND FILE ${PROJECT_BINARY_DIR}/libgnurl-target.cmake
-        NAMESPACE GNURL::
+        NAMESPACE ${PROJECT_NAME}::
  )
diff --cc lib/Makefile.am
index a6c361414,f2886ec63..ada137ffe
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@@ -21,17 -21,18 +21,17 @@@
  ###########################################################################
  AUTOMAKE_OPTIONS = foreign nostdinc
  
 -CMAKE_DIST = CMakeLists.txt curl_config.h.cmake
 +ED_1 = Makefile.m32 config-win32.h config-win32ce.h
 +ED_2 = config-plan9.h config-riscos.h config-mac.h curl_config.h.in
 +ED_3 = makefile.dj config-dos.h libgnurl.plist libcurl.rc config-amigaos.h
 +ED_4 = makefile.amiga Makefile.netware nwlib.c nwos.c config-win32ce.h
 +ED_5 = config-os400.h setup-os400.h config-symbian.h Makefile.Watcom
- ED_6 = config-tpf.h mk-ca-bundle.pl mk-ca-bundle.vbs
- ED_7 = firefox-db2pem.sh config-vxworks.h Makefile.vxworks checksrc.pl
++ED_6 = config-tpf.h mk-ca-bundle.pl mk-ca-bundle.vbs $(CMAKE_DIST)
++ED_7 = firefox-db2pem.sh config-vxworks.h Makefile.vxworks checksrc.pl 
setup-win32.h
  
 -EXTRA_DIST = Makefile.m32 config-win32.h config-win32ce.h           \
 - config-plan9.h config-riscos.h config-mac.h curl_config.h.in       \
 - makefile.dj config-dos.h libcurl.plist libcurl.rc config-amigaos.h \
 - makefile.amiga Makefile.netware nwlib.c nwos.c config-win32ce.h    \
 - config-os400.h setup-os400.h config-symbian.h Makefile.Watcom      \
 - config-tpf.h mk-ca-bundle.pl mk-ca-bundle.vbs $(CMAKE_DIST)        \
 - firefox-db2pem.sh config-vxworks.h Makefile.vxworks checksrc.pl    \
 - setup-win32.h
 +EXTRA_DIST = $(ED_1) $(ED_2) $(ED_3) $(ED_4) $(ED_5) $(ED_6) $(ED_7)
  
 -lib_LTLIBRARIES = libcurl.la
 +lib_LTLIBRARIES = libgnurl.la
  
  if BUILD_UNITTESTS
  noinst_LTLIBRARIES = libcurlu.la
diff --cc lib/Makefile.netware
index f066fd02e,2c16adbac..625f88df1
--- a/lib/Makefile.netware
+++ b/lib/Makefile.netware
@@@ -669,11 -669,9 +669,9 @@@ endi
        @echo $(DL)#endif$(DL) >> $@
  ifdef CABUNDLE
        @echo $(DL)#define CURL_CA_BUNDLE "$(CABUNDLE)"$(DL) >> $@
- else
-       @echo $(DL)#define CURL_CA_BUNDLE getenv("CURL_CA_BUNDLE")$(DL) >> $@
  endif
  
 -$(EXPORTF): $(CURL_INC)/curl/curl.h $(CURL_INC)/curl/easy.h 
$(CURL_INC)/curl/multi.h $(CURL_INC)/curl/mprintf.h
 +$(EXPORTF): $(CURL_INC)/gnurl/curl.h $(CURL_INC)/gnurl/easy.h 
$(CURL_INC)/gnurl/multi.h $(CURL_INC)/gnurl/mprintf.h
        @echo Creating $@
        @$(AWK) -f ../packages/NetWare/get_exp.awk $^ > $@
  
diff --cc lib/gopher.c
index a7e3ebb08,c48098f75..3b47b1803
--- a/lib/gopher.c
+++ b/lib/gopher.c
@@@ -25,9 -25,10 +25,10 @@@
  #ifndef CURL_DISABLE_GOPHER
  
  #include "urldata.h"
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  #include "transfer.h"
  #include "sendf.h"
+ #include "connect.h"
  #include "progress.h"
  #include "gopher.h"
  #include "select.h"
diff --cc libgnurl.pc.in
index f61d6ab04,000000000..1d3bce263
mode 100644,000000..100644
--- a/libgnurl.pc.in
+++ b/libgnurl.pc.in
@@@ -1,39 -1,0 +1,39 @@@
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
- # Copyright (C) 1998 - 2012, Daniel Stenberg, <address@hidden>, et al.
++# Copyright (C) 1998 - 2020, 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 should most probably benefit from getting a "Requires:" field added
 +# dynamically by configure.
 +#
 +prefix=@prefix@
 +exec_prefix=@exec_prefix@
 +libdir=@libdir@
 +includedir=@includedir@
 +supported_protocols="@SUPPORT_PROTOCOLS@"
 +supported_features="@SUPPORT_FEATURES@"
 +
 +Name: libgnurl
 +URL: https://gnunet.org/gnurl/
 +Description: Library to transfer files with http or https
 +Version: @CURLVERSION@
 +Libs: -L${libdir} -lgnurl
 +Libs.private: @LIBCURL_LIBS@
 +Cflags: -I${includedir} @CPPFLAG_CURL_STATICLIB@
diff --cc scripts/installcheck.sh
index b3aad68c8,83d12936a..bc3e6c208
--- a/scripts/installcheck.sh
+++ b/scripts/installcheck.sh
@@@ -1,4 -1,25 +1,25 @@@
 -#!/bin/bash
 +#!/bin/sh
+ #***************************************************************************
+ #                                  _   _ ____  _
+ #  Project                     ___| | | |  _ \| |
+ #                             / __| | | | |_) | |
+ #                            | (__| |_| |  _ <| |___
+ #                             \___|\___/|_| \_\_____|
+ #
+ # Copyright (C) 1998 - 2020, 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.
+ #
+ ###########################################################################
  
  PREFIX=$1
  
diff --cc scripts/travis/before_script.sh
index 8b5497ebe,4292fd695..c71007857
--- a/scripts/travis/before_script.sh
+++ b/scripts/travis/before_script.sh
@@@ -1,4 -1,25 +1,25 @@@
--#!/bin/bash
++#!/bin/sh
+ #***************************************************************************
+ #                                  _   _ ____  _
+ #  Project                     ___| | | |  _ \| |
+ #                             / __| | | | |_) | |
+ #                            | (__| |_| |  _ <| |___
+ #                             \___|\___/|_| \_\_____|
+ #
+ # Copyright (C) 1998 - 2020, 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.
+ #
+ ###########################################################################
  set -eo pipefail
  
  ./buildconf
diff --cc src/CMakeLists.txt
index 838e3b78a,26e3cfe1e..2f4f2c5b1
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@@ -1,4 -1,25 +1,25 @@@
+ #***************************************************************************
+ #                                  _   _ ____  _
+ #  Project                     ___| | | |  _ \| |
+ #                             / __| | | | |_) | |
+ #                            | (__| |_| |  _ <| |___
+ #                             \___|\___/|_| \_\_____|
+ #
+ # Copyright (C) 1998 - 2020, 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.
+ #
+ ###########################################################################
 -set(EXE_NAME curl)
 +set(EXE_NAME gnurl)
  
  if(USE_MANUAL)
    # Use the C locale to ensure that only ASCII characters appear in the
@@@ -43,9 -64,14 +64,14 @@@ endif(
  # CURL_FILES comes from Makefile.inc
  add_executable(
    ${EXE_NAME}
 -  ${CURL_FILES}
 +  ${GNURL_FILES}
    )
  
+ add_executable(
+   ${PROJECT_NAME}::${EXE_NAME}
+   ALIAS ${EXE_NAME}
+   )
+ 
  if(CURL_HAS_LTO)
    set_target_properties(${EXE_NAME} PROPERTIES
      INTERPROCEDURAL_OPTIMIZATION_RELEASE TRUE
@@@ -77,6 -103,6 +103,6 @@@ target_link_libraries(${EXE_NAME} libgn
  
  install(TARGETS ${EXE_NAME} EXPORT ${TARGETS_EXPORT_NAME} DESTINATION 
${CMAKE_INSTALL_BINDIR})
  export(TARGETS ${EXE_NAME}
 -       APPEND FILE ${PROJECT_BINARY_DIR}/curl-target.cmake
 +       APPEND FILE ${PROJECT_BINARY_DIR}/gnurl-target.cmake
-        NAMESPACE GNURL::
+        NAMESPACE ${PROJECT_NAME}::
  )
diff --cc src/Makefile.inc
index c7cbba090,cb886e7bc..e90e6d670
--- a/src/Makefile.inc
+++ b/src/Makefile.inc
@@@ -62,9 -83,10 +83,10 @@@ GNURL_CFILES = 
    tool_util.c \
    tool_vms.c \
    tool_writeout.c \
+   tool_writeout_json.c \
    tool_xattr.c
  
 -CURL_HFILES = \
 +GNURL_HFILES = \
    slist_wc.h \
    tool_binmode.h \
    tool_bname.h \
@@@ -107,9 -129,10 +129,10 @@@
    tool_version.h \
    tool_vms.h \
    tool_writeout.h \
+   tool_writeout_json.h \
    tool_xattr.h
  
 -CURL_RCFILES = curl.rc
 +GNURL_RCFILES = curl.rc
  
  # curl_SOURCES is special and gets assigned in src/Makefile.am
 -CURL_FILES = $(CURL_CFILES) $(CURLX_CFILES) $(CURL_HFILES)
 +GNURL_FILES = $(GNURL_CFILES) $(GNURLX_CFILES) $(GNURL_HFILES)
diff --cc tests/.gitignore
index cfd109379,00f787cc8..be918f327
--- a/tests/.gitignore
+++ b/tests/.gitignore
@@@ -18,8 -18,4 +18,8 @@@ runtests.htm
  runtests.pdf
  testcurl.html
  testcurl.pdf
- 
 -*.port
 +dictserver.py
 +smbserver.py
 +curl_test_data.py
 +negtelnetserver.py
++*.port
diff --cc tests/Makefile.am
index 16cb9ae1b,cea09d146..c6fe764b3
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@@ -20,30 -20,20 +20,21 @@@
  #
  ###########################################################################
  
 -HTMLPAGES = testcurl.html runtests.html
 -PDFPAGES = testcurl.pdf runtests.pdf
  MANDISTPAGES = runtests.1.dist testcurl.1.dist
  
- # the path to the impacket python lib used for SMB tests
- IMP = python_dependencies/impacket
- 
- SMB_1 = $(IMP)/__init__.py $(IMP)/nmb.py $(IMP)/nt_errors.py
- SMB_2 = $(IMP)/ntlm.py $(IMP)/smb.py $(IMP)/smb3.py $(IMP)/smb3structs.py
- SMB_3 = $(IMP)/smbserver.py $(IMP)/spnego.py $(IMP)/structure.py
- SMB_4 = $(IMP)/uuid.py $(IMP)/version.py smbserver.py.in curl_test_data.py.in
- SMBDEPS = $(SMB_1) $(SMB_2) $(SMB_3) $(SMB_4)
- 
 -EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl           
\
 - getpart.pm FILEFORMAT.md README stunnel.pem memanalyze.pl testcurl.pl        
\
 - valgrind.pm ftp.pm sshserver.pl sshhelp.pm pathhelp.pm testcurl.1 runtests.1 
\
 - serverhelp.pm tftpserver.pl rtspserver.pl directories.pm symbol-scan.pl      
\
 - CMakeLists.txt mem-include-scan.pl valgrind.supp extern-scan.pl              
\
 - manpage-scan.pl nroff-scan.pl http2-server.pl dictserver.py                  
\
 - negtelnetserver.py smbserver.py curl_test_data.py                            
\
 - objnames-test08.sh objnames-test10.sh objnames.inc                           
\
 - disable-scan.pl manpage-syntax.pl error-codes.pl badsymbols.pl               
\
 - azure.pm appveyor.pm version-scan.pl
 +ED_1 = ftpserver.pl httpserver.pl secureserver.pl runtests.pl
- ED_2 = getpart.pm FILEFORMAT README stunnel.pem memanalyze.pl testcurl.pl
++ED_2 = getpart.pm FILEFORMAT.md README stunnel.pem memanalyze.pl testcurl.pl
 +ED_3 = valgrind.pm ftp.pm sshserver.pl sshhelp.pm pathhelp.pm testcurl.1 
runtests.1
 +ED_4 = serverhelp.pm tftpserver.pl rtspserver.pl directories.pm symbol-scan.pl
- ED_5 = mem-include-scan.pl valgrind.supp extern-scan.pl
++ED_5 = CMakeLists.txt mem-include-scan.pl valgrind.supp extern-scan.pl
 +ED_6 = manpage-scan.pl nroff-scan.pl http2-server.pl dictserver.py.in
- ED_7 = negtelnetserver.py.in $(SMBDEPS) objnames-test08.sh objnames-test10.sh
- ED_8 = objnames.inc disable-scan.pl error-codes.pl CMakeLists.txt
- ED_9 = badsymbols.pl azure.pm appveyor.pm
++ED_7 = negtelnetserver.py.in smbserver.py.in curl_test_data.py.in 
objnames-test08.sh objnames-test10.sh
++ED_8 = objnames.inc disable-scan.pl error-codes.pl
++ED_9 = badsymbols.pl azure.pm appveyor.pm version-scan.pl
 +
 +EXTRA_DIST = $(ED_1) $(ED_2) $(ED_3) $(ED_4) $(ED_5) $(ED_6) $(ED_7) $(ED_8) 
$(ED_9)
 +
 +check_SCRIPTS = smbserver.py curl_test_data.py negtelnetserver.py 
dictserver.py
  
  DISTCLEANFILES = configurehelp.pm
  
diff --cc tests/certs/scripts/genroot.sh
index 40fbd365a,963f34350..0c7d13bbc
--- a/tests/certs/scripts/genroot.sh
+++ b/tests/certs/scripts/genroot.sh
@@@ -1,6 -1,6 +1,6 @@@
 -#!/bin/bash
 +#!/bin/sh
  
- # (c) CopyRight EdelWeb for EdelKey and OpenEvidence, 2000-2004, 2009
+ # (c) CopyRight 2000 - 2020, EdelWeb for EdelKey and OpenEvidence
  # Author: Peter Sylvester
  
  # "libre" for integration with curl
diff --cc tests/certs/scripts/genserv.sh
index d09ab0559,dcbc0486b..f1638071d
--- a/tests/certs/scripts/genserv.sh
+++ b/tests/certs/scripts/genserv.sh
@@@ -1,6 -1,6 +1,6 @@@
 -#!/bin/bash
 +#!/bin/sh
  
- # (c) CopyRight EdelWeb for EdelKey and OpenEvidence, 2000-2004, 2009
+ # (c) CopyRight 2000 - 2020, EdelWeb for EdelKey and OpenEvidence
  # Author: Peter Sylvester
  
  # "libre" for integration with curl
diff --cc tests/curl_test_data.py.in
index 6928b2c2b,000000000..9e21ca122
mode 100755,000000..100755
--- a/tests/curl_test_data.py.in
+++ b/tests/curl_test_data.py.in
@@@ -1,61 -1,0 +1,61 @@@
 +#!AWKPYTHON
 +# -*- coding: utf-8 -*-
 +#
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
- # Copyright (C) 2017, Daniel Stenberg, <address@hidden>, et al.
++# Copyright (C) 2017 - 2020, 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.
 +#
 +"""Module for extracting test data from the test data folder"""
 +
 +from __future__ import (absolute_import, division, print_function,
 +                        unicode_literals)
 +import os
 +import re
 +import logging
 +
 +log = logging.getLogger(__name__)
 +
 +
- REPLY_DATA = re.compile("<reply>\s*<data>(.*?)</data>", re.MULTILINE | 
re.DOTALL)
++REPLY_DATA = re.compile("<reply>[ \t\n\r]*<data[^<]*>(.*?)</data>", 
re.MULTILINE | re.DOTALL)
 +
 +
 +class TestData(object):
 +    def __init__(self, data_folder):
 +        self.data_folder = data_folder
 +
 +    def get_test_data(self, test_number):
 +        # Create the test file name
 +        filename = os.path.join(self.data_folder,
 +                                "test{0}".format(test_number))
 +
 +        log.debug("Parsing file %s", filename)
 +
 +        with open(filename, "rb") as f:
 +            contents = f.read().decode("utf-8")
 +
 +        m = REPLY_DATA.search(contents)
 +        if not m:
 +            raise Exception("Couldn't find a <reply><data> section")
 +
 +        # Left-strip the data so we don't get a newline before our data.
 +        return m.group(1).lstrip()
 +
 +
 +if __name__ == '__main__':
 +    td = TestData("./data")
 +    data = td.get_test_data(1)
 +    print(data)
diff --cc tests/data/DISABLED
index f0d6f8c7f,198728fdf..da7663e89
--- a/tests/data/DISABLED
+++ b/tests/data/DISABLED
@@@ -28,5 -27,6 +27,8 @@@
  1901
  1902
  2033
 +# Unused in gnurl
- test1173
++1173
+ # Uses SRP to "a server not supporting it" but modern stunnel versions
+ # will silently accept it and remain happy
+ 323
diff --cc tests/dictserver.py.in
index 9f2cc984b,000000000..e08617f5e
mode 100755,000000..100755
--- a/tests/dictserver.py.in
+++ b/tests/dictserver.py.in
@@@ -1,161 -1,0 +1,189 @@@
 +#!AWKPYTHON
 +# -*- coding: utf-8 -*-
++#***************************************************************************
++#                                  _   _ ____  _
++#  Project                     ___| | | |  _ \| |
++#                             / __| | | | |_) | |
++#                            | (__| |_| |  _ <| |___
++#                             \___|\___/|_| \_\_____|
++#
++# Copyright (C) 2008 - 2020, 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.
++#
++###########################################################################
 +#
 +""" DICT server """
 +
 +from __future__ import (absolute_import, division, print_function,
 +                        unicode_literals)
 +import argparse
 +import os
 +import sys
 +import logging
 +try:  # Python 2
 +    import SocketServer as socketserver
 +except ImportError:  # Python 3
 +    import socketserver
 +
 +
 +log = logging.getLogger(__name__)
 +HOST = "localhost"
 +
 +# The strings that indicate the test framework is checking our aliveness
 +VERIFIED_REQ = b"verifiedserver"
 +VERIFIED_RSP = "WE ROOLZ: {pid}"
 +
 +
 +def dictserver(options):
 +    """
 +    Starts up a TCP server with a DICT handler and serves DICT requests
 +    forever.
 +    """
 +    if options.pidfile:
 +        pid = os.getpid()
++        # see tests/server/util.c function write_pidfile
++        if os.name == "nt":
++            pid += 65536
 +        with open(options.pidfile, "w") as f:
-             f.write("{0}".format(pid))
++            f.write(str(pid))
 +
 +    local_bind = (options.host, options.port)
 +    log.info("[DICT] Listening on %s", local_bind)
 +
 +    # Need to set the allow_reuse on the class, not on the instance.
 +    socketserver.TCPServer.allow_reuse_address = True
 +    server = socketserver.TCPServer(local_bind, DictHandler)
 +    server.serve_forever()
 +
 +    return ScriptRC.SUCCESS
 +
 +
 +class DictHandler(socketserver.BaseRequestHandler):
 +    """Handler class for DICT connections.
 +
 +    """
 +    def handle(self):
 +        """
 +        Simple function which responds to all queries with a 552.
 +        """
 +        try:
 +            # First, send a response to allow the server to continue.
 +            rsp = "220 dictserver <xnooptions> <msgid@msgid>\n"
 +            self.request.sendall(rsp.encode("utf-8"))
 +
 +            # Receive the request.
 +            data = self.request.recv(1024).strip()
 +            log.debug("[DICT] Incoming data: %r", data)
 +
 +            if VERIFIED_REQ in data:
 +                log.debug("[DICT] Received verification request from test "
 +                          "framework")
-                 response_data = VERIFIED_RSP.format(pid=os.getpid())
++                pid = os.getpid()
++                # see tests/server/util.c function write_pidfile
++                if os.name == "nt":
++                    pid += 65536
++                response_data = VERIFIED_RSP.format(pid=pid)
 +            else:
 +                log.debug("[DICT] Received normal request")
 +                response_data = "No matches"
 +
 +            # Send back a failure to find.
 +            response = "552 {0}\n".format(response_data)
 +            log.debug("[DICT] Responding with %r", response)
 +            self.request.sendall(response.encode("utf-8"))
 +
 +        except IOError:
 +            log.exception("[DICT] IOError hit during request")
 +
 +
 +def get_options():
 +    parser = argparse.ArgumentParser()
 +
 +    parser.add_argument("--port", action="store", default=9016,
 +                        type=int, help="port to listen on")
 +    parser.add_argument("--host", action="store", default=HOST,
 +                        help="host to listen on")
 +    parser.add_argument("--verbose", action="store", type=int, default=0,
 +                        help="verbose output")
 +    parser.add_argument("--pidfile", action="store",
 +                        help="file name for the PID")
 +    parser.add_argument("--logfile", action="store",
 +                        help="file name for the log")
 +    parser.add_argument("--srcdir", action="store", help="test directory")
 +    parser.add_argument("--id", action="store", help="server ID")
 +    parser.add_argument("--ipv4", action="store_true", default=0,
 +                        help="IPv4 flag")
 +
 +    return parser.parse_args()
 +
 +
 +def setup_logging(options):
 +    """
 +    Set up logging from the command line options
 +    """
 +    root_logger = logging.getLogger()
 +    add_stdout = False
 +
 +    formatter = logging.Formatter("%(asctime)s %(levelname)-5.5s %(message)s")
 +
 +    # Write out to a logfile
 +    if options.logfile:
 +        handler = logging.FileHandler(options.logfile, mode="w")
 +        handler.setFormatter(formatter)
 +        handler.setLevel(logging.DEBUG)
 +        root_logger.addHandler(handler)
 +    else:
 +        # The logfile wasn't specified. Add a stdout logger.
 +        add_stdout = True
 +
 +    if options.verbose:
 +        # Add a stdout logger as well in verbose mode
 +        root_logger.setLevel(logging.DEBUG)
 +        add_stdout = True
 +    else:
 +        root_logger.setLevel(logging.INFO)
 +
 +    if add_stdout:
 +        stdout_handler = logging.StreamHandler(sys.stdout)
 +        stdout_handler.setFormatter(formatter)
 +        stdout_handler.setLevel(logging.DEBUG)
 +        root_logger.addHandler(stdout_handler)
 +
 +
 +class ScriptRC(object):
 +    """Enum for script return codes"""
 +    SUCCESS = 0
 +    FAILURE = 1
 +    EXCEPTION = 2
 +
 +
 +class ScriptException(Exception):
 +    pass
 +
 +
 +if __name__ == '__main__':
 +    # Get the options from the user.
 +    options = get_options()
 +
 +    # Setup logging using the user options
 +    setup_logging(options)
 +
 +    # Run main script.
 +    try:
 +        rc = dictserver(options)
 +    except Exception as e:
 +        log.exception(e)
 +        rc = ScriptRC.EXCEPTION
 +
 +    log.info("[DICT] Returning %d", rc)
 +    sys.exit(rc)
diff --cc tests/fuzz/download_fuzzer.sh
index b19fbb7ba,9b43fcd0a..a0669e169
--- a/tests/fuzz/download_fuzzer.sh
+++ b/tests/fuzz/download_fuzzer.sh
@@@ -1,4 -1,25 +1,25 @@@
 -#!/bin/bash
 +#!/bin/sh
+ #***************************************************************************
+ #                                  _   _ ____  _
+ #  Project                     ___| | | |  _ \| |
+ #                             / __| | | | |_) | |
+ #                            | (__| |_| |  _ <| |___
+ #                             \___|\___/|_| \_\_____|
+ #
+ # Copyright (C) 1998 - 2020, 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.
+ #
+ ###########################################################################
  
  # If any commands fail, fail the script immediately.
  set -ex
diff --cc tests/negtelnetserver.py.in
index 1d9459926,000000000..fbe3a5f63
mode 100755,000000..100755
--- a/tests/negtelnetserver.py.in
+++ b/tests/negtelnetserver.py.in
@@@ -1,340 -1,0 +1,364 @@@
 +#!AWKPYTHON
 +# -*- coding: utf-8 -*-
 +#
++#  Project                     ___| | | |  _ \| |
++#                             / __| | | | |_) | |
++#                            | (__| |_| |  _ <| |___
++#                             \___|\___/|_| \_\_____|
++#
++# Copyright (C) 2017 - 2020, 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.
++#
 +""" A telnet server which negotiates"""
 +
 +from __future__ import (absolute_import, division, print_function,
 +                        unicode_literals)
 +import argparse
 +import os
 +import sys
 +import logging
- try:  # Python 2
-     import SocketServer as socketserver
- except ImportError:  # Python 3
++if sys.version_info.major >= 3:
 +    import socketserver
- 
++else:
++    import SocketServer as socketserver
 +
 +log = logging.getLogger(__name__)
 +HOST = "localhost"
 +IDENT = "NTEL"
 +
 +
 +# The strings that indicate the test framework is checking our aliveness
 +VERIFIED_REQ = "verifiedserver"
 +VERIFIED_RSP = "WE ROOLZ: {pid}"
 +
 +
 +def telnetserver(options):
 +    """
 +    Starts up a TCP server with a telnet handler and serves DICT requests
 +    forever.
 +    """
 +    if options.pidfile:
 +        pid = os.getpid()
++        # see tests/server/util.c function write_pidfile
++        if os.name == "nt":
++            pid += 65536
 +        with open(options.pidfile, "w") as f:
 +            f.write(str(pid))
 +
 +    local_bind = (HOST, options.port)
 +    log.info("Listening on %s", local_bind)
 +
 +    # Need to set the allow_reuse on the class, not on the instance.
 +    socketserver.TCPServer.allow_reuse_address = True
 +    server = socketserver.TCPServer(local_bind, NegotiatingTelnetHandler)
 +    server.serve_forever()
 +
 +    return ScriptRC.SUCCESS
 +
 +
 +class NegotiatingTelnetHandler(socketserver.BaseRequestHandler):
 +    """Handler class for Telnet connections.
 +
 +    """
 +    def handle(self):
 +        """
 +        Negotiates options before reading data.
 +        """
 +        neg = Negotiator(self.request)
 +
 +        try:
 +            # Send some initial negotiations.
 +            neg.send_do("NEW_ENVIRON")
 +            neg.send_will("NEW_ENVIRON")
 +            neg.send_dont("NAWS")
 +            neg.send_wont("NAWS")
 +
 +            # Get the data passed through the negotiator
 +            data = neg.recv(1024)
 +            log.debug("Incoming data: %r", data)
 +
-             if VERIFIED_REQ.encode('ascii') in data:
++            if VERIFIED_REQ.encode('utf-8') in data:
 +                log.debug("Received verification request from test framework")
-                 response = VERIFIED_RSP.format(pid=os.getpid())
-                 response_data = response.encode('ascii')
++                pid = os.getpid()
++                # see tests/server/util.c function write_pidfile
++                if os.name == "nt":
++                    pid += 65536
++                response = VERIFIED_RSP.format(pid=pid)
++                response_data = response.encode('utf-8')
 +            else:
 +                log.debug("Received normal request - echoing back")
-                 response_data = data.strip()
++                response_data = data.decode('utf-8').strip().encode('utf-8')
 +
 +            if response_data:
 +                log.debug("Sending %r", response_data)
 +                self.request.sendall(response_data)
 +
 +        except IOError:
 +            log.exception("IOError hit during request")
 +
 +
 +class Negotiator(object):
 +    NO_NEG = 0
 +    START_NEG = 1
 +    WILL = 2
 +    WONT = 3
 +    DO = 4
 +    DONT = 5
 +
 +    def __init__(self, tcp):
 +        self.tcp = tcp
 +        self.state = self.NO_NEG
 +
 +    def recv(self, bytes):
 +        """
 +        Read bytes from TCP, handling negotiation sequences
 +
 +        :param bytes: Number of bytes to read
 +        :return: a buffer of bytes
 +        """
 +        buffer = bytearray()
 +
 +        # If we keep receiving negotiation sequences, we won't fill the 
buffer.
 +        # Keep looping while we can, and until we have something to give back
 +        # to the caller.
 +        while len(buffer) == 0:
 +            data = self.tcp.recv(bytes)
 +            if not data:
 +                # TCP failed to give us any data. Break out.
 +                break
 +
 +            for byte_int in bytearray(data):
 +                if self.state == self.NO_NEG:
 +                    self.no_neg(byte_int, buffer)
 +                elif self.state == self.START_NEG:
 +                    self.start_neg(byte_int)
 +                elif self.state in [self.WILL, self.WONT, self.DO, self.DONT]:
 +                    self.handle_option(byte_int)
 +                else:
 +                    # Received an unexpected byte. Stop negotiations
 +                    log.error("Unexpected byte %s in state %s",
 +                              byte_int,
 +                              self.state)
 +                    self.state = self.NO_NEG
 +
 +        return buffer
 +
 +    def no_neg(self, byte_int, buffer):
 +        # Not negotiating anything thus far. Check to see if we
 +        # should.
 +        if byte_int == NegTokens.IAC:
 +            # Start negotiation
 +            log.debug("Starting negotiation (IAC)")
 +            self.state = self.START_NEG
 +        else:
 +            # Just append the incoming byte to the buffer
 +            buffer.append(byte_int)
 +
 +    def start_neg(self, byte_int):
 +        # In a negotiation.
 +        log.debug("In negotiation (%s)",
 +                  NegTokens.from_val(byte_int))
 +
 +        if byte_int == NegTokens.WILL:
 +            # Client is confirming they are willing to do an option
 +            log.debug("Client is willing")
 +            self.state = self.WILL
 +        elif byte_int == NegTokens.WONT:
 +            # Client is confirming they are unwilling to do an
 +            # option
 +            log.debug("Client is unwilling")
 +            self.state = self.WONT
 +        elif byte_int == NegTokens.DO:
 +            # Client is indicating they can do an option
 +            log.debug("Client can do")
 +            self.state = self.DO
 +        elif byte_int == NegTokens.DONT:
 +            # Client is indicating they can't do an option
 +            log.debug("Client can't do")
 +            self.state = self.DONT
 +        else:
 +            # Received an unexpected byte. Stop negotiations
 +            log.error("Unexpected byte %s in state %s",
 +                      byte_int,
 +                      self.state)
 +            self.state = self.NO_NEG
 +
 +    def handle_option(self, byte_int):
 +        if byte_int in [NegOptions.BINARY,
 +                        NegOptions.CHARSET,
 +                        NegOptions.SUPPRESS_GO_AHEAD,
 +                        NegOptions.NAWS,
 +                        NegOptions.NEW_ENVIRON]:
 +            log.debug("Option: %s", NegOptions.from_val(byte_int))
 +
 +            # No further negotiation of this option needed. Reset the state.
 +            self.state = self.NO_NEG
 +
 +        else:
 +            # Received an unexpected byte. Stop negotiations
 +            log.error("Unexpected byte %s in state %s",
 +                      byte_int,
 +                      self.state)
 +            self.state = self.NO_NEG
 +
 +    def send_message(self, message_ints):
 +        self.tcp.sendall(bytearray(message_ints))
 +
 +    def send_iac(self, arr):
 +        message = [NegTokens.IAC]
 +        message.extend(arr)
 +        self.send_message(message)
 +
 +    def send_do(self, option_str):
 +        log.debug("Sending DO %s", option_str)
 +        self.send_iac([NegTokens.DO, NegOptions.to_val(option_str)])
 +
 +    def send_dont(self, option_str):
 +        log.debug("Sending DONT %s", option_str)
 +        self.send_iac([NegTokens.DONT, NegOptions.to_val(option_str)])
 +
 +    def send_will(self, option_str):
 +        log.debug("Sending WILL %s", option_str)
 +        self.send_iac([NegTokens.WILL, NegOptions.to_val(option_str)])
 +
 +    def send_wont(self, option_str):
 +        log.debug("Sending WONT %s", option_str)
 +        self.send_iac([NegTokens.WONT, NegOptions.to_val(option_str)])
 +
 +
 +class NegBase(object):
 +    @classmethod
 +    def to_val(cls, name):
 +        return getattr(cls, name)
 +
 +    @classmethod
 +    def from_val(cls, val):
 +        for k in cls.__dict__.keys():
 +            if getattr(cls, k) == val:
 +                return k
 +
 +        return "<unknown>"
 +
 +
 +class NegTokens(NegBase):
 +    # The start of a negotiation sequence
 +    IAC = 255
 +    # Confirm willingness to negotiate
 +    WILL = 251
 +    # Confirm unwillingness to negotiate
 +    WONT = 252
 +    # Indicate willingness to negotiate
 +    DO = 253
 +    # Indicate unwillingness to negotiate
 +    DONT = 254
 +
 +    # The start of sub-negotiation options.
 +    SB = 250
 +    # The end of sub-negotiation options.
 +    SE = 240
 +
 +
 +class NegOptions(NegBase):
 +    # Binary Transmission
 +    BINARY = 0
 +    # Suppress Go Ahead
 +    SUPPRESS_GO_AHEAD = 3
 +    # NAWS - width and height of client
 +    NAWS = 31
 +    # NEW-ENVIRON - environment variables on client
 +    NEW_ENVIRON = 39
 +    # Charset option
 +    CHARSET = 42
 +
 +
 +def get_options():
 +    parser = argparse.ArgumentParser()
 +
 +    parser.add_argument("--port", action="store", default=9019,
 +                        type=int, help="port to listen on")
 +    parser.add_argument("--verbose", action="store", type=int, default=0,
 +                        help="verbose output")
 +    parser.add_argument("--pidfile", action="store",
 +                        help="file name for the PID")
 +    parser.add_argument("--logfile", action="store",
 +                        help="file name for the log")
 +    parser.add_argument("--srcdir", action="store", help="test directory")
 +    parser.add_argument("--id", action="store", help="server ID")
 +    parser.add_argument("--ipv4", action="store_true", default=0,
 +                        help="IPv4 flag")
 +
 +    return parser.parse_args()
 +
 +
 +def setup_logging(options):
 +    """
 +    Set up logging from the command line options
 +    """
 +    root_logger = logging.getLogger()
 +    add_stdout = False
 +
 +    formatter = logging.Formatter("%(asctime)s %(levelname)-5.5s "
 +                                  "[{ident}] %(message)s"
 +                                  .format(ident=IDENT))
 +
 +    # Write out to a logfile
 +    if options.logfile:
 +        handler = logging.FileHandler(options.logfile, mode="w")
 +        handler.setFormatter(formatter)
 +        handler.setLevel(logging.DEBUG)
 +        root_logger.addHandler(handler)
 +    else:
 +        # The logfile wasn't specified. Add a stdout logger.
 +        add_stdout = True
 +
 +    if options.verbose:
 +        # Add a stdout logger as well in verbose mode
 +        root_logger.setLevel(logging.DEBUG)
 +        add_stdout = True
 +    else:
 +        root_logger.setLevel(logging.INFO)
 +
 +    if add_stdout:
 +        stdout_handler = logging.StreamHandler(sys.stdout)
 +        stdout_handler.setFormatter(formatter)
 +        stdout_handler.setLevel(logging.DEBUG)
 +        root_logger.addHandler(stdout_handler)
 +
 +
 +class ScriptRC(object):
 +    """Enum for script return codes"""
 +    SUCCESS = 0
 +    FAILURE = 1
 +    EXCEPTION = 2
 +
 +
 +class ScriptException(Exception):
 +    pass
 +
 +
 +if __name__ == '__main__':
 +    # Get the options from the user.
 +    options = get_options()
 +
 +    # Setup logging using the user options
 +    setup_logging(options)
 +
 +    # Run main script.
 +    try:
 +        rc = telnetserver(options)
 +    except Exception as e:
 +        log.exception(e)
 +        rc = ScriptRC.EXCEPTION
 +
 +    log.info("Returning %d", rc)
 +    sys.exit(rc)
diff --cc tests/runtests.pl
index 47c3931af,fe794b3b7..f37e157f4
--- a/tests/runtests.pl
+++ b/tests/runtests.pl
@@@ -123,41 -124,45 +124,45 @@@ my $base = 8990; # base port numbe
  my $minport;     # minimum used port number
  my $maxport;     # maximum used port number
  
- my $HTTPPORT;            # HTTP server port
- my $HTTP6PORT;           # HTTP IPv6 server port
- my $HTTPSPORT;           # HTTPS (stunnel) server port
- my $FTPPORT;             # FTP server port
- my $FTP2PORT;            # FTP server 2 port
- my $FTPSPORT;            # FTPS (stunnel) server port
- my $FTP6PORT;            # FTP IPv6 server port
- my $TFTPPORT;            # TFTP
- my $TFTP6PORT;           # TFTP
- my $SSHPORT;             # SCP/SFTP
- my $SOCKSPORT;           # SOCKS4/5 port
- my $POP3PORT;            # POP3
- my $POP36PORT;           # POP3 IPv6 server port
- my $IMAPPORT;            # IMAP
- my $IMAP6PORT;           # IMAP IPv6 server port
- my $SMTPPORT;            # SMTP
- my $SMTP6PORT;           # SMTP IPv6 server port
- my $RTSPPORT;            # RTSP
- my $RTSP6PORT;           # RTSP IPv6 server port
- my $GOPHERPORT;          # Gopher
- my $GOPHER6PORT;         # Gopher IPv6 server port
- my $HTTPTLSPORT;         # HTTP TLS (non-stunnel) server port
- my $HTTPTLS6PORT;        # HTTP TLS (non-stunnel) IPv6 server port
- my $HTTPPROXYPORT;       # HTTP proxy port, when using CONNECT
+ my $noport="[not running]";
+ 
+ my $NOLISTENPORT=47;     # port number we use for a local non-listening 
service
+ my $MQTTPORT=$noport;    # MQTT server port
+ my $HTTPPORT=$noport;    # HTTP server port
+ my $HTTP6PORT=$noport;   # HTTP IPv6 server port
+ my $HTTPSPORT=$noport;   # HTTPS (stunnel) server port
+ my $FTPPORT=$noport;     # FTP server port
+ my $FTP2PORT=$noport;    # FTP server 2 port
+ my $FTPSPORT=$noport;    # FTPS (stunnel) server port
+ my $FTP6PORT=$noport;    # FTP IPv6 server port
+ my $TFTPPORT=$noport;    # TFTP
+ my $TFTP6PORT=$noport;   # TFTP
+ my $SSHPORT=$noport;     # SCP/SFTP
+ my $SOCKSPORT=$noport;   # SOCKS4/5 port
+ my $POP3PORT=$noport;    # POP3
+ my $POP36PORT=$noport;   # POP3 IPv6 server port
+ my $IMAPPORT=$noport;    # IMAP
+ my $IMAP6PORT=$noport;   # IMAP IPv6 server port
+ my $SMTPPORT=$noport;    # SMTP
+ my $SMTP6PORT=$noport;   # SMTP IPv6 server port
+ my $RTSPPORT=$noport;    # RTSP
+ my $RTSP6PORT=$noport;   # RTSP IPv6 server port
+ my $GOPHERPORT=$noport;  # Gopher
+ my $GOPHER6PORT=$noport; # Gopher IPv6 server port
+ my $HTTPTLSPORT=$noport; # HTTP TLS (non-stunnel) server port
+ my $HTTPTLS6PORT=$noport; # HTTP TLS (non-stunnel) IPv6 server port
+ my $HTTPPROXYPORT=$noport; # HTTP proxy port, when using CONNECT
+ my $HTTP2PORT=$noport;   # HTTP/2 server port
+ my $DICTPORT=$noport;    # DICT server port
+ my $SMBPORT=$noport;     # SMB server port
+ my $SMBSPORT=$noport;    # SMBS server port
+ my $NEGTELNETPORT=$noport; # TELNET server port with negotiation
  my $HTTPUNIXPATH;        # HTTP server Unix domain socket path
- my $HTTP2PORT;           # HTTP/2 server port
- my $DICTPORT;            # DICT server port
- my $SMBPORT;             # SMB server port
- my $SMBSPORT;            # SMBS server port
- my $NEGTELNETPORT;       # TELNET server port with negotiation
  
- my $SSHSRVMD5;           # MD5 of ssh server public key
+ my $SSHSRVMD5 = "[uninitialized]"; # MD5 of ssh server public key
  
  my $srcdir = $ENV{'srcdir'} || '.';
 -my $CURL="../src/curl".exe_ext('TOOL'); # what curl executable to run on the 
tests
 +my $CURL="../src/gnurl".exe_ext('TOOL'); # what curl executable to run on the 
tests
  my $VCURL=$CURL;   # what curl binary to use to verify the servers with
                     # VCURL is handy to set to the system one when the one you
                     # just built hangs or crashes and thus prevent verification
@@@ -171,9 -176,9 +176,9 @@@ my $SERVERIN="$LOGDIR/server.input"; # 
  my $SERVER2IN="$LOGDIR/server2.input"; # what curl sent the second server
  my $PROXYIN="$LOGDIR/proxy.input"; # what curl sent the proxy
  my $CURLLOG="commands.log"; # all command lines run
- my $FTPDCMD="$LOGDIR/ftpserver.cmd"; # copy ftp server instructions here
+ my $FTPDCMD="$LOGDIR/ftpserver.cmd"; # copy server instructions here
  my $SERVERLOGS_LOCK="$LOGDIR/serverlogs.lock"; # server logs advisor read lock
 -my $CURLCONFIG="../curl-config"; # curl-config from current build
 +my $CURLCONFIG="../gnurl-config"; # curl-config from current build
  
  # Normally, all test cases should be run, but at times it is handy to
  # simply run a particular one:
diff --cc tests/smbserver.py.in
index 2677f0c46,000000000..f752c17a2
mode 100755,000000..100755
--- a/tests/smbserver.py.in
+++ b/tests/smbserver.py.in
@@@ -1,382 -1,0 +1,393 @@@
 +#!AWKPYTHON
 +# -*- coding: utf-8 -*-
 +#
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
- # Copyright (C) 2017, Daniel Stenberg, <address@hidden>, et al.
++# Copyright (C) 2017 - 2020, 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.
 +#
 +"""Server for testing SMB"""
 +
 +from __future__ import (absolute_import, division, print_function)
- # unicode_literals)
++# NOTE: the impacket configuration is not unicode_literals compatible!
 +import argparse
 +import os
 +import sys
 +import logging
 +import tempfile
- try: # Python 3
++if sys.version_info.major >= 3:
 +    import configparser
- except ImportError: # Python 2
++else:
 +    import ConfigParser as configparser
 +
 +# Import our curl test data helper
 +import curl_test_data
 +
- # This saves us having to set up the PYTHONPATH explicitly
- deps_dir = os.path.join(os.path.dirname(__file__), "python_dependencies")
- sys.path.append(deps_dir)
++# impacket needs to be installed in the Python environment
++try:
++    import impacket
++except ImportError:
++    sys.stderr.write('Python package impacket needs to be installed!\n')
++    sys.stderr.write('Use pip or your package manager to install it.\n')
++    sys.exit(1)
 +from impacket import smbserver as imp_smbserver
 +from impacket import smb as imp_smb
 +from impacket.nt_errors import (STATUS_ACCESS_DENIED, STATUS_SUCCESS,
 +                                STATUS_NO_SUCH_FILE)
 +
 +log = logging.getLogger(__name__)
 +SERVER_MAGIC = "SERVER_MAGIC"
 +TESTS_MAGIC = "TESTS_MAGIC"
 +VERIFIED_REQ = "verifiedserver"
- VERIFIED_RSP = b"WE ROOLZ: {pid}\n"
++VERIFIED_RSP = "WE ROOLZ: {pid}\n"
 +
 +
 +def smbserver(options):
 +    """Start up a TCP SMB server that serves forever
 +
 +    """
 +    if options.pidfile:
 +        pid = os.getpid()
++        # see tests/server/util.c function write_pidfile
++        if os.name == "nt":
++            pid += 65536
 +        with open(options.pidfile, "w") as f:
-             f.write("{0}".format(pid))
++            f.write(str(pid))
 +
 +    # Here we write a mini config for the server
 +    smb_config = configparser.ConfigParser()
 +    smb_config.add_section("global")
 +    smb_config.set("global", "server_name", "SERVICE")
 +    smb_config.set("global", "server_os", "UNIX")
 +    smb_config.set("global", "server_domain", "WORKGROUP")
 +    smb_config.set("global", "log_file", "")
 +    smb_config.set("global", "credentials_file", "")
 +
 +    # We need a share which allows us to test that the server is running
 +    smb_config.add_section("SERVER")
 +    smb_config.set("SERVER", "comment", "server function")
 +    smb_config.set("SERVER", "read only", "yes")
 +    smb_config.set("SERVER", "share type", "0")
 +    smb_config.set("SERVER", "path", SERVER_MAGIC)
 +
 +    # Have a share for tests.  These files will be autogenerated from the
 +    # test input.
 +    smb_config.add_section("TESTS")
 +    smb_config.set("TESTS", "comment", "tests")
 +    smb_config.set("TESTS", "read only", "yes")
 +    smb_config.set("TESTS", "share type", "0")
 +    smb_config.set("TESTS", "path", TESTS_MAGIC)
 +
 +    if not options.srcdir or not os.path.isdir(options.srcdir):
 +        raise ScriptException("--srcdir is mandatory")
 +
 +    test_data_dir = os.path.join(options.srcdir, "data")
 +
 +    smb_server = TestSmbServer((options.host, options.port),
 +                               config_parser=smb_config,
 +                               test_data_directory=test_data_dir)
 +    log.info("[SMB] setting up SMB server on port %s", options.port)
 +    smb_server.processConfigFile()
 +    smb_server.serve_forever()
 +    return 0
 +
 +
 +class TestSmbServer(imp_smbserver.SMBSERVER):
 +    """
 +    Test server for SMB which subclasses the impacket SMBSERVER and provides
 +    test functionality.
 +    """
 +
 +    def __init__(self,
 +                 address,
 +                 config_parser=None,
 +                 test_data_directory=None):
 +        imp_smbserver.SMBSERVER.__init__(self,
 +                                         address,
 +                                         config_parser=config_parser)
 +
 +        # Set up a test data object so we can get test data later.
 +        self.ctd = curl_test_data.TestData(test_data_directory)
 +
 +        # Override smbComNtCreateAndX so we can pretend to have files which
 +        # don't exist.
 +        self.hookSmbCommand(imp_smb.SMB.SMB_COM_NT_CREATE_ANDX,
 +                            self.create_and_x)
 +
 +    def create_and_x(self, conn_id, smb_server, smb_command, recv_packet):
 +        """
 +        Our version of smbComNtCreateAndX looks for special test files and
 +        fools the rest of the framework into opening them as if they were
 +        normal files.
 +        """
 +        conn_data = smb_server.getConnectionData(conn_id)
 +
 +        # Wrap processing in a try block which allows us to throw SmbException
 +        # to control the flow.
 +        try:
 +            ncax_parms = imp_smb.SMBNtCreateAndX_Parameters(
 +                smb_command["Parameters"])
 +
 +            path = self.get_share_path(conn_data,
 +                                       ncax_parms["RootFid"],
 +                                       recv_packet["Tid"])
 +            log.info("[SMB] Requested share path: %s", path)
 +
 +            disposition = ncax_parms["Disposition"]
 +            log.debug("[SMB] Requested disposition: %s", disposition)
 +
 +            # Currently we only support reading files.
 +            if disposition != imp_smb.FILE_OPEN:
 +                raise SmbException(STATUS_ACCESS_DENIED,
 +                                   "Only support reading files")
 +
 +            # Check to see if the path we were given is actually a
 +            # magic path which needs generating on the fly.
 +            if path not in [SERVER_MAGIC, TESTS_MAGIC]:
 +                # Pass the command onto the original handler.
 +                return imp_smbserver.SMBCommands.smbComNtCreateAndX(conn_id,
 +                                                                    
smb_server,
 +                                                                    
smb_command,
 +                                                                    
recv_packet)
 +
 +            flags2 = recv_packet["Flags2"]
 +            ncax_data = imp_smb.SMBNtCreateAndX_Data(flags=flags2,
 +                                                     data=smb_command[
 +                                                         "Data"])
 +            requested_file = imp_smbserver.decodeSMBString(
 +                flags2,
 +                ncax_data["FileName"])
 +            log.debug("[SMB] User requested file '%s'", requested_file)
 +
 +            if path == SERVER_MAGIC:
 +                fid, full_path = self.get_server_path(requested_file)
 +            else:
 +                assert (path == TESTS_MAGIC)
 +                fid, full_path = self.get_test_path(requested_file)
 +
 +            resp_parms = imp_smb.SMBNtCreateAndXResponse_Parameters()
 +            resp_data = ""
 +
 +            # Simple way to generate a fid
 +            if len(conn_data["OpenedFiles"]) == 0:
 +                fakefid = 1
 +            else:
 +                fakefid = conn_data["OpenedFiles"].keys()[-1] + 1
 +            resp_parms["Fid"] = fakefid
 +            resp_parms["CreateAction"] = disposition
 +
 +            if os.path.isdir(path):
 +                resp_parms[
 +                    "FileAttributes"] = imp_smb.SMB_FILE_ATTRIBUTE_DIRECTORY
 +                resp_parms["IsDirectory"] = 1
 +            else:
 +                resp_parms["IsDirectory"] = 0
 +                resp_parms["FileAttributes"] = ncax_parms["FileAttributes"]
 +
 +            # Get this file's information
 +            resp_info, error_code = imp_smbserver.queryPathInformation(
 +                "", full_path, level=imp_smb.SMB_QUERY_FILE_ALL_INFO)
 +
 +            if error_code != STATUS_SUCCESS:
 +                raise SmbException(error_code, "Failed to query path info")
 +
 +            resp_parms["CreateTime"] = resp_info["CreationTime"]
 +            resp_parms["LastAccessTime"] = resp_info[
 +                "LastAccessTime"]
 +            resp_parms["LastWriteTime"] = resp_info["LastWriteTime"]
 +            resp_parms["LastChangeTime"] = resp_info[
 +                "LastChangeTime"]
 +            resp_parms["FileAttributes"] = resp_info[
 +                "ExtFileAttributes"]
 +            resp_parms["AllocationSize"] = resp_info[
 +                "AllocationSize"]
 +            resp_parms["EndOfFile"] = resp_info["EndOfFile"]
 +
 +            # Let's store the fid for the connection
 +            # smbServer.log("Create file %s, mode:0x%x" % (pathName, mode))
 +            conn_data["OpenedFiles"][fakefid] = {}
 +            conn_data["OpenedFiles"][fakefid]["FileHandle"] = fid
 +            conn_data["OpenedFiles"][fakefid]["FileName"] = path
 +            conn_data["OpenedFiles"][fakefid]["DeleteOnClose"] = False
 +
 +        except SmbException as s:
 +            log.debug("[SMB] SmbException hit: %s", s)
 +            error_code = s.error_code
 +            resp_parms = ""
 +            resp_data = ""
 +
 +        resp_cmd = imp_smb.SMBCommand(imp_smb.SMB.SMB_COM_NT_CREATE_ANDX)
 +        resp_cmd["Parameters"] = resp_parms
 +        resp_cmd["Data"] = resp_data
 +        smb_server.setConnectionData(conn_id, conn_data)
 +
 +        return [resp_cmd], None, error_code
 +
 +    def get_share_path(self, conn_data, root_fid, tid):
 +        conn_shares = conn_data["ConnectedShares"]
 +
 +        if tid in conn_shares:
 +            if root_fid > 0:
 +                # If we have a rootFid, the path is relative to that fid
 +                path = conn_data["OpenedFiles"][root_fid]["FileName"]
 +                log.debug("RootFid present %s!" % path)
 +            else:
 +                if "path" in conn_shares[tid]:
 +                    path = conn_shares[tid]["path"]
 +                else:
 +                    raise SmbException(STATUS_ACCESS_DENIED,
 +                                       "Connection share had no path")
 +        else:
 +            raise SmbException(imp_smbserver.STATUS_SMB_BAD_TID,
 +                               "TID was invalid")
 +
 +        return path
 +
 +    def get_server_path(self, requested_filename):
 +        log.debug("[SMB] Get server path '%s'", requested_filename)
 +
 +        if requested_filename not in [VERIFIED_REQ]:
 +            raise SmbException(STATUS_NO_SUCH_FILE, "Couldn't find the file")
 +
 +        fid, filename = tempfile.mkstemp()
 +        log.debug("[SMB] Created %s (%d) for storing '%s'",
 +                  filename, fid, requested_filename)
 +
 +        contents = ""
 +
 +        if requested_filename == VERIFIED_REQ:
 +            log.debug("[SMB] Verifying server is alive")
-             contents = VERIFIED_RSP.format(pid=os.getpid())
++            pid = os.getpid()
++            # see tests/server/util.c function write_pidfile
++            if os.name == "nt":
++                pid += 65536
++            contents = VERIFIED_RSP.format(pid=pid).encode('utf-8')
 +
 +        self.write_to_fid(fid, contents)
 +        return fid, filename
 +
 +    def write_to_fid(self, fid, contents):
 +        # Write the contents to file descriptor
 +        os.write(fid, contents)
 +        os.fsync(fid)
 +
 +        # Rewind the file to the beginning so a read gets us the contents
 +        os.lseek(fid, 0, os.SEEK_SET)
 +
 +    def get_test_path(self, requested_filename):
 +        log.info("[SMB] Get reply data from 'test%s'", requested_filename)
 +
 +        fid, filename = tempfile.mkstemp()
 +        log.debug("[SMB] Created %s (%d) for storing test '%s'",
 +                  filename, fid, requested_filename)
 +
 +        try:
-             contents = self.ctd.get_test_data(requested_filename)
++            contents = 
self.ctd.get_test_data(requested_filename).encode('utf-8')
 +            self.write_to_fid(fid, contents)
 +            return fid, filename
 +
 +        except Exception:
 +            log.exception("Failed to make test file")
 +            raise SmbException(STATUS_NO_SUCH_FILE, "Failed to make test 
file")
 +
 +
 +class SmbException(Exception):
 +    def __init__(self, error_code, error_message):
 +        super(SmbException, self).__init__(error_message)
 +        self.error_code = error_code
 +
 +
 +class ScriptRC(object):
 +    """Enum for script return codes"""
 +    SUCCESS = 0
 +    FAILURE = 1
 +    EXCEPTION = 2
 +
 +
 +class ScriptException(Exception):
 +    pass
 +
 +
 +def get_options():
 +    parser = argparse.ArgumentParser()
 +
 +    parser.add_argument("--port", action="store", default=9017,
 +                      type=int, help="port to listen on")
 +    parser.add_argument("--host", action="store", default="127.0.0.1",
 +                      help="host to listen on")
 +    parser.add_argument("--verbose", action="store", type=int, default=0,
 +                        help="verbose output")
 +    parser.add_argument("--pidfile", action="store",
 +                        help="file name for the PID")
 +    parser.add_argument("--logfile", action="store",
 +                        help="file name for the log")
 +    parser.add_argument("--srcdir", action="store", help="test directory")
 +    parser.add_argument("--id", action="store", help="server ID")
 +    parser.add_argument("--ipv4", action="store_true", default=0,
 +                        help="IPv4 flag")
 +
 +    return parser.parse_args()
 +
 +
 +def setup_logging(options):
 +    """
 +    Set up logging from the command line options
 +    """
 +    root_logger = logging.getLogger()
 +    add_stdout = False
 +
 +    formatter = logging.Formatter("%(asctime)s %(levelname)-5.5s %(message)s")
 +
 +    # Write out to a logfile
 +    if options.logfile:
 +        handler = logging.FileHandler(options.logfile, mode="w")
 +        handler.setFormatter(formatter)
 +        handler.setLevel(logging.DEBUG)
 +        root_logger.addHandler(handler)
 +    else:
 +        # The logfile wasn't specified. Add a stdout logger.
 +        add_stdout = True
 +
 +    if options.verbose:
 +        # Add a stdout logger as well in verbose mode
 +        root_logger.setLevel(logging.DEBUG)
 +        add_stdout = True
 +    else:
 +        root_logger.setLevel(logging.INFO)
 +
 +    if add_stdout:
 +        stdout_handler = logging.StreamHandler(sys.stdout)
 +        stdout_handler.setFormatter(formatter)
 +        stdout_handler.setLevel(logging.DEBUG)
 +        root_logger.addHandler(stdout_handler)
 +
 +
 +if __name__ == '__main__':
 +    # Get the options from the user.
 +    options = get_options()
 +
 +    # Setup logging using the user options
 +    setup_logging(options)
 +
 +    # Run main script.
 +    try:
 +        rc = smbserver(options)
 +    except Exception as e:
 +        log.exception(e)
 +        rc = ScriptRC.EXCEPTION
 +
 +    log.info("[SMB] Returning %d", rc)
 +    sys.exit(rc)

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



reply via email to

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