gnunet-svn
[Top][All Lists]
Advanced

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

[gnurl] 407/411: Merge tag 'curl-7_74_0'


From: gnunet
Subject: [gnurl] 407/411: Merge tag 'curl-7_74_0'
Date: Wed, 13 Jan 2021 01:23:42 +0100

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

nikita pushed a commit to branch master
in repository gnurl.

commit 5b9f8acdda96cbaf7ec070db3ae9bdbe2a42f8eb
Merge: 7bd28f373 e05285975
Author: nikita <nikita@NetBSD.org>
AuthorDate: Wed Jan 13 00:53:52 2021 +0100

    Merge tag 'curl-7_74_0'
    
    7.74.0

 .azure-pipelines.yml                               |  31 +-
 .cirrus.yml                                        |  16 +-
 .dir-locals.el                                     |   2 +-
 .github/ISSUE_TEMPLATE/config.yml                  |  11 +
 .lgtm.yml                                          |   2 +-
 .mailmap                                           |  10 +-
 .travis.yml                                        | 317 +++-----
 CHANGES                                            |   2 +-
 CMake/CMakeConfigurableFile.in                     |   2 +-
 CMake/CurlSymbolHiding.cmake                       |   4 +-
 CMake/CurlTests.c                                  |   4 +-
 CMake/FindBearSSL.cmake                            |   2 +-
 CMake/FindGSS.cmake                                |   2 +-
 CMake/FindNGHTTP3.cmake                            |   2 +-
 CMake/FindNGTCP2.cmake                             |   2 +-
 CMake/FindNSS.cmake                                |   2 +-
 CMake/FindQUICHE.cmake                             |   2 +-
 CMake/FindWolfSSL.cmake                            |   2 +-
 CMake/FindZstd.cmake                               |   2 +-
 CMake/Macros.cmake                                 |  13 +-
 CMake/OtherTests.cmake                             |   2 +-
 CMake/Platforms/WindowsCache.cmake                 |   2 +-
 CMake/Utilities.cmake                              |   2 +-
 CMake/cmake_uninstall.cmake.in                     |   2 +-
 CMake/gnurl-config.cmake.in                        |   2 +-
 CMakeLists.txt                                     | 104 ++-
 MacOSX-Framework                                   |   2 +-
 Makefile.am                                        |   3 +-
 Makefile.dist                                      |  16 +-
 README                                             |  10 +-
 README.md                                          |  29 +-
 RELEASE-NOTES                                      | 452 +++++------
 acinclude.m4                                       |  38 +-
 appveyor.yml                                       |  34 +-
 buildconf                                          | 432 +----------
 buildconf.bat                                      |   2 +-
 configure.ac                                       | 181 +++--
 docs/ALTSVC.md                                     |   4 +-
 docs/BUGS                                          | 302 --------
 docs/BUGS.md                                       | 266 +++++++
 docs/CHECKSRC.md                                   |   6 +-
 docs/CIPHERS.md                                    |   8 +-
 docs/CMakeLists.txt                                |   2 +-
 docs/CONTRIBUTE.md                                 |  45 +-
 docs/CURL-DISABLE.md                               |  18 +
 docs/DYNBUF.md                                     |   6 +
 docs/{ESNI.md => ECH.md}                           |  76 +-
 docs/EXPERIMENTAL.md                               |   4 +-
 docs/FAQ                                           | 267 +++----
 docs/{FEATURES => FEATURES.md}                     | 182 +++--
 docs/HELP-US.md                                    |   8 +-
 docs/HISTORY.md                                    |  40 +-
 docs/HSTS.md                                       |  44 ++
 docs/HTTP-COOKIES.md                               |   2 +-
 docs/HTTP3.md                                      |  16 +-
 docs/INTERNALS.md                                  |  49 +-
 docs/KNOWN_BUGS                                    | 200 +++--
 docs/LICENSE-MIXING.md                             | 128 ----
 docs/MAIL-ETIQUETTE                                |   2 +-
 docs/MANUAL.md                                     |  28 +-
 docs/MQTT.md                                       |  32 -
 docs/Makefile.am                                   |  14 +-
 docs/NEW-PROTOCOL.md                               | 110 +++
 docs/README.md                                     |   6 +-
 docs/RESOURCES                                     |  85 ---
 docs/ROADMAP.md                                    |  32 +-
 docs/SECURITY-PROCESS.md                           |  12 +-
 docs/SSL-PROBLEMS.md                               |   2 +-
 docs/SSLCERTS.md                                   |   6 +-
 docs/THANKS                                        |  53 ++
 docs/THANKS-filter                                 |   3 +-
 docs/TODO                                          |  58 +-
 docs/TheArtOfHttpScripting                         | 758 ------------------
 docs/TheArtOfHttpScripting.md                      | 692 +++++++++++++++++
 docs/VERSIONS.md                                   |  13 +-
 docs/cmdline-opts/CMakeLists.txt                   |   2 +-
 docs/cmdline-opts/Makefile.am                      |   2 +-
 docs/cmdline-opts/Makefile.inc                     |   5 +-
 docs/cmdline-opts/abstract-unix-socket.d           |   1 +
 docs/cmdline-opts/alt-svc.d                        |   1 +
 docs/cmdline-opts/anyauth.d                        |   1 +
 docs/cmdline-opts/append.d                         |   1 +
 docs/cmdline-opts/basic.d                          |   1 +
 docs/cmdline-opts/cacert.d                         |   1 +
 docs/cmdline-opts/capath.d                         |   1 +
 docs/cmdline-opts/cert-status.d                    |   1 +
 docs/cmdline-opts/cert-type.d                      |   1 +
 docs/cmdline-opts/cert.d                           |   1 +
 docs/cmdline-opts/ciphers.d                        |   3 +-
 docs/cmdline-opts/compressed-ssh.d                 |   1 +
 docs/cmdline-opts/compressed.d                     |   1 +
 docs/cmdline-opts/config.d                         |  21 +-
 docs/cmdline-opts/connect-timeout.d                |   1 +
 docs/cmdline-opts/connect-to.d                     |   1 +
 docs/cmdline-opts/continue-at.d                    |   1 +
 docs/cmdline-opts/cookie-jar.d                     |   1 +
 docs/cmdline-opts/cookie.d                         |   1 +
 docs/cmdline-opts/create-dirs.d                    |   1 +
 docs/cmdline-opts/crlf.d                           |   1 +
 docs/cmdline-opts/crlfile.d                        |   1 +
 docs/cmdline-opts/curves.d                         |  18 +
 docs/cmdline-opts/data-ascii.d                     |   1 +
 docs/cmdline-opts/data-binary.d                    |   1 +
 docs/cmdline-opts/data-raw.d                       |   1 +
 docs/cmdline-opts/data-urlencode.d                 |   1 +
 docs/cmdline-opts/data.d                           |   1 +
 docs/cmdline-opts/delegation.d                     |   1 +
 docs/cmdline-opts/digest.d                         |   1 +
 docs/cmdline-opts/disable-eprt.d                   |   1 +
 docs/cmdline-opts/disable-epsv.d                   |   1 +
 docs/cmdline-opts/disable.d                        |   1 +
 docs/cmdline-opts/disallow-username-in-url.d       |   1 +
 docs/cmdline-opts/dns-interface.d                  |   1 +
 docs/cmdline-opts/dns-ipv4-addr.d                  |   1 +
 docs/cmdline-opts/dns-ipv6-addr.d                  |   1 +
 docs/cmdline-opts/dns-servers.d                    |   1 +
 docs/cmdline-opts/doh-url.d                        |   1 +
 docs/cmdline-opts/dump-header.d                    |   1 +
 docs/cmdline-opts/egd-file.d                       |   1 +
 docs/cmdline-opts/engine.d                         |   1 +
 docs/cmdline-opts/etag-compare.d                   |   3 +-
 docs/cmdline-opts/etag-save.d                      |   5 +-
 docs/cmdline-opts/expect100-timeout.d              |   1 +
 docs/cmdline-opts/fail-early.d                     |   1 +
 docs/cmdline-opts/fail.d                           |   1 +
 docs/cmdline-opts/false-start.d                    |   1 +
 docs/cmdline-opts/form-string.d                    |   1 +
 docs/cmdline-opts/form.d                           |   1 +
 docs/cmdline-opts/ftp-account.d                    |   1 +
 docs/cmdline-opts/ftp-alternative-to-user.d        |   1 +
 docs/cmdline-opts/ftp-create-dirs.d                |   1 +
 docs/cmdline-opts/ftp-method.d                     |   1 +
 docs/cmdline-opts/ftp-pasv.d                       |   1 +
 docs/cmdline-opts/ftp-port.d                       |   1 +
 docs/cmdline-opts/ftp-pret.d                       |   1 +
 docs/cmdline-opts/ftp-skip-pasv-ip.d               |   3 +
 docs/cmdline-opts/ftp-ssl-ccc-mode.d               |   1 +
 docs/cmdline-opts/ftp-ssl-ccc.d                    |   1 +
 docs/cmdline-opts/ftp-ssl-control.d                |   1 +
 docs/cmdline-opts/gen.pl                           |  66 +-
 docs/cmdline-opts/get.d                            |   1 +
 docs/cmdline-opts/globoff.d                        |   1 +
 docs/cmdline-opts/happy-eyeballs-timeout-ms.d      |   1 +
 docs/cmdline-opts/haproxy-protocol.d               |   1 +
 docs/cmdline-opts/head.d                           |   1 +
 docs/cmdline-opts/header.d                         |  19 +-
 docs/cmdline-opts/help.d                           |  12 +-
 docs/cmdline-opts/hostpubmd5.d                     |   1 +
 docs/cmdline-opts/hsts.d                           |  18 +
 docs/cmdline-opts/http0.9.d                        |   1 +
 docs/cmdline-opts/http1.0.d                        |   1 +
 docs/cmdline-opts/http1.1.d                        |   1 +
 docs/cmdline-opts/http2-prior-knowledge.d          |   1 +
 docs/cmdline-opts/http2.d                          |   1 +
 docs/cmdline-opts/http3.d                          |   1 +
 docs/cmdline-opts/ignore-content-length.d          |   1 +
 docs/cmdline-opts/include.d                        |   1 +
 docs/cmdline-opts/insecure.d                       |   3 +-
 docs/cmdline-opts/interface.d                      |   1 +
 docs/cmdline-opts/ipv4.d                           |   1 +
 docs/cmdline-opts/ipv6.d                           |   1 +
 docs/cmdline-opts/junk-session-cookies.d           |   1 +
 docs/cmdline-opts/keepalive-time.d                 |   1 +
 docs/cmdline-opts/key-type.d                       |   1 +
 docs/cmdline-opts/key.d                            |   1 +
 docs/cmdline-opts/krb.d                            |   1 +
 docs/cmdline-opts/libcurl.d                        |   1 +
 docs/cmdline-opts/limit-rate.d                     |   1 +
 docs/cmdline-opts/list-only.d                      |   1 +
 docs/cmdline-opts/local-port.d                     |   1 +
 docs/cmdline-opts/location-trusted.d               |   1 +
 docs/cmdline-opts/location.d                       |   1 +
 docs/cmdline-opts/login-options.d                  |   1 +
 docs/cmdline-opts/mail-auth.d                      |   1 +
 docs/cmdline-opts/mail-from.d                      |   1 +
 docs/cmdline-opts/mail-rcpt-allowfails.d           |   1 +
 docs/cmdline-opts/mail-rcpt.d                      |   1 +
 docs/cmdline-opts/manual.d                         |   1 +
 docs/cmdline-opts/max-filesize.d                   |   1 +
 docs/cmdline-opts/max-redirs.d                     |   1 +
 docs/cmdline-opts/max-time.d                       |   1 +
 docs/cmdline-opts/metalink.d                       |   1 +
 docs/cmdline-opts/negotiate.d                      |   1 +
 docs/cmdline-opts/netrc-file.d                     |   1 +
 docs/cmdline-opts/netrc-optional.d                 |   1 +
 docs/cmdline-opts/netrc.d                          |   1 +
 docs/cmdline-opts/next.d                           |   1 +
 docs/cmdline-opts/no-alpn.d                        |   1 +
 docs/cmdline-opts/no-buffer.d                      |   1 +
 docs/cmdline-opts/no-keepalive.d                   |   1 +
 docs/cmdline-opts/no-npn.d                         |   1 +
 docs/cmdline-opts/no-progress-meter.d              |   1 +
 docs/cmdline-opts/no-sessionid.d                   |   1 +
 docs/cmdline-opts/noproxy.d                        |   1 +
 docs/cmdline-opts/ntlm-wb.d                        |   1 +
 docs/cmdline-opts/ntlm.d                           |   1 +
 docs/cmdline-opts/oauth2-bearer.d                  |   1 +
 docs/cmdline-opts/output-dir.d                     |  19 +
 docs/cmdline-opts/output.d                         |   1 +
 docs/cmdline-opts/page-footer                      |   8 +-
 docs/cmdline-opts/page-header                      |  11 +-
 docs/cmdline-opts/parallel-immediate.d             |   1 +
 docs/cmdline-opts/parallel-max.d                   |   1 +
 docs/cmdline-opts/parallel.d                       |   1 +
 docs/cmdline-opts/pass.d                           |   1 +
 docs/cmdline-opts/path-as-is.d                     |   1 +
 docs/cmdline-opts/pinnedpubkey.d                   |   1 +
 docs/cmdline-opts/post301.d                        |   1 +
 docs/cmdline-opts/post302.d                        |   1 +
 docs/cmdline-opts/post303.d                        |   1 +
 docs/cmdline-opts/preproxy.d                       |   1 +
 docs/cmdline-opts/progress-bar.d                   |   1 +
 docs/cmdline-opts/proto-default.d                  |   1 +
 docs/cmdline-opts/proto-redir.d                    |   1 +
 docs/cmdline-opts/proto.d                          |   1 +
 docs/cmdline-opts/proxy-anyauth.d                  |   1 +
 docs/cmdline-opts/proxy-basic.d                    |   1 +
 docs/cmdline-opts/proxy-cacert.d                   |   1 +
 docs/cmdline-opts/proxy-capath.d                   |   1 +
 docs/cmdline-opts/proxy-cert-type.d                |   1 +
 docs/cmdline-opts/proxy-cert.d                     |   1 +
 docs/cmdline-opts/proxy-ciphers.d                  |   1 +
 docs/cmdline-opts/proxy-crlfile.d                  |   1 +
 docs/cmdline-opts/proxy-digest.d                   |   1 +
 docs/cmdline-opts/proxy-header.d                   |   1 +
 docs/cmdline-opts/proxy-insecure.d                 |   1 +
 docs/cmdline-opts/proxy-key-type.d                 |   1 +
 docs/cmdline-opts/proxy-key.d                      |   1 +
 docs/cmdline-opts/proxy-negotiate.d                |   1 +
 docs/cmdline-opts/proxy-ntlm.d                     |   1 +
 docs/cmdline-opts/proxy-pass.d                     |   1 +
 docs/cmdline-opts/proxy-pinnedpubkey.d             |   1 +
 docs/cmdline-opts/proxy-service-name.d             |   1 +
 docs/cmdline-opts/proxy-ssl-allow-beast.d          |   1 +
 docs/cmdline-opts/proxy-tls13-ciphers.d            |   3 +-
 docs/cmdline-opts/proxy-tlsauthtype.d              |   1 +
 docs/cmdline-opts/proxy-tlspassword.d              |   1 +
 docs/cmdline-opts/proxy-tlsuser.d                  |   1 +
 docs/cmdline-opts/proxy-tlsv1.d                    |   1 +
 docs/cmdline-opts/proxy-user.d                     |   1 +
 docs/cmdline-opts/proxy.d                          |   1 +
 docs/cmdline-opts/proxy1.0.d                       |   1 +
 docs/cmdline-opts/proxytunnel.d                    |   1 +
 docs/cmdline-opts/pubkey.d                         |   1 +
 docs/cmdline-opts/quote.d                          |   9 +
 docs/cmdline-opts/random-file.d                    |   1 +
 docs/cmdline-opts/range.d                          |   4 +-
 docs/cmdline-opts/raw.d                            |   1 +
 docs/cmdline-opts/referer.d                        |   1 +
 docs/cmdline-opts/remote-header-name.d             |   1 +
 docs/cmdline-opts/remote-name-all.d                |   1 +
 docs/cmdline-opts/remote-name.d                    |   1 +
 docs/cmdline-opts/remote-time.d                    |   1 +
 docs/cmdline-opts/request-target.d                 |   1 +
 docs/cmdline-opts/request.d                        |   1 +
 docs/cmdline-opts/resolve.d                        |   1 +
 docs/cmdline-opts/retry-all-errors.d               |   1 +
 docs/cmdline-opts/retry-connrefused.d              |   1 +
 docs/cmdline-opts/retry-delay.d                    |   1 +
 docs/cmdline-opts/retry-max-time.d                 |   1 +
 docs/cmdline-opts/retry.d                          |   1 +
 docs/cmdline-opts/sasl-authzid.d                   |   1 +
 docs/cmdline-opts/sasl-ir.d                        |   1 +
 docs/cmdline-opts/service-name.d                   |   1 +
 docs/cmdline-opts/show-error.d                     |   2 +
 docs/cmdline-opts/silent.d                         |   3 +-
 docs/cmdline-opts/socks4.d                         |   1 +
 docs/cmdline-opts/socks4a.d                        |   1 +
 docs/cmdline-opts/socks5-basic.d                   |   1 +
 docs/cmdline-opts/socks5-gssapi-nec.d              |   1 +
 docs/cmdline-opts/socks5-gssapi-service.d          |   1 +
 docs/cmdline-opts/socks5-gssapi.d                  |   1 +
 docs/cmdline-opts/socks5-hostname.d                |   1 +
 docs/cmdline-opts/socks5.d                         |   1 +
 docs/cmdline-opts/speed-limit.d                    |   1 +
 docs/cmdline-opts/speed-time.d                     |   1 +
 docs/cmdline-opts/ssl-allow-beast.d                |   1 +
 docs/cmdline-opts/ssl-no-revoke.d                  |   1 +
 docs/cmdline-opts/ssl-reqd.d                       |   1 +
 docs/cmdline-opts/ssl-revoke-best-effort.d         |   1 +
 docs/cmdline-opts/ssl.d                            |   1 +
 docs/cmdline-opts/sslv2.d                          |   1 +
 docs/cmdline-opts/sslv3.d                          |   1 +
 docs/cmdline-opts/stderr.d                         |   1 +
 docs/cmdline-opts/styled-output.d                  |   1 +
 docs/cmdline-opts/suppress-connect-headers.d       |   1 +
 docs/cmdline-opts/tcp-fastopen.d                   |   1 +
 docs/cmdline-opts/tcp-nodelay.d                    |   1 +
 docs/cmdline-opts/telnet-option.d                  |   1 +
 docs/cmdline-opts/tftp-blksize.d                   |   1 +
 docs/cmdline-opts/tftp-no-options.d                |   1 +
 docs/cmdline-opts/time-cond.d                      |   1 +
 docs/cmdline-opts/tls-max.d                        |   1 +
 docs/cmdline-opts/tls13-ciphers.d                  |   3 +-
 docs/cmdline-opts/tlsauthtype.d                    |   1 +
 docs/cmdline-opts/tlspassword.d                    |   1 +
 docs/cmdline-opts/tlsuser.d                        |   1 +
 docs/cmdline-opts/tlsv1.0.d                        |   1 +
 docs/cmdline-opts/tlsv1.1.d                        |   1 +
 docs/cmdline-opts/tlsv1.2.d                        |   1 +
 docs/cmdline-opts/tlsv1.3.d                        |   1 +
 docs/cmdline-opts/tlsv1.d                          |   1 +
 docs/cmdline-opts/tr-encoding.d                    |   1 +
 docs/cmdline-opts/trace-ascii.d                    |   1 +
 docs/cmdline-opts/trace-time.d                     |   1 +
 docs/cmdline-opts/trace.d                          |   1 +
 docs/cmdline-opts/unix-socket.d                    |   1 +
 docs/cmdline-opts/upload-file.d                    |   1 +
 docs/cmdline-opts/url.d                            |   1 +
 docs/cmdline-opts/use-ascii.d                      |   1 +
 docs/cmdline-opts/user-agent.d                     |   1 +
 docs/cmdline-opts/user.d                           |   1 +
 docs/cmdline-opts/verbose.d                        |   1 +
 docs/cmdline-opts/version.d                        |   3 +
 docs/cmdline-opts/write-out.d                      |   5 +
 docs/cmdline-opts/xattr.d                          |   1 +
 docs/examples/.gitignore                           |  12 +-
 docs/examples/10-at-a-time.c                       |   4 +-
 docs/examples/Makefile.am                          |   4 +-
 docs/examples/Makefile.example                     |   2 +-
 docs/examples/Makefile.inc                         |   4 +-
 docs/examples/Makefile.m32                         |  32 +-
 docs/examples/Makefile.netware                     |   2 +-
 docs/examples/{README => README.md}                |  22 +-
 docs/examples/adddocsref.pl                        |   4 +-
 docs/examples/altsvc.c                             |   4 +-
 docs/examples/anyauthput.c                         |   2 +-
 docs/examples/cacertinmem.c                        |   4 +-
 docs/examples/certinfo.c                           |   4 +-
 docs/examples/chkspeed.c                           |   4 +-
 docs/examples/cookie_interface.c                   |   4 +-
 docs/examples/debug.c                              |   4 +-
 docs/examples/ephiperfifo.c                        |   2 +-
 docs/examples/evhiperfifo.c                        |   4 +-
 docs/examples/externalsocket.c                     |   4 +-
 docs/examples/fileupload.c                         |   4 +-
 docs/examples/ftp-wildcard.c                       |   4 +-
 docs/examples/ftpget.c                             |   4 +-
 docs/examples/ftpgetinfo.c                         |   6 +-
 docs/examples/ftpgetresp.c                         |   4 +-
 docs/examples/ftpsget.c                            |   4 +-
 docs/examples/ftpupload.c                          |   4 +-
 docs/examples/ftpuploadfrommem.c                   |   4 +-
 docs/examples/ftpuploadresume.c                    |   4 +-
 docs/examples/getinfo.c                            |   4 +-
 docs/examples/getinmemory.c                        |   4 +-
 docs/examples/getredirect.c                        |   4 +-
 docs/examples/ghiper.c                             |   4 +-
 docs/examples/hiperfifo.c                          |   4 +-
 docs/examples/href_extractor.c                     |   4 +-
 docs/examples/htmltidy.c                           |   4 +-
 docs/examples/htmltitle.cpp                        |   4 +-
 docs/examples/http-post.c                          |   4 +-
 docs/examples/http2-download.c                     |   2 +-
 docs/examples/http2-pushinmemory.c                 |   4 +-
 docs/examples/http2-serverpush.c                   |   4 +-
 docs/examples/http2-upload.c                       |   2 +-
 docs/examples/http3-present.c                      |   4 +-
 docs/examples/http3.c                              |   4 +-
 docs/examples/httpcustomheader.c                   |   4 +-
 docs/examples/httpput-postfields.c                 | 101 +++
 docs/examples/httpput.c                            |   9 +-
 docs/examples/https.c                              |   4 +-
 docs/examples/imap-append.c                        |   4 +-
 docs/examples/imap-authzid.c                       |   4 +-
 docs/examples/imap-copy.c                          |   4 +-
 docs/examples/imap-create.c                        |   4 +-
 docs/examples/imap-delete.c                        |   4 +-
 docs/examples/imap-examine.c                       |   4 +-
 docs/examples/imap-fetch.c                         |   4 +-
 docs/examples/imap-list.c                          |   4 +-
 docs/examples/imap-lsub.c                          |   4 +-
 docs/examples/imap-multi.c                         |   4 +-
 docs/examples/imap-noop.c                          |   4 +-
 docs/examples/imap-search.c                        |   4 +-
 docs/examples/imap-ssl.c                           |   4 +-
 docs/examples/imap-store.c                         |   4 +-
 docs/examples/imap-tls.c                           |   4 +-
 docs/examples/makefile.dj                          |   2 +-
 docs/examples/multi-app.c                          |   4 +-
 docs/examples/multi-debugcallback.c                |   4 +-
 docs/examples/multi-double.c                       |   4 +-
 docs/examples/multi-event.c                        |   2 +-
 docs/examples/multi-formadd.c                      |   4 +-
 docs/examples/multi-poll.c                         |   4 +-
 docs/examples/multi-post.c                         |   4 +-
 docs/examples/multi-single.c                       |   4 +-
 docs/examples/multi-uv.c                           |   2 +-
 docs/examples/multithread.c                        |   6 +-
 docs/examples/opensslthreadlock.c                  |   4 +-
 docs/examples/parseurl.c                           |   4 +-
 docs/examples/persistent.c                         |   4 +-
 docs/examples/pop3-authzid.c                       |   4 +-
 docs/examples/pop3-dele.c                          |   4 +-
 docs/examples/pop3-list.c                          |   4 +-
 docs/examples/pop3-multi.c                         |   4 +-
 docs/examples/pop3-noop.c                          |   4 +-
 docs/examples/pop3-retr.c                          |   4 +-
 docs/examples/pop3-ssl.c                           |   4 +-
 docs/examples/pop3-stat.c                          |   4 +-
 docs/examples/pop3-tls.c                           |   4 +-
 docs/examples/pop3-top.c                           |   4 +-
 docs/examples/pop3-uidl.c                          |   4 +-
 docs/examples/post-callback.c                      |   4 +-
 docs/examples/postinmemory.c                       |   4 +-
 docs/examples/postit2-formadd.c                    |   4 +-
 docs/examples/postit2.c                            |   4 +-
 docs/examples/progressfunc.c                       |   4 +-
 docs/examples/resolve.c                            |   4 +-
 docs/examples/sampleconv.c                         |   4 +-
 docs/examples/sendrecv.c                           |   4 +-
 docs/examples/sepheaders.c                         |   4 +-
 docs/examples/sessioninfo.c                        |   2 +-
 docs/examples/sftpget.c                            |   4 +-
 docs/examples/sftpuploadresume.c                   |   4 +-
 docs/examples/shared-connection-cache.c            |   6 +-
 docs/examples/simple.c                             |   4 +-
 docs/examples/simplepost.c                         |   4 +-
 docs/examples/simplessl.c                          |   4 +-
 docs/examples/smooth-gtk-thread.c                  |   4 +-
 docs/examples/smtp-authzid.c                       |   4 +-
 docs/examples/smtp-expn.c                          |   4 +-
 docs/examples/smtp-mail.c                          |   4 +-
 docs/examples/smtp-mime.c                          |   4 +-
 docs/examples/smtp-multi.c                         |   4 +-
 docs/examples/smtp-ssl.c                           |   4 +-
 docs/examples/smtp-tls.c                           |   4 +-
 docs/examples/smtp-vrfy.c                          |   4 +-
 docs/examples/sslbackend.c                         |   8 +-
 docs/examples/synctime.c                           |   4 +-
 docs/examples/threaded-shared-conn.c               |   4 +-
 docs/examples/threaded-ssl.c                       |   4 +-
 docs/examples/url2file.c                           |   4 +-
 docs/examples/urlapi.c                             |   4 +-
 docs/examples/usercertinmem.c                      |   4 +-
 docs/examples/version-check.pl                     |   2 +-
 docs/examples/xmlstream.c                          |   4 +-
 docs/gnurl-config.1                                |   2 +-
 docs/libcurl/CMakeLists.txt                        |   2 +-
 docs/libcurl/Makefile.am                           |   2 +-
 docs/libcurl/Makefile.inc                          | 169 ++--
 .../GNURLOPT_STDERR.3 => curl_easy_option_by_id.3} |  44 +-
 ...NURLOPT_STDERR.3 => curl_easy_option_by_name.3} |  42 +-
 docs/libcurl/curl_easy_option_next.3               |  74 ++
 docs/libcurl/gnurl_easy_cleanup.3                  |   6 +-
 docs/libcurl/gnurl_easy_duphandle.3                |   4 +-
 docs/libcurl/gnurl_easy_escape.3                   |   5 +-
 docs/libcurl/gnurl_easy_getinfo.3                  |   5 +-
 docs/libcurl/gnurl_easy_init.3                     |   4 +-
 docs/libcurl/gnurl_easy_pause.3                    |   4 +-
 docs/libcurl/gnurl_easy_perform.3                  |   4 +-
 docs/libcurl/gnurl_easy_recv.3                     |   4 +-
 docs/libcurl/gnurl_easy_reset.3                    |   2 +-
 docs/libcurl/gnurl_easy_send.3                     |   4 +-
 docs/libcurl/gnurl_easy_setopt.3                   |  24 +-
 docs/libcurl/gnurl_easy_strerror.3                 |   2 +-
 docs/libcurl/gnurl_easy_unescape.3                 |   2 +-
 docs/libcurl/gnurl_easy_upkeep.3                   |   4 +-
 docs/libcurl/gnurl_escape.3                        |   2 +-
 docs/libcurl/gnurl_formadd.3                       |   2 +-
 docs/libcurl/gnurl_formfree.3                      |   4 +-
 docs/libcurl/gnurl_formget.3                       |   4 +-
 docs/libcurl/gnurl_free.3                          |   4 +-
 docs/libcurl/gnurl_getdate.3                       |   4 +-
 docs/libcurl/gnurl_getenv.3                        |   2 +-
 docs/libcurl/gnurl_global_cleanup.3                |   4 +-
 docs/libcurl/gnurl_global_init.3                   |   2 +-
 docs/libcurl/gnurl_global_init_mem.3               |   4 +-
 docs/libcurl/gnurl_global_sslset.3                 |   2 +-
 docs/libcurl/gnurl_mime_addpart.3                  |   4 +-
 docs/libcurl/gnurl_mime_data.3                     |   2 +-
 docs/libcurl/gnurl_mime_data_cb.3                  |   4 +-
 docs/libcurl/gnurl_mime_encoder.3                  |   2 +-
 docs/libcurl/gnurl_mime_filedata.3                 |   2 +-
 docs/libcurl/gnurl_mime_filename.3                 |   2 +-
 docs/libcurl/gnurl_mime_free.3                     |   4 +-
 docs/libcurl/gnurl_mime_headers.3                  |   6 +-
 docs/libcurl/gnurl_mime_init.3                     |   6 +-
 docs/libcurl/gnurl_mime_name.3                     |   2 +-
 docs/libcurl/gnurl_mime_subparts.3                 |   4 +-
 docs/libcurl/gnurl_mime_type.3                     |   2 +-
 docs/libcurl/gnurl_mprintf.3                       |   4 +-
 docs/libcurl/gnurl_multi_add_handle.3              |   4 +-
 docs/libcurl/gnurl_multi_assign.3                  |   2 +-
 docs/libcurl/gnurl_multi_cleanup.3                 |   4 +-
 docs/libcurl/gnurl_multi_fdset.3                   |   4 +-
 docs/libcurl/gnurl_multi_info_read.3               |   2 +-
 docs/libcurl/gnurl_multi_init.3                    |   2 +-
 docs/libcurl/gnurl_multi_perform.3                 |   2 +-
 docs/libcurl/gnurl_multi_poll.3                    |   4 +-
 docs/libcurl/gnurl_multi_remove_handle.3           |   4 +-
 docs/libcurl/gnurl_multi_setopt.3                  |   4 +-
 docs/libcurl/gnurl_multi_socket.3                  |   4 +-
 docs/libcurl/gnurl_multi_socket_action.3           |   4 +-
 docs/libcurl/gnurl_multi_strerror.3                |   2 +-
 docs/libcurl/gnurl_multi_timeout.3                 |   2 +-
 docs/libcurl/gnurl_multi_wait.3                    |   4 +-
 docs/libcurl/gnurl_multi_wakeup.3                  |   4 +-
 docs/libcurl/gnurl_share_cleanup.3                 |   4 +-
 docs/libcurl/gnurl_share_init.3                    |   2 +-
 docs/libcurl/gnurl_share_setopt.3                  |   2 +-
 docs/libcurl/gnurl_share_strerror.3                |   2 +-
 docs/libcurl/gnurl_slist_append.3                  |   4 +-
 docs/libcurl/gnurl_slist_free_all.3                |   4 +-
 docs/libcurl/gnurl_strequal.3                      |   4 +-
 docs/libcurl/gnurl_unescape.3                      |   2 +-
 docs/libcurl/gnurl_url.3                           |   4 +-
 docs/libcurl/gnurl_url_cleanup.3                   |   4 +-
 docs/libcurl/gnurl_url_dup.3                       |   4 +-
 docs/libcurl/gnurl_url_get.3                       |   4 +-
 docs/libcurl/gnurl_url_set.3                       |   4 +-
 docs/libcurl/gnurl_version.3                       |   2 +-
 docs/libcurl/gnurl_version_info.3                  |   8 +-
 docs/libcurl/libgnurl-easy.3                       |   2 +-
 docs/libcurl/libgnurl-env.3                        |   6 +-
 docs/libcurl/libgnurl-errors.3                     |   2 +-
 docs/libcurl/libgnurl-multi.3                      |   2 +-
 docs/libcurl/libgnurl-security.3                   |   6 +-
 docs/libcurl/libgnurl-share.3                      |   4 +-
 docs/libcurl/libgnurl-thread.3                     |   4 +-
 docs/libcurl/libgnurl-tutorial.3                   |   4 +-
 docs/libcurl/libgnurl-url.3                        |   4 +-
 docs/libcurl/libgnurl.3                            |   2 +-
 docs/libcurl/libgnurl.m4                           |   2 +-
 docs/libcurl/mksymbolsmanpage.pl                   |   4 +-
 docs/libcurl/opts/CMakeLists.txt                   |   2 +-
 docs/libcurl/opts/CURLINFO_PROXY_ERROR.3           | 104 +++
 docs/libcurl/opts/CURLOPT_HSTS.3                   |  81 ++
 ...{GNURLOPT_READDATA.3 => CURLOPT_HSTSREADDATA.3} |  43 +-
 docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.3       |  81 ++
 ...GNURLOPT_READDATA.3 => CURLOPT_HSTSWRITEDATA.3} |  41 +-
 docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.3      |  79 ++
 docs/libcurl/opts/CURLOPT_HSTS_CTRL.3              |  73 ++
 ...PT_SSL_ENABLE_NPN.3 => CURLOPT_SSL_EC_CURVES.3} |  27 +-
 docs/libcurl/opts/GNURLINFO_ACTIVESOCKET.3         |   4 +-
 docs/libcurl/opts/GNURLINFO_APPCONNECT_TIME.3      |   2 +-
 docs/libcurl/opts/GNURLINFO_APPCONNECT_TIME_T.3    |   2 +-
 docs/libcurl/opts/GNURLINFO_CERTINFO.3             |   2 +-
 docs/libcurl/opts/GNURLINFO_CONDITION_UNMET.3      |   4 +-
 docs/libcurl/opts/GNURLINFO_CONNECT_TIME.3         |   2 +-
 docs/libcurl/opts/GNURLINFO_CONNECT_TIME_T.3       |   2 +-
 .../opts/GNURLINFO_CONTENT_LENGTH_DOWNLOAD.3       |   4 +-
 .../opts/GNURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3     |   4 +-
 .../libcurl/opts/GNURLINFO_CONTENT_LENGTH_UPLOAD.3 |   4 +-
 .../opts/GNURLINFO_CONTENT_LENGTH_UPLOAD_T.3       |   4 +-
 docs/libcurl/opts/GNURLINFO_CONTENT_TYPE.3         |   4 +-
 docs/libcurl/opts/GNURLINFO_COOKIELIST.3           |   4 +-
 docs/libcurl/opts/GNURLINFO_EFFECTIVE_METHOD.3     |   4 +-
 docs/libcurl/opts/GNURLINFO_EFFECTIVE_URL.3        |   4 +-
 docs/libcurl/opts/GNURLINFO_FILETIME.3             |   2 +-
 docs/libcurl/opts/GNURLINFO_FILETIME_T.3           |   2 +-
 docs/libcurl/opts/GNURLINFO_FTP_ENTRY_PATH.3       |   2 +-
 docs/libcurl/opts/GNURLINFO_HEADER_SIZE.3          |   4 +-
 docs/libcurl/opts/GNURLINFO_HTTPAUTH_AVAIL.3       |   4 +-
 docs/libcurl/opts/GNURLINFO_HTTP_CONNECTCODE.3     |   2 +-
 docs/libcurl/opts/GNURLINFO_HTTP_VERSION.3         |   4 +-
 docs/libcurl/opts/GNURLINFO_LASTSOCKET.3           |   4 +-
 docs/libcurl/opts/GNURLINFO_LOCAL_IP.3             |   4 +-
 docs/libcurl/opts/GNURLINFO_LOCAL_PORT.3           |   4 +-
 docs/libcurl/opts/GNURLINFO_NAMELOOKUP_TIME.3      |   2 +-
 docs/libcurl/opts/GNURLINFO_NAMELOOKUP_TIME_T.3    |   2 +-
 docs/libcurl/opts/GNURLINFO_NUM_CONNECTS.3         |   4 +-
 docs/libcurl/opts/GNURLINFO_OS_ERRNO.3             |   4 +-
 docs/libcurl/opts/GNURLINFO_PRETRANSFER_TIME.3     |   2 +-
 docs/libcurl/opts/GNURLINFO_PRETRANSFER_TIME_T.3   |   2 +-
 docs/libcurl/opts/GNURLINFO_PRIMARY_IP.3           |   4 +-
 docs/libcurl/opts/GNURLINFO_PRIMARY_PORT.3         |   4 +-
 docs/libcurl/opts/GNURLINFO_PRIVATE.3              |   4 +-
 docs/libcurl/opts/GNURLINFO_PROTOCOL.3             |   4 +-
 docs/libcurl/opts/GNURLINFO_PROXYAUTH_AVAIL.3      |   4 +-
 .../opts/GNURLINFO_PROXY_SSL_VERIFYRESULT.3        |   2 +-
 docs/libcurl/opts/GNURLINFO_REDIRECT_COUNT.3       |   4 +-
 docs/libcurl/opts/GNURLINFO_REDIRECT_TIME.3        |   2 +-
 docs/libcurl/opts/GNURLINFO_REDIRECT_TIME_T.3      |   2 +-
 docs/libcurl/opts/GNURLINFO_REDIRECT_URL.3         |   4 +-
 docs/libcurl/opts/GNURLINFO_REQUEST_SIZE.3         |   4 +-
 docs/libcurl/opts/GNURLINFO_RESPONSE_CODE.3        |   4 +-
 docs/libcurl/opts/GNURLINFO_RETRY_AFTER.3          |   6 +-
 docs/libcurl/opts/GNURLINFO_RTSP_CLIENT_CSEQ.3     |   2 +-
 docs/libcurl/opts/GNURLINFO_RTSP_CSEQ_RECV.3       |   2 +-
 docs/libcurl/opts/GNURLINFO_RTSP_SERVER_CSEQ.3     |   2 +-
 docs/libcurl/opts/GNURLINFO_RTSP_SESSION_ID.3      |   2 +-
 docs/libcurl/opts/GNURLINFO_SCHEME.3               |   4 +-
 docs/libcurl/opts/GNURLINFO_SIZE_DOWNLOAD.3        |   4 +-
 docs/libcurl/opts/GNURLINFO_SIZE_DOWNLOAD_T.3      |   4 +-
 docs/libcurl/opts/GNURLINFO_SIZE_UPLOAD.3          |   4 +-
 docs/libcurl/opts/GNURLINFO_SIZE_UPLOAD_T.3        |   4 +-
 docs/libcurl/opts/GNURLINFO_SPEED_DOWNLOAD.3       |   4 +-
 docs/libcurl/opts/GNURLINFO_SPEED_DOWNLOAD_T.3     |   4 +-
 docs/libcurl/opts/GNURLINFO_SPEED_UPLOAD.3         |   4 +-
 docs/libcurl/opts/GNURLINFO_SPEED_UPLOAD_T.3       |   4 +-
 docs/libcurl/opts/GNURLINFO_SSL_ENGINES.3          |   2 +-
 docs/libcurl/opts/GNURLINFO_SSL_VERIFYRESULT.3     |   2 +-
 docs/libcurl/opts/GNURLINFO_STARTTRANSFER_TIME.3   |   2 +-
 docs/libcurl/opts/GNURLINFO_STARTTRANSFER_TIME_T.3 |   2 +-
 docs/libcurl/opts/GNURLINFO_TLS_SESSION.3          |   2 +-
 docs/libcurl/opts/GNURLINFO_TLS_SSL_PTR.3          |   2 +-
 docs/libcurl/opts/GNURLINFO_TOTAL_TIME.3           |   2 +-
 docs/libcurl/opts/GNURLINFO_TOTAL_TIME_T.3         |   2 +-
 .../opts/GNURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3     |   2 +-
 .../opts/GNURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3   |   2 +-
 docs/libcurl/opts/GNURLMOPT_MAXCONNECTS.3          |   2 +-
 .../opts/GNURLMOPT_MAX_CONCURRENT_STREAMS.3        |   2 +-
 docs/libcurl/opts/GNURLMOPT_MAX_HOST_CONNECTIONS.3 |   2 +-
 docs/libcurl/opts/GNURLMOPT_MAX_PIPELINE_LENGTH.3  |   2 +-
 .../libcurl/opts/GNURLMOPT_MAX_TOTAL_CONNECTIONS.3 |   2 +-
 docs/libcurl/opts/GNURLMOPT_PIPELINING.3           |   2 +-
 docs/libcurl/opts/GNURLMOPT_PIPELINING_SERVER_BL.3 |   2 +-
 docs/libcurl/opts/GNURLMOPT_PIPELINING_SITE_BL.3   |   2 +-
 docs/libcurl/opts/GNURLMOPT_PUSHDATA.3             |   2 +-
 docs/libcurl/opts/GNURLMOPT_PUSHFUNCTION.3         |   2 +-
 docs/libcurl/opts/GNURLMOPT_SOCKETDATA.3           |   2 +-
 docs/libcurl/opts/GNURLMOPT_SOCKETFUNCTION.3       |   2 +-
 docs/libcurl/opts/GNURLMOPT_TIMERDATA.3            |   2 +-
 docs/libcurl/opts/GNURLMOPT_TIMERFUNCTION.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_ABSTRACT_UNIX_SOCKET.3  |   2 +-
 docs/libcurl/opts/GNURLOPT_ACCEPTTIMEOUT_MS.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_ACCEPT_ENCODING.3       |   4 +-
 docs/libcurl/opts/GNURLOPT_ADDRESS_SCOPE.3         |   2 +-
 docs/libcurl/opts/GNURLOPT_ALTSVC.3                |   9 +-
 docs/libcurl/opts/GNURLOPT_ALTSVC_CTRL.3           |  12 +-
 docs/libcurl/opts/GNURLOPT_APPEND.3                |   2 +-
 docs/libcurl/opts/GNURLOPT_AUTOREFERER.3           |   4 +-
 docs/libcurl/opts/GNURLOPT_BUFFERSIZE.3            |   2 +-
 docs/libcurl/opts/GNURLOPT_CAINFO.3                |   2 +-
 docs/libcurl/opts/GNURLOPT_CAPATH.3                |   2 +-
 docs/libcurl/opts/GNURLOPT_CERTINFO.3              |   2 +-
 docs/libcurl/opts/GNURLOPT_CHUNK_BGN_FUNCTION.3    |   2 +-
 docs/libcurl/opts/GNURLOPT_CHUNK_DATA.3            |   2 +-
 docs/libcurl/opts/GNURLOPT_CHUNK_END_FUNCTION.3    |   2 +-
 docs/libcurl/opts/GNURLOPT_CLOSESOCKETDATA.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_CLOSESOCKETFUNCTION.3   |   2 +-
 docs/libcurl/opts/GNURLOPT_CONNECTTIMEOUT.3        |   4 +-
 docs/libcurl/opts/GNURLOPT_CONNECTTIMEOUT_MS.3     |   4 +-
 docs/libcurl/opts/GNURLOPT_CONNECT_ONLY.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_CONNECT_TO.3            |   4 +-
 .../opts/GNURLOPT_CONV_FROM_NETWORK_FUNCTION.3     |   2 +-
 .../opts/GNURLOPT_CONV_FROM_UTF8_FUNCTION.3        |   2 +-
 .../opts/GNURLOPT_CONV_TO_NETWORK_FUNCTION.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_COOKIE.3                |   4 +-
 docs/libcurl/opts/GNURLOPT_COOKIEFILE.3            |   6 +-
 docs/libcurl/opts/GNURLOPT_COOKIEJAR.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_COOKIELIST.3            |   4 +-
 docs/libcurl/opts/GNURLOPT_COOKIESESSION.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_COPYPOSTFIELDS.3        |   4 +-
 docs/libcurl/opts/GNURLOPT_CRLF.3                  |   2 +-
 docs/libcurl/opts/GNURLOPT_CRLFILE.3               |   2 +-
 docs/libcurl/opts/GNURLOPT_CURLU.3                 |   4 +-
 docs/libcurl/opts/GNURLOPT_CUSTOMREQUEST.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_DEBUGDATA.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_DEBUGFUNCTION.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_DEFAULT_PROTOCOL.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_DIRLISTONLY.3           |   2 +-
 .../opts/GNURLOPT_DISALLOW_USERNAME_IN_URL.3       |   4 +-
 docs/libcurl/opts/GNURLOPT_DNS_CACHE_TIMEOUT.3     |   4 +-
 docs/libcurl/opts/GNURLOPT_DNS_INTERFACE.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_DNS_LOCAL_IP4.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_DNS_LOCAL_IP6.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_DNS_SERVERS.3           |   4 +-
 docs/libcurl/opts/GNURLOPT_DNS_SHUFFLE_ADDRESSES.3 |   2 +-
 docs/libcurl/opts/GNURLOPT_DNS_USE_GLOBAL_CACHE.3  |   4 +-
 docs/libcurl/opts/GNURLOPT_DOH_URL.3               |   4 +-
 docs/libcurl/opts/GNURLOPT_EGDSOCKET.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_ERRORBUFFER.3           |   4 +-
 docs/libcurl/opts/GNURLOPT_EXPECT_100_TIMEOUT_MS.3 |   4 +-
 docs/libcurl/opts/GNURLOPT_FAILONERROR.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_FILETIME.3              |   2 +-
 docs/libcurl/opts/GNURLOPT_FNMATCH_DATA.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_FNMATCH_FUNCTION.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_FOLLOWLOCATION.3        |   4 +-
 docs/libcurl/opts/GNURLOPT_FORBID_REUSE.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_FRESH_CONNECT.3         |   2 +-
 docs/libcurl/opts/GNURLOPT_FTPPORT.3               |   2 +-
 docs/libcurl/opts/GNURLOPT_FTPSSLAUTH.3            |   2 +-
 docs/libcurl/opts/GNURLOPT_FTP_ACCOUNT.3           |   2 +-
 .../opts/GNURLOPT_FTP_ALTERNATIVE_TO_USER.3        |   2 +-
 .../opts/GNURLOPT_FTP_CREATE_MISSING_DIRS.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_FTP_FILEMETHOD.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_FTP_RESPONSE_TIMEOUT.3  |   2 +-
 docs/libcurl/opts/GNURLOPT_FTP_SKIP_PASV_IP.3      |  10 +-
 docs/libcurl/opts/GNURLOPT_FTP_SSL_CCC.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_FTP_USE_EPRT.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_FTP_USE_EPSV.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_FTP_USE_PRET.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_GSSAPI_DELEGATION.3     |   2 +-
 .../opts/GNURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_HAPROXYPROTOCOL.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_HEADER.3                |   4 +-
 docs/libcurl/opts/GNURLOPT_HEADERDATA.3            |   4 +-
 docs/libcurl/opts/GNURLOPT_HEADERFUNCTION.3        |   4 +-
 docs/libcurl/opts/GNURLOPT_HEADEROPT.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_HTTP09_ALLOWED.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_HTTP200ALIASES.3        |   4 +-
 docs/libcurl/opts/GNURLOPT_HTTPAUTH.3              |   2 +-
 docs/libcurl/opts/GNURLOPT_HTTPGET.3               |   4 +-
 docs/libcurl/opts/GNURLOPT_HTTPHEADER.3            |   4 +-
 docs/libcurl/opts/GNURLOPT_HTTPPOST.3              |   2 +-
 docs/libcurl/opts/GNURLOPT_HTTPPROXYTUNNEL.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_HTTP_CONTENT_DECODING.3 |   2 +-
 .../libcurl/opts/GNURLOPT_HTTP_TRANSFER_DECODING.3 |   2 +-
 docs/libcurl/opts/GNURLOPT_HTTP_VERSION.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_IGNORE_CONTENT_LENGTH.3 |   4 +-
 docs/libcurl/opts/GNURLOPT_INFILESIZE.3            |   2 +-
 docs/libcurl/opts/GNURLOPT_INFILESIZE_LARGE.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_INTERFACE.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_INTERLEAVEDATA.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_INTERLEAVEFUNCTION.3    |   2 +-
 docs/libcurl/opts/GNURLOPT_IOCTLDATA.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_IOCTLFUNCTION.3         |   2 +-
 docs/libcurl/opts/GNURLOPT_IPRESOLVE.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_ISSUERCERT.3            |   2 +-
 docs/libcurl/opts/GNURLOPT_ISSUERCERT_BLOB.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_KEEP_SENDING_ON_ERROR.3 |   2 +-
 docs/libcurl/opts/GNURLOPT_KEYPASSWD.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_KRBLEVEL.3              |   2 +-
 docs/libcurl/opts/GNURLOPT_LOCALPORT.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_LOCALPORTRANGE.3        |   4 +-
 docs/libcurl/opts/GNURLOPT_LOGIN_OPTIONS.3         |   2 +-
 docs/libcurl/opts/GNURLOPT_LOW_SPEED_LIMIT.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_LOW_SPEED_TIME.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_MAIL_AUTH.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_MAIL_FROM.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_MAIL_RCPT.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_MAIL_RCPT_ALLLOWFAILS.3 |   2 +-
 docs/libcurl/opts/GNURLOPT_MAXAGE_CONN.3           |   4 +-
 docs/libcurl/opts/GNURLOPT_MAXCONNECTS.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_MAXFILESIZE.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_MAXFILESIZE_LARGE.3     |   2 +-
 docs/libcurl/opts/GNURLOPT_MAXREDIRS.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_MAX_RECV_SPEED_LARGE.3  |   2 +-
 docs/libcurl/opts/GNURLOPT_MAX_SEND_SPEED_LARGE.3  |   2 +-
 docs/libcurl/opts/GNURLOPT_MIMEPOST.3              |   4 +-
 docs/libcurl/opts/GNURLOPT_NETRC.3                 |   2 +-
 docs/libcurl/opts/GNURLOPT_NETRC_FILE.3            |   2 +-
 docs/libcurl/opts/GNURLOPT_NEW_DIRECTORY_PERMS.3   |   2 +-
 docs/libcurl/opts/GNURLOPT_NEW_FILE_PERMS.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_NOBODY.3                |   4 +-
 docs/libcurl/opts/GNURLOPT_NOPROGRESS.3            |   4 +-
 docs/libcurl/opts/GNURLOPT_NOPROXY.3               |   8 +-
 docs/libcurl/opts/GNURLOPT_NOSIGNAL.3              |   2 +-
 docs/libcurl/opts/GNURLOPT_OPENSOCKETDATA.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_OPENSOCKETFUNCTION.3    |   2 +-
 docs/libcurl/opts/GNURLOPT_PASSWORD.3              |   4 +-
 docs/libcurl/opts/GNURLOPT_PATH_AS_IS.3            |   4 +-
 docs/libcurl/opts/GNURLOPT_PINNEDPUBLICKEY.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_PIPEWAIT.3              |   2 +-
 docs/libcurl/opts/GNURLOPT_PORT.3                  |   4 +-
 docs/libcurl/opts/GNURLOPT_POST.3                  |   4 +-
 docs/libcurl/opts/GNURLOPT_POSTFIELDS.3            |   4 +-
 docs/libcurl/opts/GNURLOPT_POSTFIELDSIZE.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_POSTFIELDSIZE_LARGE.3   |   4 +-
 docs/libcurl/opts/GNURLOPT_POSTQUOTE.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_POSTREDIR.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_PREQUOTE.3              |   2 +-
 docs/libcurl/opts/GNURLOPT_PRE_PROXY.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_PRIVATE.3               |   4 +-
 docs/libcurl/opts/GNURLOPT_PROGRESSDATA.3          |   4 +-
 docs/libcurl/opts/GNURLOPT_PROGRESSFUNCTION.3      |   4 +-
 docs/libcurl/opts/GNURLOPT_PROTOCOLS.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY.3                 |   4 +-
 docs/libcurl/opts/GNURLOPT_PROXYAUTH.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXYHEADER.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXYPASSWORD.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_PROXYPORT.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_PROXYTYPE.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXYUSERNAME.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_PROXYUSERPWD.3          |   4 +-
 docs/libcurl/opts/GNURLOPT_PROXY_CAINFO.3          |   4 +-
 docs/libcurl/opts/GNURLOPT_PROXY_CAPATH.3          |   4 +-
 docs/libcurl/opts/GNURLOPT_PROXY_CRLFILE.3         |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_ISSUERCERT.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_ISSUERCERT_BLOB.3 |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_KEYPASSWD.3       |   4 +-
 docs/libcurl/opts/GNURLOPT_PROXY_PINNEDPUBLICKEY.3 |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SERVICE_NAME.3    |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSLCERT.3         |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSLCERTTYPE.3     |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSLCERT_BLOB.3    |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSLKEY.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSLKEYTYPE.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSLKEY_BLOB.3     |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSLVERSION.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSL_CIPHER_LIST.3 |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSL_OPTIONS.3     |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSL_VERIFYHOST.3  |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_SSL_VERIFYPEER.3  |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_TLS13_CIPHERS.3   |   4 +-
 .../libcurl/opts/GNURLOPT_PROXY_TLSAUTH_PASSWORD.3 |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_TLSAUTH_TYPE.3    |   2 +-
 .../libcurl/opts/GNURLOPT_PROXY_TLSAUTH_USERNAME.3 |   2 +-
 docs/libcurl/opts/GNURLOPT_PROXY_TRANSFER_MODE.3   |   2 +-
 docs/libcurl/opts/GNURLOPT_PUT.3                   |   2 +-
 docs/libcurl/opts/GNURLOPT_QUOTE.3                 |  10 +-
 docs/libcurl/opts/GNURLOPT_RANDOM_FILE.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_RANGE.3                 |   6 +-
 docs/libcurl/opts/GNURLOPT_READDATA.3              |   4 +-
 docs/libcurl/opts/GNURLOPT_READFUNCTION.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_REDIR_PROTOCOLS.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_REFERER.3               |   6 +-
 docs/libcurl/opts/GNURLOPT_REQUEST_TARGET.3        |   4 +-
 docs/libcurl/opts/GNURLOPT_RESOLVE.3               |   4 +-
 docs/libcurl/opts/GNURLOPT_RESOLVER_START_DATA.3   |   4 +-
 .../opts/GNURLOPT_RESOLVER_START_FUNCTION.3        |   4 +-
 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_RTSP_REQUEST.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_RTSP_SERVER_CSEQ.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_RTSP_SESSION_ID.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_RTSP_STREAM_URI.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_RTSP_TRANSPORT.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_SASL_AUTHZID.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_SASL_IR.3               |   2 +-
 docs/libcurl/opts/GNURLOPT_SEEKDATA.3              |   2 +-
 docs/libcurl/opts/GNURLOPT_SEEKFUNCTION.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_SERVICE_NAME.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_SHARE.3                 |   2 +-
 docs/libcurl/opts/GNURLOPT_SOCKOPTDATA.3           |   4 +-
 docs/libcurl/opts/GNURLOPT_SOCKOPTFUNCTION.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_SOCKS5_AUTH.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_SOCKS5_GSSAPI_NEC.3     |   2 +-
 docs/libcurl/opts/GNURLOPT_SOCKS5_GSSAPI_SERVICE.3 |   2 +-
 docs/libcurl/opts/GNURLOPT_SSH_AUTH_TYPES.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_SSH_COMPRESSION.3       |   2 +-
 .../opts/GNURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_SSH_KEYDATA.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_SSH_KEYFUNCTION.3       |  13 +-
 docs/libcurl/opts/GNURLOPT_SSH_KNOWNHOSTS.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_SSH_PRIVATE_KEYFILE.3   |   2 +-
 docs/libcurl/opts/GNURLOPT_SSH_PUBLIC_KEYFILE.3    |   2 +-
 docs/libcurl/opts/GNURLOPT_SSLCERT.3               |   2 +-
 docs/libcurl/opts/GNURLOPT_SSLCERTTYPE.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_SSLCERT_BLOB.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_SSLENGINE.3             |   2 +-
 docs/libcurl/opts/GNURLOPT_SSLENGINE_DEFAULT.3     |   2 +-
 docs/libcurl/opts/GNURLOPT_SSLKEY.3                |   2 +-
 docs/libcurl/opts/GNURLOPT_SSLKEYTYPE.3            |   2 +-
 docs/libcurl/opts/GNURLOPT_SSLKEY_BLOB.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_SSLVERSION.3            |   2 +-
 docs/libcurl/opts/GNURLOPT_SSL_CIPHER_LIST.3       |   4 +-
 docs/libcurl/opts/GNURLOPT_SSL_CTX_DATA.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_SSL_CTX_FUNCTION.3      |   4 +-
 docs/libcurl/opts/GNURLOPT_SSL_ENABLE_ALPN.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_SSL_ENABLE_NPN.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_SSL_FALSESTART.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_SSL_OPTIONS.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_SSL_SESSIONID_CACHE.3   |   2 +-
 docs/libcurl/opts/GNURLOPT_SSL_VERIFYHOST.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_SSL_VERIFYPEER.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_SSL_VERIFYSTATUS.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_STDERR.3                |   4 +-
 docs/libcurl/opts/GNURLOPT_STREAM_DEPENDS.3        |   2 +-
 docs/libcurl/opts/GNURLOPT_STREAM_DEPENDS_E.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_STREAM_WEIGHT.3         |   2 +-
 .../opts/GNURLOPT_SUPPRESS_CONNECT_HEADERS.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_TCP_FASTOPEN.3          |   4 +-
 docs/libcurl/opts/GNURLOPT_TCP_KEEPALIVE.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_TCP_KEEPIDLE.3          |   4 +-
 docs/libcurl/opts/GNURLOPT_TCP_KEEPINTVL.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_TCP_NODELAY.3           |   6 +-
 docs/libcurl/opts/GNURLOPT_TELNETOPTIONS.3         |   2 +-
 docs/libcurl/opts/GNURLOPT_TFTP_BLKSIZE.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_TFTP_NO_OPTIONS.3       |   2 +-
 docs/libcurl/opts/GNURLOPT_TIMECONDITION.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_TIMEOUT.3               |   4 +-
 docs/libcurl/opts/GNURLOPT_TIMEOUT_MS.3            |   4 +-
 docs/libcurl/opts/GNURLOPT_TIMEVALUE.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_TIMEVALUE_LARGE.3       |   4 +-
 docs/libcurl/opts/GNURLOPT_TLS13_CIPHERS.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_TLSAUTH_PASSWORD.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_TLSAUTH_TYPE.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_TLSAUTH_USERNAME.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_TRAILERDATA.3           |   2 +-
 docs/libcurl/opts/GNURLOPT_TRAILERFUNCTION.3       |   6 +-
 docs/libcurl/opts/GNURLOPT_TRANSFERTEXT.3          |   2 +-
 docs/libcurl/opts/GNURLOPT_TRANSFER_ENCODING.3     |   4 +-
 docs/libcurl/opts/GNURLOPT_UNIX_SOCKET_PATH.3      |   2 +-
 docs/libcurl/opts/GNURLOPT_UNRESTRICTED_AUTH.3     |   4 +-
 docs/libcurl/opts/GNURLOPT_UPKEEP_INTERVAL_MS.3    |   2 +-
 docs/libcurl/opts/GNURLOPT_UPLOAD.3                |   2 +-
 docs/libcurl/opts/GNURLOPT_UPLOAD_BUFFERSIZE.3     |   2 +-
 docs/libcurl/opts/GNURLOPT_URL.3                   |  21 +-
 docs/libcurl/opts/GNURLOPT_USERAGENT.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_USERNAME.3              |   4 +-
 docs/libcurl/opts/GNURLOPT_USERPWD.3               |   4 +-
 docs/libcurl/opts/GNURLOPT_USE_SSL.3               |   2 +-
 docs/libcurl/opts/GNURLOPT_VERBOSE.3               |   4 +-
 docs/libcurl/opts/GNURLOPT_WILDCARDMATCH.3         |   4 +-
 docs/libcurl/opts/GNURLOPT_WRITEDATA.3             |   4 +-
 docs/libcurl/opts/GNURLOPT_WRITEFUNCTION.3         |   9 +-
 docs/libcurl/opts/GNURLOPT_XFERINFODATA.3          |   4 +-
 docs/libcurl/opts/GNURLOPT_XFERINFOFUNCTION.3      |   4 +-
 docs/libcurl/opts/GNURLOPT_XOAUTH2_BEARER.3        |   2 +-
 docs/libcurl/opts/Makefile.am                      |   4 +-
 docs/libcurl/opts/Makefile.inc                     | 728 +++++++++---------
 docs/libcurl/opts/template.3                       |   2 +-
 docs/libcurl/symbols-in-versions                   |  78 +-
 docs/libcurl/symbols.pl                            |   2 +-
 docs/mk-ca-bundle.1                                |   6 +-
 docs/options-in-versions                           |   3 +
 gnurl-config.in                                    |   2 +-
 include/Makefile.am                                |   4 +-
 include/README                                     |  18 -
 include/README.md                                  |  14 +
 include/gnurl/Makefile.am                          |   6 +-
 include/gnurl/curl.h                               | 193 +++--
 include/gnurl/curlver.h                            |   8 +-
 include/gnurl/easy.h                               |   2 +-
 include/gnurl/mprintf.h                            |   4 +-
 include/gnurl/multi.h                              |   2 +-
 include/gnurl/options.h                            |  68 ++
 include/gnurl/stdcheaders.h                        |   4 +-
 include/gnurl/system.h                             |   4 +-
 include/gnurl/typecheck-gcc.h                      |   8 +-
 include/gnurl/urlapi.h                             |   4 +-
 lib/.gitattributes                                 |   2 +-
 lib/CMakeLists.txt                                 |  17 +-
 lib/Makefile.Watcom                                | 274 -------
 lib/Makefile.am                                    |   9 +-
 lib/Makefile.inc                                   |  10 +-
 lib/Makefile.m32                                   |  40 +-
 lib/Makefile.netware                               |   6 +-
 lib/Makefile.vxworks                               |   2 +-
 lib/altsvc.c                                       |  36 +-
 lib/altsvc.h                                       |  13 +-
 lib/amigaos.c                                      |   4 +-
 lib/amigaos.h                                      |   4 +-
 lib/arpa_telnet.h                                  |   4 +-
 lib/asyn-ares.c                                    |  29 +-
 lib/asyn-thread.c                                  |  26 +-
 lib/asyn.h                                         |   2 +-
 lib/base64.c                                       |   7 +-
 lib/checksrc.pl                                    |  31 +-
 lib/config-amigaos.h                               |   6 +-
 lib/config-dos.h                                   |   2 +-
 lib/config-mac.h                                   |   4 +-
 lib/config-os400.h                                 |   5 +-
 lib/config-plan9.h                                 |   4 +-
 lib/config-riscos.h                                |   2 +-
 lib/config-symbian.h                               | 793 -------------------
 lib/config-tpf.h                                   |   4 +-
 lib/config-vxworks.h                               |   2 +-
 lib/config-win32.h                                 |   2 +-
 lib/config-win32ce.h                               |   4 +-
 lib/conncache.c                                    |  36 +-
 lib/conncache.h                                    |   6 +-
 lib/connect.c                                      | 133 ++--
 lib/connect.h                                      |   4 +-
 lib/content_encoding.c                             |   6 +-
 lib/content_encoding.h                             |   2 +-
 lib/cookie.c                                       |   4 +-
 lib/cookie.h                                       |   4 +-
 lib/curl_addrinfo.c                                |   2 +-
 lib/curl_addrinfo.h                                |   2 +-
 lib/curl_base64.h                                  |   4 +-
 lib/curl_config.h.cmake                            |  20 +-
 lib/curl_ctype.c                                   |   4 +-
 lib/curl_ctype.h                                   |   4 +-
 lib/curl_des.c                                     |   4 +-
 lib/curl_des.h                                     |   4 +-
 lib/curl_endian.c                                  |   4 +-
 lib/curl_endian.h                                  |   4 +-
 lib/curl_fnmatch.c                                 |   4 +-
 lib/curl_fnmatch.h                                 |   4 +-
 lib/curl_get_line.c                                |   9 +-
 lib/curl_get_line.h                                |   4 +-
 lib/curl_gethostname.c                             |   6 +-
 lib/curl_gethostname.h                             |   6 +-
 lib/curl_gssapi.c                                  |   4 +-
 lib/curl_gssapi.h                                  |   4 +-
 lib/curl_hmac.h                                    |   2 +-
 lib/{curl_sec.h => curl_krb5.h}                    |  14 +-
 lib/curl_ldap.h                                    |   4 +-
 lib/curl_md4.h                                     |   2 +-
 lib/curl_md5.h                                     |   2 +-
 lib/curl_memory.h                                  |   4 +-
 lib/curl_memrchr.c                                 |   4 +-
 lib/curl_memrchr.h                                 |   4 +-
 lib/curl_multibyte.c                               |   2 +-
 lib/curl_multibyte.h                               |   2 +-
 lib/curl_ntlm_core.c                               |  18 +-
 lib/curl_ntlm_core.h                               |  10 +-
 lib/curl_ntlm_wb.c                                 |   2 +-
 lib/curl_ntlm_wb.h                                 |   4 +-
 lib/curl_path.c                                    |   6 +-
 lib/curl_path.h                                    |   4 +-
 lib/curl_printf.h                                  |   4 +-
 lib/curl_range.c                                   |   4 +-
 lib/curl_range.h                                   |   4 +-
 lib/curl_rtmp.c                                    |  10 +-
 lib/curl_rtmp.h                                    |   4 +-
 lib/curl_sasl.c                                    |   2 +-
 lib/curl_sasl.h                                    |   4 +-
 lib/curl_setup.h                                   |  36 +-
 lib/curl_setup_once.h                              |   2 +-
 lib/curl_sha256.h                                  |   2 +-
 lib/curl_sspi.c                                    |   2 +-
 lib/curl_sspi.h                                    |   4 +-
 lib/curl_threads.c                                 |   8 +-
 lib/curl_threads.h                                 |   4 +-
 lib/curlx.h                                        |   2 +-
 lib/dict.c                                         |  97 ++-
 lib/dict.h                                         |   4 +-
 lib/doh.c                                          |  11 +-
 lib/doh.h                                          |   2 +-
 lib/dotdot.c                                       |   2 +-
 lib/dotdot.h                                       |   4 +-
 lib/dynbuf.c                                       |  50 +-
 lib/dynbuf.h                                       |  27 +-
 lib/easy.c                                         |  46 +-
 lib/easygetopt.c                                   |  96 +++
 lib/easyif.h                                       |   2 +-
 lib/easyoptions.c                                  | 353 +++++++++
 src/tool_strdup.c => lib/easyoptions.h             |  27 +-
 lib/escape.c                                       |   4 +-
 lib/escape.h                                       |   2 +-
 lib/file.c                                         |  30 +-
 lib/file.h                                         |   4 +-
 lib/fileinfo.c                                     |   4 +-
 lib/fileinfo.h                                     |   6 +-
 lib/firefox-db2pem.sh                              |   2 +-
 lib/formdata.c                                     |   2 +-
 lib/formdata.h                                     |   2 +-
 lib/ftp.c                                          | 670 ++++++++--------
 lib/ftp.h                                          |   3 +-
 lib/ftplistparser.c                                |  10 +-
 lib/ftplistparser.h                                |   4 +-
 lib/getenv.c                                       |   2 +-
 lib/getinfo.c                                      |   5 +-
 lib/getinfo.h                                      |   4 +-
 lib/gopher.c                                       |   9 +-
 lib/gopher.h                                       |   4 +-
 lib/hash.c                                         |  84 +-
 lib/hash.h                                         |  50 +-
 lib/hmac.c                                         |   2 +-
 lib/hostasyn.c                                     |   2 +-
 lib/hostcheck.c                                    |   4 +-
 lib/hostcheck.h                                    |   4 +-
 lib/hostip.c                                       |   8 +-
 lib/hostip.h                                       |  10 +-
 lib/hostip4.c                                      |   2 +-
 lib/hostip6.c                                      |   2 +-
 lib/hostsyn.c                                      |   4 +-
 lib/hsts.c                                         | 522 +++++++++++++
 lib/hsts.h                                         |  65 ++
 lib/http.c                                         |  83 +-
 lib/http.h                                         |   2 +-
 lib/http2.c                                        | 178 ++---
 lib/http2.h                                        |   2 +-
 lib/http_chunks.c                                  |   2 +-
 lib/http_chunks.h                                  |   4 +-
 lib/http_digest.c                                  |   2 +-
 lib/http_digest.h                                  |   2 +-
 lib/http_negotiate.c                               |   2 +-
 lib/http_negotiate.h                               |   2 +-
 lib/http_ntlm.c                                    |   2 +-
 lib/http_ntlm.h                                    |   2 +-
 lib/http_proxy.c                                   |  32 +-
 lib/http_proxy.h                                   |   2 +-
 lib/idn_win32.c                                    |   2 +-
 lib/if2ip.c                                        |   2 +-
 lib/if2ip.h                                        |   4 +-
 lib/imap.c                                         |  65 +-
 lib/imap.h                                         |   7 +-
 lib/inet_ntop.h                                    |   4 +-
 lib/inet_pton.c                                    |   4 +-
 lib/inet_pton.h                                    |   4 +-
 lib/krb5.c                                         | 595 ++++++++++++++-
 lib/ldap.c                                         |  72 +-
 lib/libcurl.rc                                     |   8 +-
 lib/libgnurl.plist                                 |   2 +-
 lib/llist.c                                        |  14 +-
 lib/llist.h                                        |  30 +-
 lib/makefile.amiga                                 |   2 +-
 lib/makefile.dj                                    |   2 +-
 lib/md4.c                                          |   2 +-
 lib/md5.c                                          |   2 +-
 lib/memdebug.c                                     |  53 +-
 lib/memdebug.h                                     |   2 +-
 lib/mime.c                                         |   2 +-
 lib/mime.h                                         |   2 +-
 lib/mk-ca-bundle.pl                                |   2 +-
 lib/mk-ca-bundle.vbs                               |   2 +-
 lib/mprintf.c                                      |  57 +-
 lib/mqtt.c                                         |  40 +-
 lib/mqtt.h                                         |   4 +-
 lib/multi.c                                        |  94 ++-
 lib/multihandle.h                                  |  16 +-
 lib/multiif.h                                      |   2 +-
 lib/netrc.c                                        |   4 +-
 lib/netrc.h                                        |   4 +-
 lib/non-ascii.c                                    |   4 +-
 lib/non-ascii.h                                    |   4 +-
 lib/nonblock.c                                     |   4 +-
 lib/nonblock.h                                     |   4 +-
 lib/nwlib.c                                        |   2 +-
 lib/nwos.c                                         |   4 +-
 lib/openldap.c                                     |  14 +-
 lib/optiontable.pl                                 | 118 +++
 lib/parsedate.c                                    |  59 +-
 lib/parsedate.h                                    |   4 +-
 lib/pingpong.c                                     |  61 +-
 lib/pingpong.h                                     |   6 +-
 lib/pop3.c                                         |  19 +-
 lib/pop3.h                                         |   4 +-
 lib/progress.c                                     |  17 +-
 lib/progress.h                                     |   6 +-
 lib/psl.c                                          |   4 +-
 lib/psl.h                                          |   4 +-
 lib/quic.h                                         |   4 +-
 lib/rand.c                                         |   4 +-
 lib/rand.h                                         |   4 +-
 lib/rename.c                                       |   6 +-
 lib/rename.h                                       |   2 +-
 lib/rtsp.c                                         |  46 +-
 lib/rtsp.h                                         |   4 +-
 lib/security.c                                     | 579 --------------
 lib/select.c                                       | 177 ++---
 lib/select.h                                       |  17 +-
 lib/sendf.c                                        | 179 ++---
 lib/sendf.h                                        |   6 +-
 lib/setopt.c                                       | 294 ++++---
 lib/setopt.h                                       |   2 +-
 lib/setup-os400.h                                  |   2 +-
 lib/setup-vms.h                                    |   2 +-
 lib/setup-win32.h                                  |   5 +-
 lib/sha256.c                                       |   2 +-
 lib/share.c                                        |   4 +-
 lib/share.h                                        |   8 +-
 lib/sigpipe.h                                      |   4 +-
 lib/slist.c                                        |   4 +-
 lib/slist.h                                        |   4 +-
 lib/smb.c                                          |  33 +-
 lib/smb.h                                          |  11 +-
 lib/smtp.c                                         |  27 +-
 lib/smtp.h                                         |   2 +-
 lib/sockaddr.h                                     |   4 +-
 lib/socketpair.c                                   |   6 +-
 lib/socketpair.h                                   |   4 +-
 lib/socks.c                                        | 169 ++--
 lib/socks.h                                        |  28 +-
 lib/socks_gssapi.c                                 |   6 +-
 lib/socks_sspi.c                                   |   2 +-
 lib/speedcheck.c                                   |   4 +-
 lib/speedcheck.h                                   |   4 +-
 lib/splay.c                                        |  10 +-
 lib/splay.h                                        |  16 +-
 lib/strcase.c                                      |   2 +-
 lib/strcase.h                                      |   2 +-
 lib/strdup.c                                       |   2 +-
 lib/strdup.h                                       |   4 +-
 lib/strerror.c                                     |  44 +-
 lib/strerror.h                                     |   2 +-
 lib/strtok.c                                       |   2 +-
 lib/strtok.h                                       |   4 +-
 lib/strtoofft.c                                    |   4 +-
 lib/strtoofft.h                                    |   4 +-
 lib/system_win32.c                                 |  13 +-
 lib/system_win32.h                                 |   2 +-
 lib/telnet.c                                       | 164 +---
 lib/telnet.h                                       |   4 +-
 lib/tftp.c                                         |   3 +-
 lib/tftp.h                                         |   4 +-
 lib/timeval.c                                      |   2 +-
 lib/timeval.h                                      |   4 +-
 lib/transfer.c                                     |  19 +-
 lib/transfer.h                                     |   4 +-
 lib/url.c                                          | 223 ++----
 lib/url.h                                          |   2 +-
 lib/urlapi-int.h                                   |   6 +-
 lib/urlapi.c                                       |  48 +-
 lib/urldata.h                                      |  91 ++-
 lib/vauth/cleartext.c                              |   2 +-
 lib/vauth/cram.c                                   |   2 +-
 lib/vauth/digest.c                                 |   2 +-
 lib/vauth/digest.h                                 |   4 +-
 lib/vauth/digest_sspi.c                            |   2 +-
 lib/vauth/krb5_gssapi.c                            |   4 +-
 lib/vauth/krb5_sspi.c                              |   2 +-
 lib/vauth/ntlm.c                                   |   3 +-
 lib/vauth/ntlm.h                                   |   4 +-
 lib/vauth/ntlm_sspi.c                              |   2 +-
 lib/vauth/oauth2.c                                 |   4 +-
 lib/vauth/spnego_gssapi.c                          |   4 +-
 lib/vauth/spnego_sspi.c                            |   2 +-
 lib/vauth/vauth.c                                  |   2 +-
 lib/vauth/vauth.h                                  |   4 +-
 lib/version.c                                      |  24 +-
 lib/version_win32.c                                |   2 +-
 lib/version_win32.h                                |   2 +-
 lib/vquic/ngtcp2.c                                 |  96 ++-
 lib/vquic/ngtcp2.h                                 |   4 +-
 lib/vquic/quiche.c                                 |  43 +-
 lib/vquic/quiche.h                                 |   5 +-
 lib/vquic/vquic.c                                  |   2 +-
 lib/vquic/vquic.h                                  |   2 +-
 lib/vssh/libssh.c                                  |  69 +-
 lib/vssh/libssh2.c                                 | 217 ++++--
 lib/vssh/ssh.h                                     |   8 +-
 lib/vssh/wolfssh.c                                 |  10 +-
 lib/vssh/wolfssh.h                                 |   2 +-
 lib/vtls/bearssl.c                                 |   2 +-
 lib/vtls/bearssl.h                                 |   4 +-
 lib/vtls/gskit.c                                   |   4 +-
 lib/vtls/gskit.h                                   |   4 +-
 lib/vtls/gtls.c                                    |  72 +-
 lib/vtls/gtls.h                                    |   4 +-
 lib/vtls/keylog.c                                  |   2 +-
 lib/vtls/keylog.h                                  |   2 +-
 lib/vtls/mbedtls.c                                 |  16 +-
 lib/vtls/mbedtls.h                                 |   4 +-
 lib/vtls/mbedtls_threadlock.c                      |   2 +-
 lib/vtls/mbedtls_threadlock.h                      |   2 +-
 lib/vtls/mesalink.c                                |  24 +-
 lib/vtls/mesalink.h                                |   6 +-
 lib/vtls/nss.c                                     |  67 +-
 lib/vtls/nssg.h                                    |   4 +-
 lib/vtls/openssl.c                                 | 253 +++---
 lib/vtls/openssl.h                                 |   4 +-
 lib/vtls/schannel.c                                |  57 +-
 lib/vtls/schannel.h                                |  12 +-
 lib/vtls/schannel_verify.c                         |   2 +-
 lib/vtls/sectransp.c                               |  26 +-
 lib/vtls/sectransp.h                               |   4 +-
 lib/vtls/vtls.c                                    |  17 +-
 lib/vtls/vtls.h                                    |  18 +-
 lib/vtls/wolfssl.c                                 |  24 +-
 lib/vtls/wolfssl.h                                 |   4 +-
 lib/warnless.c                                     |   4 +-
 lib/warnless.h                                     |   2 +-
 lib/wildcard.c                                     |   4 +-
 lib/wildcard.h                                     |  14 +-
 lib/x509asn1.c                                     |   2 +-
 lib/x509asn1.h                                     |   2 +-
 libgnurl.pc.in                                     |   4 +-
 m4/curl-compilers.m4                               |  10 +-
 m4/curl-confopts.m4                                |  44 +-
 m4/curl-functions.m4                               |   2 +-
 m4/curl-openssl.m4                                 |   2 +-
 m4/curl-override.m4                                |   2 +-
 m4/curl-reentrant.m4                               |   2 +-
 maketgz                                            |   4 +-
 packages/Android/Android.mk                        |   2 +-
 packages/DOS/common.dj                             |   2 +-
 packages/Makefile.am                               |  20 +-
 packages/OS400/ccsidcurl.c                         |  69 +-
 packages/OS400/ccsidcurl.h                         |  56 +-
 packages/OS400/chkstrings.c                        |  34 +-
 packages/OS400/curl.inc.in                         |  30 +-
 packages/OS400/initscript.sh                       |   2 +-
 packages/OS400/make-include.sh                     |   2 +-
 packages/OS400/make-lib.sh                         |   2 +-
 packages/OS400/make-src.sh                         |   2 +-
 packages/OS400/make-tests.sh                       |   2 +-
 packages/OS400/makefile.sh                         |   2 +-
 packages/OS400/os400sys.c                          | 412 ++++------
 packages/OS400/os400sys.h                          |   2 +-
 packages/Symbian/bwins/libcurlu.def                |  60 --
 packages/Symbian/eabi/libcurlu.def                 |  60 --
 packages/Symbian/group/bld.inf                     |  10 -
 packages/Symbian/group/curl.iby                    |  15 -
 packages/Symbian/group/curl.mmp                    |  64 --
 packages/Symbian/group/curl.pkg                    |  26 -
 packages/Symbian/group/libcurl.iby                 |  14 -
 packages/Symbian/group/libcurl.mmp                 |  67 --
 packages/Symbian/group/libcurl.pkg                 |  22 -
 packages/Symbian/readme.txt                        |  93 ---
 packages/TPF/curl.mak                              |   2 +-
 packages/TPF/maketpf.env_curl                      |   2 +-
 packages/TPF/maketpf.env_curllib                   |   2 +-
 packages/vms/Makefile.am                           |   2 +-
 packages/vms/curl_crtl_init.c                      |   2 +-
 packages/vms/curl_gnv_build_steps.txt              |   2 +-
 packages/vms/curlmsg.h                             |   2 +-
 packages/vms/curlmsg.msg                           |   2 +-
 packages/vms/curlmsg_vms.h                         |   2 +-
 plan9/include/mkfile                               |   4 +-
 plan9/lib/mkfile                                   |   4 +-
 plan9/lib/mkfile.inc                               |   4 +-
 plan9/mkfile                                       |   4 +-
 plan9/mkfile.proto                                 |   4 +-
 plan9/src/mkfile                                   |   4 +-
 plan9/src/mkfile.inc                               |   4 +-
 scripts/Makefile.am                                |   2 +-
 scripts/completion.pl                              |   4 +-
 scripts/contributors.sh                            |   4 +-
 scripts/contrithanks.sh                            |   6 +-
 scripts/copyright.pl                               |  15 +-
 scripts/coverage.sh                                |   2 +-
 scripts/delta                                      |  39 +-
 scripts/installcheck.sh                            |   2 +-
 scripts/log2changes.pl                             |   2 +-
 scripts/release-notes.pl                           |  11 +-
 scripts/singleuse.pl                               |   2 +-
 scripts/travis/before_script.sh                    |   2 +-
 scripts/travis/iconv-env.sh                        |   2 +-
 scripts/travis/script.sh                           |   5 +-
 scripts/updatemanpages.pl                          |   2 +-
 src/CMakeLists.txt                                 |   8 +-
 src/Makefile.Watcom                                | 234 ------
 src/Makefile.am                                    |   6 +-
 src/Makefile.inc                                   |   8 +-
 src/Makefile.m32                                   |  41 +-
 src/Makefile.netware                               |   6 +-
 src/curl.rc                                        |   8 +-
 src/makefile.amiga                                 |   2 +-
 src/makefile.dj                                    |   2 +-
 src/mkhelp.pl.in                                   |   4 +-
 src/slist_wc.c                                     |   4 +-
 src/slist_wc.h                                     |   4 +-
 src/tool_binmode.c                                 |   4 +-
 src/tool_binmode.h                                 |   4 +-
 src/tool_bname.c                                   |   4 +-
 src/tool_bname.h                                   |   4 +-
 src/tool_cb_dbg.c                                  |   4 +-
 src/tool_cb_dbg.h                                  |   4 +-
 src/tool_cb_hdr.c                                  |  70 +-
 src/tool_cb_hdr.h                                  |   4 +-
 src/tool_cb_prg.c                                  |   2 +-
 src/tool_cb_prg.h                                  |   4 +-
 src/tool_cb_rea.c                                  |   2 +-
 src/tool_cb_rea.h                                  |   4 +-
 src/tool_cb_see.c                                  |   2 +-
 src/tool_cb_see.h                                  |   2 +-
 src/tool_cb_wrt.c                                  |  34 +-
 src/tool_cb_wrt.h                                  |   2 +-
 src/tool_cfgable.c                                 |   5 +-
 src/tool_cfgable.h                                 |   6 +-
 src/tool_convert.c                                 |   4 +-
 src/tool_convert.h                                 |   4 +-
 src/tool_dirhie.c                                  |   2 +-
 src/tool_dirhie.h                                  |   4 +-
 src/tool_doswin.c                                  |   2 +-
 src/tool_doswin.h                                  |   2 +-
 src/tool_easysrc.c                                 |   8 +-
 src/tool_easysrc.h                                 |   4 +-
 src/tool_filetime.c                                |   7 +-
 src/tool_filetime.h                                |   4 +-
 src/tool_formparse.c                               |   2 +-
 src/tool_formparse.h                               |   2 +-
 src/tool_getparam.c                                |  28 +-
 src/tool_getparam.h                                |   4 +-
 src/tool_getpass.c                                 |  12 +-
 src/tool_getpass.h                                 |   4 +-
 src/tool_help.c                                    | 848 +++++++++++++++------
 src/tool_help.h                                    |   6 +-
 src/tool_helpers.c                                 |   4 +-
 src/tool_helpers.h                                 |   4 +-
 src/tool_homedir.c                                 |  48 +-
 src/tool_homedir.h                                 |   6 +-
 src/tool_hugehelp.c.cvs                            |   2 +-
 src/tool_hugehelp.h                                |   4 +-
 src/tool_libinfo.c                                 |   4 +-
 src/tool_libinfo.h                                 |   4 +-
 src/tool_main.c                                    |   7 +-
 src/tool_main.h                                    |   4 +-
 src/tool_metalink.c                                |   2 +-
 src/tool_metalink.h                                |   2 +-
 src/tool_msgs.c                                    |   4 +-
 src/tool_msgs.h                                    |   4 +-
 src/tool_operate.c                                 | 140 ++--
 src/tool_operate.h                                 |   7 +-
 src/tool_operhlp.c                                 |   2 +-
 src/tool_operhlp.h                                 |   4 +-
 src/tool_panykey.c                                 |  12 +-
 src/tool_panykey.h                                 |  10 +-
 src/tool_paramhlp.c                                | 118 +--
 src/tool_paramhlp.h                                |   4 +-
 src/tool_parsecfg.c                                |  73 +-
 src/tool_parsecfg.h                                |   4 +-
 src/tool_progress.c                                |   6 +-
 src/tool_progress.h                                |   4 +-
 src/tool_sdecls.h                                  |   2 +-
 src/tool_setopt.c                                  |  63 +-
 src/tool_setopt.h                                  |  15 +-
 src/tool_setup.h                                   |   4 +-
 src/tool_sleep.c                                   |   2 +-
 src/tool_sleep.h                                   |   4 +-
 src/tool_strdup.c                                  |   2 +-
 src/tool_strdup.h                                  |   4 +-
 src/tool_urlglob.c                                 |  52 +-
 src/tool_urlglob.h                                 |   2 +-
 src/tool_util.c                                    |   2 +-
 src/tool_util.h                                    |   4 +-
 src/tool_version.h                                 |   4 +-
 src/tool_vms.c                                     |   2 +-
 src/tool_vms.h                                     |   4 +-
 src/tool_writeout.c                                |  95 +--
 src/tool_writeout.h                                |   6 +-
 src/tool_writeout_json.c                           |  24 +-
 src/tool_writeout_json.h                           |   6 +-
 src/tool_xattr.c                                   |   4 +-
 src/tool_xattr.h                                   |   4 +-
 tests/CMakeLists.txt                               |   7 +-
 tests/FILEFORMAT.md                                |  42 +-
 tests/Makefile.am                                  |  21 +-
 tests/{README => README.md}                        | 214 ++----
 tests/appveyor.pm                                  |  12 +-
 tests/azure.pm                                     |  21 +-
 tests/badsymbols.pl.in                             |   2 +-
 tests/certs/Makefile.am                            |   2 +-
 tests/certs/scripts/Makefile.am                    |   2 +-
 tests/convsrctest.pl.in                            |   2 +-
 tests/data/CMakeLists.txt                          |   2 +-
 tests/data/DISABLED                                |  30 +-
 tests/data/Makefile.am                             |   2 +-
 tests/data/Makefile.inc                            |  91 ++-
 tests/data/test1                                   |   4 +-
 tests/data/test10                                  |   4 +-
 tests/data/test1001                                |   6 +-
 tests/data/test1002                                |  10 +-
 tests/data/test1004                                |   4 +-
 tests/data/test1008                                |   7 +-
 tests/data/test1011                                |   6 +-
 tests/data/test1012                                |   6 +-
 tests/data/test1015                                |   5 +-
 tests/data/test1021                                |   8 +-
 tests/data/test1024                                |   6 +-
 tests/data/test1025                                |   6 +-
 tests/data/test1028                                |   4 +-
 tests/data/test1029                                |   4 +-
 tests/data/test1030                                |   6 +-
 tests/data/test1031                                |   5 +-
 tests/data/test1032                                |   4 +-
 tests/data/test1033                                |   4 +-
 tests/data/test1035                                |   3 -
 tests/data/test1040                                |   4 +-
 tests/data/test1041                                |   4 +-
 tests/data/test1042                                |   4 +-
 tests/data/test1043                                |   4 +-
 tests/data/test1045                                |   4 +-
 tests/data/test1046                                |   4 +-
 tests/data/test1051                                |   5 +-
 tests/data/test1052                                |   5 +-
 tests/data/test1053                                |   6 +-
 tests/data/test1054                                |   5 +-
 tests/data/test1055                                |   4 +-
 tests/data/test1056                                |   5 +-
 tests/data/test1058                                |   4 +-
 tests/data/test1059                                |   4 +-
 tests/data/test1060                                |  10 +-
 tests/data/test1061                                |  10 +-
 tests/data/test1064                                |   5 +-
 tests/data/test1065                                |   5 +-
 tests/data/test1066                                |   5 +-
 tests/data/test1067                                |   5 +-
 tests/data/test1068                                |   4 +-
 tests/data/test1070                                |   4 +-
 tests/data/test1071                                |   5 +-
 tests/data/test1072                                |   4 +-
 tests/data/test1073                                |   4 +-
 tests/data/test1074                                |   5 +-
 tests/data/test1075                                |   5 +-
 tests/data/test1076                                |   6 +-
 tests/data/test1077                                |   5 +-
 tests/data/test1078                                |   6 +-
 tests/data/test1079                                |   5 +-
 tests/data/test1080                                |   5 +-
 tests/data/test1081                                |   5 +-
 tests/data/test1082                                |   4 +-
 tests/data/test1083                                |   4 +-
 tests/data/test1087                                |   6 +-
 tests/data/test1088                                |   6 +-
 tests/data/test1089                                |   5 +-
 tests/data/test1090                                |   5 +-
 tests/data/test1092                                |   4 +-
 tests/data/test1095                                |   6 +-
 tests/data/test1096                                |   1 +
 tests/data/test1097                                |   7 +-
 tests/data/test1098                                |   5 +-
 tests/data/test11                                  |   5 +-
 tests/data/test1100                                |  10 +-
 tests/data/test1101                                |   4 +-
 tests/data/test1104                                |   5 +-
 tests/data/test1105                                |   6 +-
 tests/data/test1106                                |   4 +-
 tests/data/test1109                                |   4 +-
 tests/data/test1110                                |   4 +-
 tests/data/test1111                                |   4 +-
 tests/data/test1115                                |   4 +-
 tests/data/test1116                                |   4 +-
 tests/data/test1117                                |   5 +-
 tests/data/test1118                                |   4 +-
 tests/data/test1119                                |   1 -
 tests/data/test1121                                |   4 +-
 tests/data/test1122                                |   4 +-
 tests/data/test1123                                |   4 +-
 tests/data/test1124                                |   4 +-
 tests/data/test1125                                |   4 +-
 tests/data/test1126                                |   4 +-
 tests/data/test1127                                |   4 +-
 tests/data/test1128                                |   5 +-
 tests/data/test1129                                |   7 +-
 tests/data/test1130                                |   5 +-
 tests/data/test1131                                |   5 +-
 tests/data/test1133                                |   4 +-
 tests/data/test1134                                |   5 +-
 tests/data/test1136                                |   2 +-
 tests/data/test1138                                |   6 +-
 tests/data/test1141                                |   5 +-
 tests/data/test1142                                |   4 +-
 tests/data/test1143                                |   4 +-
 tests/data/test1144                                |   4 +-
 tests/data/test1148                                |   4 +-
 tests/data/test1150                                |   5 +-
 tests/data/test1151                                |   6 +-
 tests/data/test1154                                |   6 +-
 tests/data/test1155                                |   6 +-
 tests/data/test1157                                |   4 +-
 tests/data/test1158                                |   4 +-
 tests/data/test1159                                |   4 +-
 tests/data/test1160                                |   6 +-
 tests/data/test1161                                |   6 +-
 tests/data/test1164                                |   4 +-
 tests/data/test1166                                |   5 +-
 tests/data/test1168                                |   5 +-
 tests/data/test1170                                |   4 +-
 tests/data/test1171                                |   4 +-
 tests/data/test1172                                |   4 +-
 tests/data/test1174                                |   4 +-
 tests/data/test1176                                |   4 +-
 tests/data/test1178                                |   4 +-
 tests/data/test118                                 |   1 +
 tests/data/test119                                 |   1 +
 tests/data/test1197                                |   5 +-
 tests/data/test12                                  |   4 +-
 tests/data/test1204                                |   5 +-
 tests/data/test1205                                |   4 +-
 tests/data/test1210                                |   4 +-
 tests/data/test1212                                |   4 +-
 tests/data/test1213                                |   4 +-
 tests/data/test1214                                |   4 +-
 tests/data/test1215                                |   7 +-
 tests/data/test1216                                |   5 +-
 tests/data/test1218                                |   6 +-
 tests/data/test1221                                |  53 --
 tests/data/test1222                                |  53 --
 tests/data/test1223                                |   4 +-
 tests/data/test1228                                |   5 +-
 tests/data/test1229                                |   5 +-
 tests/data/test1230                                |   5 +-
 tests/data/test1231                                |   5 +-
 tests/data/test1232                                |   5 +-
 tests/data/test1235                                |  11 +-
 tests/data/test1237                                |   4 +-
 tests/data/test1239                                |   4 +-
 tests/data/test1240                                |   5 +-
 tests/data/test1241                                |   5 +-
 tests/data/test1244                                |   4 +-
 tests/data/test1245                                |   4 +-
 tests/data/test1246                                |   5 +-
 tests/data/test1248                                |   4 +-
 tests/data/test1249                                |   4 +-
 tests/data/test1250                                |   4 +-
 tests/data/test1251                                |   4 +-
 tests/data/test1252                                |   4 +-
 tests/data/test1253                                |   4 +-
 tests/data/test1254                                |   4 +-
 tests/data/test1255                                |   4 +-
 tests/data/test1256                                |   4 +-
 tests/data/test1257                                |   4 +-
 tests/data/test1258                                |   5 +-
 tests/data/test1259                                |   4 +-
 tests/data/test1261                                |   4 +-
 tests/data/test1265                                |   4 +-
 tests/data/test1266                                |   4 +-
 tests/data/test1267                                |   4 +-
 tests/data/test1270                                |   4 +-
 tests/data/test1271                                |   4 +-
 tests/data/test1280                                |   7 +-
 tests/data/test1283                                |   4 +-
 tests/data/test1284                                |   5 +-
 tests/data/test1285                                |   5 +-
 tests/data/test1286                                |   7 +-
 tests/data/test1287                                |   5 +-
 tests/data/test1288                                |   5 +-
 tests/data/test1290                                |   4 +-
 tests/data/test1292                                |   4 +-
 tests/data/test1293                                |   4 +-
 tests/data/test1294                                |   4 +-
 tests/data/test1295                                |   4 +-
 tests/data/test1296                                |   4 +-
 tests/data/test1297                                |  65 ++
 tests/data/test1298                                |   4 +-
 tests/data/test1299                                |   4 +-
 tests/data/test13                                  |   4 +-
 tests/data/test1310                                |   7 +-
 tests/data/test1311                                |   4 +-
 tests/data/test1312                                |   4 +-
 tests/data/test1313                                |   4 +-
 tests/data/test1314                                |   5 +-
 tests/data/test1315                                |   4 +-
 tests/data/test1317                                |   4 +-
 tests/data/test1318                                |   5 +-
 tests/data/test1319                                |   5 +-
 tests/data/test1320                                |   5 +-
 tests/data/test1321                                |   5 +-
 tests/data/test1322                                |   4 +-
 tests/data/test1324                                |   4 +-
 tests/data/test1325                                |   5 +-
 tests/data/test1328                                |   5 +-
 tests/data/test1331                                |   5 +-
 tests/data/test1332                                |   6 +-
 tests/data/test1333                                |   4 +-
 tests/data/test1334                                |   4 +-
 tests/data/test1335                                |   4 +-
 tests/data/test1336                                |   4 +-
 tests/data/test1337                                |   4 +-
 tests/data/test1338                                |   4 +-
 tests/data/test1339                                |   4 +-
 tests/data/test1340                                |   4 +-
 tests/data/test1341                                |   4 +-
 tests/data/test1342                                |   4 +-
 tests/data/test1343                                |   4 +-
 tests/data/test1344                                |   4 +-
 tests/data/test1345                                |   4 +-
 tests/data/test1346                                |   4 +-
 tests/data/test1347                                |   4 +-
 tests/data/test1364                                |   4 +-
 tests/data/test1365                                |   4 +-
 tests/data/test1366                                |   4 +-
 tests/data/test1367                                |   4 +-
 tests/data/test1368                                |   4 +-
 tests/data/test1369                                |   4 +-
 tests/data/test1370                                |   4 +-
 tests/data/test1371                                |   4 +-
 tests/data/test1372                                |   4 +-
 tests/data/test1373                                |   4 +-
 tests/data/test1374                                |   4 +-
 tests/data/test1375                                |   4 +-
 tests/data/test1376                                |   4 +-
 tests/data/test1377                                |   4 +-
 tests/data/test138                                 |   1 +
 tests/data/test14                                  |   5 +-
 tests/data/test1400                                |   8 +-
 tests/data/test1401                                |   8 +-
 tests/data/test1402                                |   8 +-
 tests/data/test1403                                |   8 +-
 tests/data/test1404                                |   7 +-
 tests/data/test1405                                |   3 +-
 tests/data/test1406                                |   3 +-
 tests/data/test1407                                |   3 +-
 tests/data/test1408                                |   5 +-
 tests/data/test1411                                |   4 +-
 tests/data/test1412                                |  10 +-
 tests/data/test1413                                |   5 +-
 tests/data/test1415                                |   6 +-
 tests/data/test1416                                |   4 +-
 tests/data/test1417                                |   4 +-
 tests/data/test1418                                |   7 +-
 tests/data/test1419                                |   5 +-
 tests/data/test1420                                |   3 +-
 tests/data/test1421                                |   5 +-
 tests/data/test1422                                |   4 +-
 tests/data/test1423                                |   4 +-
 tests/data/test1424                                |   4 +-
 tests/data/test1425                                | Bin 1726 -> 1721 bytes
 tests/data/test1426                                | Bin 1663 -> 1658 bytes
 tests/data/test1428                                |   7 +-
 tests/data/test1429                                |   4 +-
 tests/data/test1430                                |   4 +-
 tests/data/test1431                                |   4 +-
 tests/data/test1432                                |   4 +-
 tests/data/test1433                                |   4 +-
 tests/data/test1434                                |   4 +-
 tests/data/test1435                                |   4 +-
 tests/data/test1436                                |   6 +-
 tests/data/test1437                                |   6 +-
 tests/data/test1438                                |   4 +-
 tests/data/test1439                                |   6 +-
 tests/data/test1443                                |   4 +-
 tests/data/test1448                                |   5 +-
 tests/data/test1455                                |   4 +-
 tests/data/test1456                                |   5 +-
 tests/data/test1457                                |   4 +-
 tests/data/test1458                                |   4 +-
 tests/data/test1460                                |   3 -
 tests/data/test1461                                |  53 ++
 tests/data/test1462                                |  61 ++
 tests/data/{test76 => test1463}                    |  23 +-
 tests/data/{test702 => test1464}                   |  34 +-
 tests/data/{test1402 => test1465}                  | Bin 3016 -> 2964 bytes
 tests/data/test15                                  |   4 +-
 tests/data/test150                                 |   7 +-
 tests/data/test1502                                |   3 -
 tests/data/test1503                                |   3 -
 tests/data/test1504                                |   3 -
 tests/data/test1505                                |   3 -
 tests/data/test151                                 |   5 +-
 tests/data/test152                                 |   5 +-
 tests/data/test1524                                |   6 +-
 tests/data/test153                                 |  10 +-
 tests/data/test1538                                |   3 +-
 tests/data/test154                                 |   6 +-
 tests/data/test155                                 |   7 +-
 tests/data/test1551                                |   3 -
 tests/data/test1556                                |   5 +-
 tests/data/test156                                 |   5 +-
 tests/data/test1561                                |   9 +-
 tests/data/test1562                                |   6 +-
 tests/data/test1563                                |   4 +-
 tests/data/test1566                                |   6 +-
 tests/data/test1567                                |   3 -
 tests/data/test157                                 |   4 +-
 tests/data/test158                                 |   3 +-
 tests/data/test159                                 |   5 +-
 tests/data/test1591                                |   3 -
 tests/data/test1593                                |   3 -
 tests/data/test1594                                |   3 -
 tests/data/test1595                                |   3 -
 tests/data/test1596                                |   3 -
 tests/data/test16                                  |   4 +-
 tests/data/test160                                 |   5 +-
 tests/data/test162                                 |   5 +-
 tests/data/test163                                 |   4 +-
 tests/data/test1630                                |   4 +-
 tests/data/test1631                                |   3 +-
 tests/data/test1632                                |   3 +-
 tests/data/test1633                                |   7 +-
 tests/data/test164                                 |   4 +-
 tests/data/test165                                 |   5 +-
 tests/data/test1653                                |   2 +-
 tests/data/test1654                                |   2 +-
 tests/data/test166                                 |   4 +-
 tests/data/test1660                                |  81 ++
 tests/data/test167                                 |   7 +-
 tests/data/test168                                 |   9 +-
 tests/data/test169                                 |   9 +-
 tests/data/test170                                 |   5 +-
 tests/data/test1700                                |   7 +-
 tests/data/test1701                                |   5 +-
 tests/data/test1702                                |   5 +-
 tests/data/test171                                 |   6 +-
 tests/data/test172                                 |   6 +-
 tests/data/test173                                 |   4 +-
 tests/data/test174                                 |   5 +-
 tests/data/test175                                 |   7 +-
 tests/data/test176                                 |   7 +-
 tests/data/test177                                 |   5 +-
 tests/data/test178                                 |   4 +-
 tests/data/test179                                 |   4 +-
 tests/data/test18                                  |   9 +-
 tests/data/test180                                 |   4 +-
 tests/data/test1800                                |   4 +-
 tests/data/test1801                                |   4 +-
 tests/data/test181                                 |   4 +-
 tests/data/test183                                 |   7 +-
 tests/data/test184                                 |   6 +-
 tests/data/test185                                 |   6 +-
 tests/data/test186                                 |   4 +-
 tests/data/test187                                 |   5 +-
 tests/data/test188                                 |   7 +-
 tests/data/test189                                 |   7 +-
 tests/data/test1900                                |  61 --
 tests/data/test1901                                |  63 --
 tests/data/test1902                                |  62 --
 tests/data/test1903                                |  62 --
 tests/data/test1904                                |   7 +-
 tests/data/test1905                                |   5 +-
 tests/data/test1906                                |   3 -
 tests/data/test1907                                |   3 -
 tests/data/test1908                                |  20 +-
 tests/data/test1909                                |   5 +-
 tests/data/test1910                                |   5 +-
 tests/data/{test1541 => test1911}                  |  19 +-
 tests/data/{test1541 => test1912}                  |  20 +-
 tests/data/{test118 => test1913}                   |  37 +-
 tests/data/{test118 => test1914}                   |  38 +-
 tests/data/test1915                                |  50 ++
 tests/data/test192                                 |   4 +-
 tests/data/test193                                 |   5 +-
 tests/data/test194                                 |   4 +-
 tests/data/test197                                 |   5 +-
 tests/data/test198                                 |   5 +-
 tests/data/test199                                 |   5 +-
 tests/data/test2                                   |   4 +-
 tests/data/test2001                                |   4 +-
 tests/data/test2002                                |   4 +-
 tests/data/test2003                                |   5 +-
 tests/data/test2005                                |   4 +-
 tests/data/test2006                                |   4 +-
 tests/data/test2007                                |   4 +-
 tests/data/test2008                                |   4 +-
 tests/data/test2009                                |   4 +-
 tests/data/test2010                                |   4 +-
 tests/data/test2011                                |   4 +-
 tests/data/test2012                                |   4 +-
 tests/data/test2023                                |   3 -
 tests/data/test2024                                |   3 -
 tests/data/test2025                                |   3 -
 tests/data/test2026                                |   3 -
 tests/data/test2027                                |   3 -
 tests/data/test2028                                |   3 -
 tests/data/test2029                                |   3 -
 tests/data/test2030                                |   3 -
 tests/data/test2031                                |   3 -
 tests/data/test2032                                |   3 -
 tests/data/test2033                                | 125 ---
 tests/data/test2034                                |   4 +-
 tests/data/test2036                                |   3 -
 tests/data/test2037                                |   3 +-
 tests/data/test2040                                |   5 +-
 tests/data/test2041                                |   4 +-
 tests/data/test2046                                |   5 +-
 tests/data/test2047                                |   5 +-
 tests/data/test2049                                |   7 +-
 tests/data/test2050                                |   5 +-
 tests/data/test2051                                |   6 +-
 tests/data/test2052                                |   5 +-
 tests/data/test2053                                |   5 +-
 tests/data/test2054                                |   7 +-
 tests/data/test2055                                |   5 +-
 tests/data/test2056                                |   4 +-
 tests/data/test2057                                |   5 +-
 tests/data/test2058                                |   6 +-
 tests/data/test2059                                |   6 +-
 tests/data/test206                                 |   7 +-
 tests/data/test2060                                |   6 +-
 tests/data/test2061                                |   6 +-
 tests/data/test2062                                |   6 +-
 tests/data/test2063                                |   6 +-
 tests/data/test2064                                |   6 +-
 tests/data/test2065                                |   6 +-
 tests/data/test2066                                |   6 +-
 tests/data/test2067                                |   5 +-
 tests/data/test2068                                |   5 +-
 tests/data/test2069                                |   5 +-
 tests/data/test207                                 |   4 +-
 tests/data/test2070                                |   4 +-
 tests/data/test2073                                |   4 +-
 tests/data/test2074                                |   4 +-
 tests/data/test2076                                |   5 +-
 tests/data/test2078                                |   4 +-
 tests/data/test208                                 |   4 +-
 tests/data/test209                                 |   7 +-
 tests/data/test2100                                | Bin 1647 -> 1642 bytes
 tests/data/test213                                 |   7 +-
 tests/data/test214                                 |   4 +-
 tests/data/test217                                 |   4 +-
 tests/data/test218                                 |   4 +-
 tests/data/test22                                  |   5 +-
 tests/data/test220                                 |   4 +-
 tests/data/test221                                 |   4 +-
 tests/data/test222                                 |   4 +-
 tests/data/test223                                 |   4 +-
 tests/data/test224                                 |   4 +-
 tests/data/test230                                 |   4 +-
 tests/data/test232                                 |   4 +-
 tests/data/test233                                 |   5 +-
 tests/data/test234                                 |   5 +-
 tests/data/test235                                 |   3 +
 tests/data/test236                                 |   1 +
 tests/data/test239                                 |   7 +-
 tests/data/test24                                  |   5 +-
 tests/data/test240                                 |   4 +-
 tests/data/test241                                 |   4 +-
 tests/data/test242                                 |   4 +-
 tests/data/test243                                 |   9 +-
 tests/data/test245                                 |   7 +-
 tests/data/test246                                 |   7 +-
 tests/data/test249                                 |   4 +-
 tests/data/test25                                  |  15 +-
 tests/data/test256                                 |   4 +-
 tests/data/test257                                 |   9 +-
 tests/data/test258                                 |   6 +-
 tests/data/test259                                 |   6 +-
 tests/data/test26                                  |   5 +-
 tests/data/test260                                 |   4 +-
 tests/data/test262                                 | Bin 1137 -> 1132 bytes
 tests/data/test263                                 |   4 +-
 tests/data/test264                                 |   4 +-
 tests/data/test265                                 |   7 +-
 tests/data/test266                                 |   4 +-
 tests/data/test267                                 |   7 +-
 tests/data/test268                                 |   4 +-
 tests/data/test269                                 |   4 +-
 tests/data/test27                                  |   6 +-
 tests/data/test273                                 |   6 +-
 tests/data/test274                                 |   5 +-
 tests/data/test275                                 |   7 +-
 tests/data/test276                                 |   5 +-
 tests/data/test277                                 |   5 +-
 tests/data/test278                                 |   4 +-
 tests/data/test279                                 |   4 +-
 tests/data/test28                                  |   5 +-
 tests/data/test281                                 |   4 +-
 tests/data/test282                                 |   4 +-
 tests/data/test29                                  |   4 +-
 tests/data/test292                                 |   4 +-
 tests/data/test293                                 |   4 +-
 tests/data/test299                                 |   4 +-
 tests/data/test3                                   |   4 +-
 tests/data/test30                                  |   4 +-
 tests/data/test300                                 |   4 +-
 tests/data/test3000                                |   4 +-
 tests/data/test3001                                |   4 +-
 tests/data/{test293 => test3008}                   |  31 +-
 tests/data/{test293 => test3009}                   |  31 +-
 tests/data/test301                                 |   4 +-
 tests/data/{test293 => test3011}                   |  31 +-
 tests/data/{test293 => test3012}                   |  34 +-
 tests/data/{test74 => test3013}                    |  51 +-
 tests/data/{test1439 => test3014}                  |  10 +-
 tests/data/{test193 => test3015}                   |  60 +-
 tests/data/test302                                 |   3 -
 tests/data/test303                                 |   4 +-
 tests/data/test304                                 |   4 +-
 tests/data/test305                                 |   3 -
 tests/data/test306                                 |   4 +-
 tests/data/test307                                 |   4 +-
 tests/data/test309                                 |   5 +-
 tests/data/test31                                  |   6 +-
 tests/data/test310                                 |   4 +-
 tests/data/test314                                 |   4 +-
 tests/data/test315                                 |   4 +-
 tests/data/test316                                 |   4 +-
 tests/data/test317                                 |   5 +-
 tests/data/test318                                 |   5 +-
 tests/data/test319                                 |   4 +-
 tests/data/test32                                  |   5 +-
 tests/data/test325                                 |   4 +-
 tests/data/test326                                 |   4 +-
 tests/data/test327                                 |   7 +-
 tests/data/test328                                 |   2 +-
 tests/data/test329                                 |   5 +-
 tests/data/test33                                  |   5 +-
 tests/data/test330                                 |   5 +-
 tests/data/test331                                 |   5 +-
 tests/data/test334                                 |   4 +-
 tests/data/test335                                 |   9 +-
 tests/data/test338                                 |   5 +-
 tests/data/test339                                 |   8 +-
 tests/data/test34                                  |   4 +-
 tests/data/test341                                 |   3 -
 tests/data/test342                                 |   6 +-
 tests/data/test343                                 |   8 +-
 tests/data/test344                                 |   6 +-
 tests/data/test345                                 |   8 +-
 tests/data/test346                                 |   4 +-
 tests/data/{test339 => test347}                    |  15 +-
 tests/data/{test1096 => test348}                   |  43 +-
 tests/data/test35                                  | Bin 810 -> 805 bytes
 tests/data/test355                                 |   4 +-
 tests/data/test356                                 |   6 +-
 tests/data/test357                                 |   5 +-
 tests/data/test358                                 |   5 +-
 tests/data/test359                                 |   5 +-
 tests/data/test36                                  |   4 +-
 tests/data/test37                                  |   4 +-
 tests/data/test38                                  |   4 +-
 tests/data/test39                                  |   4 +-
 tests/data/test393                                 |   4 +-
 tests/data/test394                                 |   4 +-
 tests/data/test395                                 |   4 +-
 tests/data/test396                                 |   4 +-
 tests/data/test397                                 |   4 +-
 tests/data/test4                                   |   5 +-
 tests/data/test40                                  |   6 +-
 tests/data/test42                                  |   6 +-
 tests/data/test43                                  |   5 +-
 tests/data/test430                                 |   6 +-
 tests/data/test431                                 |   6 +-
 tests/data/test432                                 |   6 +-
 tests/data/{test2078 => test433}                   |  45 +-
 tests/data/{test1290 => test434}                   |  26 +-
 tests/data/test44                                  |   4 +-
 tests/data/test45                                  |   5 +-
 tests/data/test46                                  |   8 +-
 tests/data/test47                                  |   4 +-
 tests/data/test48                                  |   5 +-
 tests/data/test49                                  |   6 +-
 tests/data/test490                                 |   5 +-
 tests/data/test491                                 |   4 +-
 tests/data/test492                                 |   7 +-
 tests/data/test493                                 |  61 ++
 tests/data/test5                                   |   4 +-
 tests/data/test50                                  |   6 +-
 tests/data/test506                                 |   7 +-
 tests/data/test51                                  |   6 +-
 tests/data/test511                                 |   4 +-
 tests/data/test512                                 |   3 -
 tests/data/test514                                 |   3 -
 tests/data/test515                                 |   3 -
 tests/data/test516                                 |   3 -
 tests/data/test52                                  |   6 +-
 tests/data/test522                                 |   3 -
 tests/data/test523                                 |   3 -
 tests/data/test53                                  |   4 +-
 tests/data/test530                                 |  83 --
 tests/data/test533                                 |   2 +-
 tests/data/test534                                 |   2 +-
 tests/data/test54                                  |   4 +-
 tests/data/test540                                 |   3 -
 tests/data/test544                                 |   3 -
 tests/data/test546                                 |   2 +-
 tests/data/test547                                 |   6 -
 tests/data/test548                                 |   6 -
 tests/data/test549                                 |   3 -
 tests/data/test55                                  |   6 +-
 tests/data/test550                                 |   3 -
 tests/data/test551                                 |   3 -
 tests/data/test552                                 | Bin 142947 -> 2967 bytes
 tests/data/test553                                 |  21 +-
 tests/data/test555                                 |   6 -
 tests/data/test556                                 |   3 -
 tests/data/test558                                 |   4 +-
 tests/data/test56                                  |   4 +-
 tests/data/test560                                 |   3 -
 tests/data/test561                                 |   3 -
 tests/data/test57                                  |   4 +-
 tests/data/test573                                 |   3 -
 tests/data/test58                                  |   4 +-
 tests/data/test580                                 |   3 -
 tests/data/test581                                 |   3 -
 tests/data/test584                                 | 102 ---
 tests/data/test585                                 |   3 -
 tests/data/test589                                 |   3 -
 tests/data/test59                                  |   4 +-
 tests/data/test590                                 |   7 +-
 tests/data/test6                                   |   4 +-
 tests/data/test60                                  |   4 +-
 tests/data/test61                                  |   6 +-
 tests/data/test62                                  |   7 +-
 tests/data/test63                                  |   4 +-
 tests/data/test64                                  |   6 +-
 tests/data/test65                                  |   6 +-
 tests/data/test658                                 |   3 -
 tests/data/test659                                 |   3 -
 tests/data/test66                                  |   4 +-
 tests/data/test662                                 |   5 +-
 tests/data/test663                                 |   5 +-
 tests/data/test669                                 |   6 +-
 tests/data/test67                                  |   7 +-
 tests/data/test674                                 |   3 -
 tests/data/test68                                  |   7 +-
 tests/data/test69                                  |   9 +-
 tests/data/test7                                   |   4 +-
 tests/data/test70                                  |   7 +-
 tests/data/test700                                 |   4 +-
 tests/data/test701                                 |   4 +-
 tests/data/test702                                 |   2 +-
 tests/data/test703                                 |   2 +-
 tests/data/test708                                 |   4 +-
 tests/data/test709                                 |   4 +-
 tests/data/test710                                 |   4 +-
 tests/data/test716                                 |   2 +-
 tests/data/test717                                 |   4 +-
 tests/data/test72                                  |   7 +-
 tests/data/test73                                  |   6 +-
 tests/data/test74                                  |   5 +-
 tests/data/test75                                  |   3 -
 tests/data/test76                                  |   3 -
 tests/data/test77                                  |   4 +-
 tests/data/test78                                  |   4 +-
 tests/data/test79                                  |   4 +-
 tests/data/test8                                   |   4 +-
 tests/data/test80                                  |   7 +-
 tests/data/test81                                  |   7 +-
 tests/data/test82                                  |   5 +-
 tests/data/test83                                  |   7 +-
 tests/data/test84                                  |   5 +-
 tests/data/test85                                  |   5 +-
 tests/data/test86                                  |   9 +-
 tests/data/test88                                  |   6 +-
 tests/data/test89                                  |  11 +-
 tests/data/test9                                   |   4 +-
 tests/data/test90                                  |  13 +-
 tests/data/test91                                  |   9 +-
 tests/data/test92                                  |   4 +-
 tests/data/test93                                  |   4 +-
 tests/data/test94                                  |   5 +-
 tests/data/test95                                  |   7 +-
 tests/data/test97                                  |   4 +-
 tests/data/test970                                 |   6 +-
 tests/data/test971                                 |   5 +
 tests/data/test98                                  |   4 +-
 tests/data/test99                                  |   4 +-
 tests/dictserver.py.in                             |  11 +-
 tests/directories.pm                               |   2 +-
 tests/disable-scan.pl.in                           |   4 +-
 tests/error-codes.pl.in                            |   4 +-
 tests/extern-scan.pl.in                            |   2 +-
 tests/ftp.pm                                       |   2 +-
 tests/ftpserver.pl.in                              |  19 +-
 tests/fuzz/download_fuzzer.sh                      |   2 +-
 tests/getpart.pm                                   |   9 +-
 tests/http2-server.pl.in                           |   2 +-
 tests/httpserver.pl.in                             |   2 +-
 tests/keywords.pl.in                               |   2 +-
 tests/libtest/.gitignore                           |   2 +-
 tests/libtest/CMakeLists.txt                       |   2 +-
 tests/libtest/Makefile.am                          |   2 +-
 tests/libtest/Makefile.inc                         |  43 +-
 tests/libtest/chkdecimalpoint.c                    |   4 +-
 tests/libtest/chkhostname.c                        |   4 +-
 tests/libtest/first.c                              |   4 +-
 tests/libtest/lib1156.c                            |   2 +-
 tests/libtest/lib1500.c                            |   4 +-
 tests/libtest/lib1501.c                            |   4 +-
 tests/libtest/lib1502.c                            |   4 +-
 tests/libtest/lib1506.c                            |   4 +-
 tests/libtest/lib1507.c                            |   2 +-
 tests/libtest/lib1508.c                            |   2 +-
 tests/libtest/lib1509.c                            |   2 +-
 tests/libtest/lib1510.c                            |   4 +-
 tests/libtest/lib1511.c                            |   4 +-
 tests/libtest/lib1512.c                            |   4 +-
 tests/libtest/lib1513.c                            |   4 +-
 tests/libtest/lib1514.c                            |   2 +-
 tests/libtest/lib1515.c                            |   2 +-
 tests/libtest/lib1517.c                            |   4 +-
 tests/libtest/lib1518.c                            |   4 +-
 tests/libtest/lib1520.c                            |   2 +-
 tests/libtest/lib1522.c                            |   4 +-
 tests/libtest/lib1523.c                            |   9 +-
 tests/libtest/lib1525.c                            |   2 +-
 tests/libtest/lib1526.c                            |   2 +-
 tests/libtest/lib1527.c                            |   2 +-
 tests/libtest/lib1528.c                            |   4 +-
 tests/libtest/lib1529.c                            |   4 +-
 tests/libtest/lib1530.c                            |   4 +-
 tests/libtest/lib1531.c                            |   2 +-
 tests/libtest/lib1532.c                            |   4 +-
 tests/libtest/lib1533.c                            |   2 +-
 tests/libtest/lib1534.c                            |   4 +-
 tests/libtest/lib1535.c                            |   2 +-
 tests/libtest/lib1536.c                            |   2 +-
 tests/libtest/lib1537.c                            |   4 +-
 tests/libtest/lib1538.c                            |  16 +-
 tests/libtest/lib1540.c                            |   2 +-
 tests/libtest/lib1541.c                            |  11 +-
 tests/libtest/lib1550.c                            |   6 +-
 tests/libtest/lib1551.c                            |   4 +-
 tests/libtest/lib1552.c                            |   4 +-
 tests/libtest/lib1553.c                            |   4 +-
 tests/libtest/lib1554.c                            |   2 +-
 tests/libtest/lib1555.c                            |   4 +-
 tests/libtest/lib1556.c                            |   4 +-
 tests/libtest/lib1557.c                            |   4 +-
 tests/libtest/lib1558.c                            |   6 +-
 tests/libtest/lib1559.c                            |   4 +-
 tests/libtest/lib1560.c                            |  19 +-
 tests/libtest/lib1564.c                            |   2 +-
 tests/libtest/lib1565.c                            |   4 +-
 tests/libtest/lib1567.c                            |   2 +-
 tests/libtest/lib1591.c                            |   4 +-
 tests/libtest/lib1592.c                            |  12 +-
 tests/libtest/lib1593.c                            |   4 +-
 tests/libtest/lib1594.c                            |   4 +-
 tests/libtest/lib1900.c                            |   2 +-
 tests/libtest/lib1905.c                            |   4 +-
 tests/libtest/lib1906.c                            |   4 +-
 tests/libtest/lib1907.c                            |   4 +-
 tests/libtest/lib1908.c                            |  17 +-
 tests/libtest/lib1910.c                            |   2 +-
 tests/libtest/lib1911.c                            |  89 +++
 tests/libtest/lib1912.c                            |  80 ++
 tests/libtest/{lib1908.c => lib1913.c}             |  11 +-
 tests/libtest/lib1915.c                            |  95 +++
 tests/libtest/lib3010.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/lib505.c                             |   6 +-
 tests/libtest/lib506.c                             |   4 +-
 tests/libtest/lib507.c                             |   4 +-
 tests/libtest/lib508.c                             |   4 +-
 tests/libtest/lib509.c                             |   2 +-
 tests/libtest/lib510.c                             |   4 +-
 tests/libtest/lib511.c                             |   4 +-
 tests/libtest/lib512.c                             |   2 +-
 tests/libtest/lib513.c                             |   4 +-
 tests/libtest/lib514.c                             |   4 +-
 tests/libtest/lib515.c                             |   4 +-
 tests/libtest/lib516.c                             |   4 +-
 tests/libtest/lib517.c                             |   4 +-
 tests/libtest/lib518.c                             |   4 +-
 tests/libtest/lib519.c                             |   2 +-
 tests/libtest/lib520.c                             |   4 +-
 tests/libtest/lib521.c                             |   2 +-
 tests/libtest/lib523.c                             |   2 +-
 tests/libtest/lib524.c                             |   2 +-
 tests/libtest/lib525.c                             |   4 +-
 tests/libtest/lib526.c                             |   4 +-
 tests/libtest/lib530.c                             |   4 +-
 tests/libtest/lib533.c                             |   4 +-
 tests/libtest/lib537.c                             |   4 +-
 tests/libtest/lib539.c                             |   4 +-
 tests/libtest/lib540.c                             |   4 +-
 tests/libtest/lib541.c                             |   6 +-
 tests/libtest/lib542.c                             |   4 +-
 tests/libtest/lib543.c                             |   2 +-
 tests/libtest/lib544.c                             |   4 +-
 tests/libtest/lib547.c                             |   2 +-
 tests/libtest/lib549.c                             |   2 +-
 tests/libtest/lib552.c                             |   4 +-
 tests/libtest/lib553.c                             |   2 +-
 tests/libtest/lib554.c                             |   4 +-
 tests/libtest/lib555.c                             |   4 +-
 tests/libtest/lib556.c                             |   6 +-
 tests/libtest/lib557.c                             |   2 +-
 tests/libtest/lib558.c                             |   2 +-
 tests/libtest/lib559.c                             |   2 +-
 tests/libtest/lib560.c                             |   2 +-
 tests/libtest/lib562.c                             |   4 +-
 tests/libtest/lib564.c                             |   4 +-
 tests/libtest/lib566.c                             |   2 +-
 tests/libtest/lib567.c                             |   2 +-
 tests/libtest/lib568.c                             |   2 +-
 tests/libtest/lib569.c                             |   4 +-
 tests/libtest/lib570.c                             |   8 +-
 tests/libtest/lib571.c                             |   4 +-
 tests/libtest/lib572.c                             |   2 +-
 tests/libtest/lib573.c                             |   2 +-
 tests/libtest/lib574.c                             |   4 +-
 tests/libtest/lib575.c                             |   4 +-
 tests/libtest/lib576.c                             |   2 +-
 tests/libtest/lib578.c                             |   4 +-
 tests/libtest/lib579.c                             |   2 +-
 tests/libtest/lib582.c                             |   2 +-
 tests/libtest/lib583.c                             |  15 +-
 tests/libtest/lib586.c                             |   2 +-
 tests/libtest/lib589.c                             |   4 +-
 tests/libtest/lib590.c                             |   4 +-
 tests/libtest/lib591.c                             |   2 +-
 tests/libtest/lib597.c                             |   4 +-
 tests/libtest/lib598.c                             |   2 +-
 tests/libtest/lib599.c                             |   4 +-
 tests/libtest/lib643.c                             |   2 +-
 tests/libtest/lib650.c                             |   4 +-
 tests/libtest/lib651.c                             |   2 +-
 tests/libtest/lib652.c                             |   2 +-
 tests/libtest/lib653.c                             |   4 +-
 tests/libtest/lib654.c                             |   2 +-
 tests/libtest/lib655.c                             |   4 +-
 tests/libtest/lib658.c                             |   4 +-
 tests/libtest/lib659.c                             |   4 +-
 tests/libtest/lib661.c                             |   4 +-
 tests/libtest/lib666.c                             |   2 +-
 tests/libtest/lib667.c                             |   2 +-
 tests/libtest/lib668.c                             |   2 +-
 tests/libtest/lib670.c                             |   2 +-
 tests/libtest/lib674.c                             |   2 +-
 tests/libtest/libauthretry.c                       |   4 +-
 tests/libtest/libntlmconnect.c                     |   4 +-
 tests/libtest/mk-lib1521.pl                        |  18 +-
 tests/libtest/notexists.pl                         |   2 +-
 tests/libtest/sethostname.c                        |   2 +-
 tests/libtest/sethostname.h                        |   4 +-
 tests/libtest/stub_gssapi.c                        |   4 +-
 tests/libtest/stub_gssapi.h                        |   2 +-
 tests/libtest/test.h                               |  48 +-
 tests/libtest/test1013.pl                          |   2 +-
 tests/libtest/test1022.pl                          |   2 +-
 tests/libtest/test307.pl                           |   2 +-
 tests/libtest/test610.pl                           |   2 +-
 tests/libtest/test613.pl                           |   2 +-
 tests/libtest/testtrace.c                          |   4 +-
 tests/libtest/testtrace.h                          |   2 +-
 tests/libtest/testutil.c                           |   2 +-
 tests/libtest/testutil.h                           |   2 +-
 tests/manpage-scan.pl.in                           |   2 +-
 tests/mem-include-scan.pl.in                       |   2 +-
 tests/memanalyze.pl.in                             |   4 +-
 tests/negtelnetserver.py.in                        |  10 +-
 tests/nroff-scan.pl.in                             |   2 +-
 tests/objnames-test08.sh                           | 217 ------
 tests/objnames-test10.sh                           | 217 ------
 tests/objnames.inc                                 | 107 ---
 tests/options-scan.pl                              |   6 +-
 tests/pathhelp.pm                                  |   2 +-
 tests/rtspserver.pl.in                             |   2 +-
 tests/runtests.1                                   |   2 +-
 tests/runtests.pl.in                               | 195 ++---
 tests/secureserver.pl.in                           |   2 +-
 tests/server/CMakeLists.txt                        |   2 +-
 tests/server/Makefile.am                           |   4 +-
 tests/server/Makefile.inc                          |   2 +-
 tests/server/base64.pl                             |   2 +-
 tests/server/disabled.c                            |   4 +-
 tests/server/fake_ntlm.c                           |   2 +-
 tests/server/getpart.c                             |   2 +-
 tests/server/getpart.h                             |   2 +-
 tests/server/mqttd.c                               |   9 +-
 tests/server/resolve.c                             |   2 +-
 tests/server/rtspd.c                               |   2 +-
 tests/server/server_setup.h                        |   2 +-
 tests/server/server_sockaddr.h                     |   2 +-
 tests/server/sockfilt.c                            |   8 +-
 tests/server/socksd.c                              |   2 +-
 tests/server/sws.c                                 |   2 +-
 tests/server/testpart.c                            |   2 +-
 tests/server/tftp.h                                |   2 +-
 tests/server/tftpd.c                               |  15 +-
 tests/server/util.c                                |  13 +-
 tests/server/util.h                                |   2 +-
 tests/serverhelp.pm                                |   2 +-
 tests/smbserver.py.in                              |  24 +-
 tests/sshhelp.pm                                   |   2 +-
 tests/sshserver.pl.in                              |   2 +-
 tests/symbol-scan.pl.in                            |   4 +-
 tests/testcurl.1                                   |   8 +-
 tests/testcurl.pl.in                               |  14 +-
 tests/tftpserver.pl.in                             |   2 +-
 tests/unit/CMakeLists.txt                          |   2 +-
 tests/unit/Makefile.am                             |   6 +-
 tests/unit/Makefile.inc                            |   7 +-
 tests/unit/{README => README.md}                   |  42 +-
 tests/unit/curlcheck.h                             |   2 +-
 tests/unit/unit1300.c                              |  32 +-
 tests/unit/unit1301.c                              |   4 +-
 tests/unit/unit1302.c                              |   2 +-
 tests/unit/unit1303.c                              |   4 +-
 tests/unit/unit1304.c                              |   4 +-
 tests/unit/unit1305.c                              |   4 +-
 tests/unit/unit1307.c                              |   4 +-
 tests/unit/unit1308.c                              |   4 +-
 tests/unit/unit1309.c                              |   4 +-
 tests/unit/unit1323.c                              |   4 +-
 tests/unit/unit1330.c                              |   2 +-
 tests/unit/unit1394.c                              |   2 +-
 tests/unit/unit1395.c                              |   2 +-
 tests/unit/unit1396.c                              |   4 +-
 tests/unit/unit1397.c                              |   4 +-
 tests/unit/unit1398.c                              |   4 +-
 tests/unit/unit1399.c                              |   4 +-
 tests/unit/unit1600.c                              |   2 +-
 tests/unit/unit1601.c                              |   2 +-
 tests/unit/unit1602.c                              |   6 +-
 tests/unit/unit1603.c                              |   6 +-
 tests/unit/unit1604.c                              |   4 +-
 tests/unit/unit1605.c                              |   2 +-
 tests/unit/unit1606.c                              |   4 +-
 tests/unit/unit1607.c                              |   4 +-
 tests/unit/unit1608.c                              |   2 +-
 tests/unit/unit1609.c                              |   4 +-
 tests/unit/unit1610.c                              |   2 +-
 tests/unit/unit1611.c                              |   2 +-
 tests/unit/unit1612.c                              |   2 +-
 tests/unit/unit1620.c                              |   2 +-
 tests/unit/unit1621.c                              |   4 +-
 tests/unit/unit1650.c                              |   2 +-
 tests/unit/unit1651.c                              |   4 +-
 tests/unit/unit1652.c                              |   4 +-
 tests/unit/unit1653.c                              |  44 +-
 tests/unit/unit1654.c                              |  17 +-
 tests/unit/unit1655.c                              |   2 +-
 tests/unit/unit1660.c                              | 171 +++++
 tests/{curl_test_data.py.in => util.py}            |  35 +-
 tests/valgrind.pm                                  |   2 +-
 tests/valgrind.supp                                |  32 +
 tests/version-scan.pl.in                           |   2 +-
 winbuild/README.md                                 | 132 ++++
 2355 files changed, 14804 insertions(+), 15536 deletions(-)

diff --cc .travis.yml
index db47499fc,b37ac7156..9ce8ee441
--- a/.travis.yml
+++ b/.travis.yml
@@@ -27,231 -33,373 +27,98 @@@ env
    - LD_LIBRARY_PATH=/usr/local/lib
  
  addons:
-     apt:
-         config:
-             retries: true
-         sources: &common_sources
-             - ubuntu-toolchain-r-test
-         packages: &common_packages
-             - cmake
-             - gcc-8
-             - valgrind
-             - libev-dev
-             - libc-ares-dev
-             - g++-8
-             - libstdc++-8-dev
-             - stunnel4
-             - libidn2-0-dev
-             - gnutls-bin
-             - libgnutls28-dev
-             - python-impacket
-             - pax
-             - ncompress
+   apt: &common_apt
+     config:
+       retries: true
+     packages: &common_packages
+     - cmake
+     - valgrind
+     - libev-dev
+     - libc-ares-dev
+     - g++-8
++    - libstdc++-8-dev
+     - stunnel4
+     - libidn2-dev
+     - gnutls-bin
++    - libgnutls28-dev
+     - python-impacket
+     - ninja-build
++    - pax
++    - ncompress
  
- matrix:
-     include:
-         - os: linux
-           compiler: gcc
-           dist: trusty
-           env:
-               - 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
-           env:
-               - T=normal C="--disable-verbose" 
CPPFLAGS="-Wno-variadic-macros" NOTESTS=1
-               - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
-         - os: linux
-           compiler: gcc
-           dist: bionic
-           before_install:
-               # Install and use the current stable release of Go
-               - gimme --list
-               - eval "$(gimme stable)"
-               - gimme --list
-           env:
-               - T=novalgrind C=""
-               - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
-           addons:
-               apt:
-                   sources:
-                       - ppa:longsleep/golang-backports
-                       - *common_sources
-                   packages:
-                       - *common_packages
-         - os: linux
-           compiler: gcc
-           dist: xenial
-           env:
-               - T=novalgrind C="--enable-alt-svc" NOTESTS=
-               - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
-         - os: linux
-           compiler: clang
-           dist: xenial
-           env:
-               - T=debug
-               - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7"
-           addons:
-               apt:
-                   sources:
-                       - *common_sources
-                       - llvm-toolchain-xenial-7
-                   packages:
-                       - *common_packages
-                       - clang-7
-         - os: linux
-           compiler: clang
-           dist: xenial
-           env:
-               - T=debug C="--enable-alt-svc"
-               - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7"
-           addons:
-               apt:
-                   sources:
-                       - *common_sources
-                       - llvm-toolchain-xenial-7
-                   packages:
-                       - *common_packages
-                       - clang-7
-         - os: linux
-           compiler: clang
-           dist: bionic
-           env:
-               - T=debug C="--with-gnutls --without-ssl"
-               - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7"
-           addons:
-               apt:
-                   sources:
-                       - *common_sources
-                       - llvm-toolchain-bionic-7
-                   packages:
-                       - *common_packages
-                       - clang-7
-         - os: linux
-           compiler: gcc
-           dist: trusty
-           env:
-               - T=iconv
-               - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
-         - os: linux
-           compiler: gcc
-           dist: bionic
-           env:
-               - T=cmake
-               - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
-         - os: linux
-           compiler: clang
-           dist: bionic
-           env:
-               - T=cmake
-               - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7"
-           addons:
-               apt:
-                   sources:
-                       - *common_sources
-                       - llvm-toolchain-bionic-7
-                   packages:
-                       - *common_packages
-                       - clang-7
-         - os: linux
-           compiler: gcc
-           dist: xenial
-           env:
-               - T=torture
-               - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
-           addons:
-               apt:
-                   sources:
-                       - *common_sources
-                   packages:
-                       - *common_packages
-                       - lcov
-         - os: linux
-           compiler: gcc
-           dist: bionic
-           env:
-               - T=distcheck
-               - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
-         - os: linux
-           compiler: clang
-           dist: bionic
-           env:
-               - T=fuzzer
-               - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7"
-           addons:
-               apt:
-                   sources:
-                       - *common_sources
-                       - llvm-toolchain-bionic-7
-                   packages:
-                       - *common_packages
-                       - clang-7
-         - os: linux
-           compiler: clang
-           dist: bionic
-           env:
-               - T=tidy
-               - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7"
-           addons:
-               apt:
-                   sources:
-                       - *common_sources
-                       - llvm-toolchain-bionic-7
-                   packages:
-                       - *common_packages
-                       - clang-7
-                       - clang-tidy-7
-         - os: linux
-           compiler: clang
-           dist: bionic
-           env:
-               - T=scan-build
-               - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7"
-           addons:
-               apt:
-                   sources:
-                       - *common_sources
-                       - llvm-toolchain-bionic-7
-                   packages:
-                       - *common_packages
-                       - clang-7
-         - os: linux
-           compiler: clang
-           dist: xenial
-           env:
-               - T=debug 
CFLAGS="-fsanitize=address,undefined,signed-integer-overflow 
-fno-sanitize-recover=undefined,integer -Wformat -Werror=format-security 
-Werror=array-bounds -g" LDFLAGS="-fsanitize=address,undefined 
-fno-sanitize-recover=undefined,integer" LIBS="-ldl -lubsan"
-               - OVERRIDE_CC="CC=clang-7" OVERRIDE_CXX="CXX=clang++-7"
-           addons:
-               apt:
-                   sources:
-                       - *common_sources
-                       - llvm-toolchain-xenial-7
-                   packages:
-                       - *common_packages
-                       - clang-7
-         - os: linux
-           arch: arm64
-           compiler: gcc
-           dist: bionic
-           env:
-               - T=debug C="--enable-alt-svc"
-               - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
-           addons:
-               apt:
-                   sources:
-                       - *common_sources
-                   packages:
-                       - *common_packages
-                       - libev-dev
-                       - libtool
-                       - pkg-config
-                       - zlib1g-dev
+ jobs:
+   include:
+   - env:
 -    - T=normal C="--with-gssapi --with-libssh2" CHECKSRC=1
++    - T=normal C="" CHECKSRC=1
+     - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - krb5-user
 -        - libssh2-1-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=normal C=--with-libssh
 -    # Avoid bionic, its pre-release libssh version triggers deprecation 
warnings.
 -    dist: focal
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - cmake
 -        - valgrind
 -        - libev-dev
 -        - libc-ares-dev
 -        - g++-8
 -        - stunnel4
 -        - libidn2-dev
 -        - gnutls-bin
 -        # The above list is common_packages minus impacket.
 -        - libssh-dev
 -        - ninja-build
 -  - env:
 -    - T=normal C="--enable-ares"
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -  - env:
 -    - T=normal C="--disable-proxy"
+   - env:
+     - T=normal C="--disable-verbose" CPPFLAGS="-Wno-variadic-macros" NOTESTS=1
+     - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=novalgrind BORINGSSL=yes C="--with-ssl=$HOME/boringssl" 
LD_LIBRARY_PATH=/home/travis/boringssl/lib:/usr/local/lib
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    before_install:
 -    - eval "$(gimme stable)"; gimme --list  # Install latest Go (for 
boringssl)
 -  - env:
 -    - T=novalgrind QUICHE="yes" C="--with-ssl=$HOME/quiche/deps/boringssl/src 
--with-quiche=$HOME/quiche/target/release" 
LD_LIBRARY_PATH=$HOME/quiche/target/release:/usr/local/lib
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=novalgrind LIBRESSL=yes C="--with-ssl=$HOME/libressl" 
LD_LIBRARY_PATH=/home/travis/libressl/lib:/usr/local/lib
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -  - env:
 -    - T=novalgrind NGTCP2=yes C="--with-ssl=$HOME/ngbuild 
--with-ngtcp2=$HOME/ngbuild --with-nghttp3=$HOME/ngbuild" NOTESTS=
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=novalgrind NGTCP2=yes GNUTLS=yes C="PKG_CONFIG_PATH=$HOME/ngbuild 
--without-ssl --with-gnutls=$HOME/ngbuild --with-ngtcp2=$HOME/ngbuild 
--with-nghttp3=$HOME/ngbuild" NOTESTS=
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -        - autogen
 -        - automake
 -        - autopoint
 -        - bison
 -        - gperf
 -        - libgmp-dev
 -        - libopts25-dev
 -        - libp11-kit-dev
 -        - libtasn1-6-dev
 -        - nettle-dev
 -  - env:
 -    - T=debug-wolfssl C="--with-wolfssl --without-ssl"
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=debug OPENSSL3="yes" C="--with-ssl=$HOME/openssl3" 
LD_LIBRARY_PATH=/home/travis/openssl3/lib:/usr/local/lib
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=debug-mesalink C="--with-mesalink --without-ssl" MESALINK=yes
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
+   - env:
+     - T=debug
+     - &clang OVERRIDE_CC="CC=clang-9" OVERRIDE_CXX="CXX=clang++-9"
+     compiler: clang
+     addons:
+       apt:
+         <<: *common_apt
+         packages:
+         - &clang_packages [*common_packages, clang-9]
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
+   - env:
+     - T=debug C="--enable-hsts --disable-alt-svc"
+     - *clang
+     compiler: clang
+     addons:
+       apt:
+         <<: *common_apt
+         packages:
+         - *clang_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=debug C="--with-mbedtls --without-ssl"
 -    - *clang
 -    compiler: clang
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *clang_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -        - libmbedtls-dev
+   - env:
+     - T=debug C="--with-gnutls --without-ssl"
+     - *clang
+     compiler: clang
+     addons:
+       apt:
+         <<: *common_apt
+         packages:
+         - *clang_packages
 -        - libgnutls28-dev
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=debug C="--with-nss --without-ssl" NOTESTS=1 CPPFLAGS="-isystem 
/usr/include/nss"
 -    - *clang
 -    compiler: clang
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *clang_packages
 -        - libnss3-dev
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
+   - env:
+     - T=iconv
+     - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -  - env:
 -    - T=cmake BORINGSSL=yes QUICHE=yes C="-GNinja -DUSE_QUICHE=1 
-DOPENSSL_ROOT_DIR=$HOME/boringssl -DCURL_BROTLI=1 -DCURL_ZSTD=1"
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    - PKG_CONFIG_PATH="$HOME/quiche/target/release"
 -    before_install:
 -    - eval "$(gimme stable)"; gimme --list  # Install latest Go (for 
boringssl)
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=cmake NGTCP2=yes C="-GNinja -DUSE_NGTCP2=ON -DCURL_BROTLI=1 
-DCURL_ZSTD=1"
 -    - *clang
 -    - PKG_CONFIG_PATH="$HOME/ngbuild/lib/pkgconfig"
 -    compiler: clang
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *clang_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
+   - env:
+     - T=torture
+     - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
+     addons:
+       apt:
+         <<: *common_apt
+         packages:
+         - *common_packages
+         - lcov
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -        - libssh2-1-dev
+   - env:
+     - T=distcheck
+     - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
+     addons:
+       apt:
+         <<: *common_apt
+         packages:
+         - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=fuzzer
 -    - *clang
 -    compiler: clang
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *clang_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=tidy
 -    - *clang
 -    compiler: clang
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *clang_packages
 -        - clang-tidy-9
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
+   - env:
+     - T=scan-build
+     - *clang
+     compiler: clang
+     addons:
+       apt:
+         <<: *common_apt
+         packages:
+         - *clang_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
+   - env:
+     - T=debug CFLAGS="-fsanitize=address,undefined,signed-integer-overflow 
-fno-sanitize-recover=undefined,integer -Wformat -Werror=format-security 
-Werror=array-bounds -g" LDFLAGS="-fsanitize=address,undefined 
-fno-sanitize-recover=undefined,integer" LIBS="-ldl -lubsan" TFLAGS=-n
+     - *clang
+     compiler: clang
+     addons:
+       apt:
+         <<: *common_apt
+         packages:
+         - *clang_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -  - env:
 -    - T=debug C="" TFLAGS=-n
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    arch: arm64
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -        - libev-dev
 -        - libssl-dev
 -        - libtool
 -        - pkg-config
 -        - zlib1g-dev
 -
 -  - env:
 -    - T=debug C="" TFLAGS=-n
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    arch: ppc64le
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -        - libev-dev
 -        - libssl-dev
 -        - libtool
 -        - pkg-config
 -        - zlib1g-dev
 -
 -  - env:
 -    - T=debug C="" TFLAGS=-n
 -    - OVERRIDE_CC="CC=gcc-8" OVERRIDE_CXX="CXX=g++-8"
 -    arch: s390x
 -    addons:
 -      apt:
 -        <<: *common_apt
 -        packages:
 -        - *common_packages
 -        - libpsl-dev
 -        - libbrotli-dev
 -        - libzstd-dev
 -        - libev-dev
 -        - libssl-dev
 -        - libtool
 -        - pkg-config
 -        - zlib1g-dev
  
  before_install:
  - export "${OVERRIDE_CC-blank=}"
diff --cc CMake/gnurl-config.cmake.in
index 240c3a96e,000000000..aa58ed3b9
mode 100644,000000..100644
--- a/CMake/gnurl-config.cmake.in
+++ b/CMake/gnurl-config.cmake.in
@@@ -1,36 -1,0 +1,36 @@@
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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 687929a79,6a1a6fe8e..8696fee5a
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@@ -45,11 -45,9 +45,12 @@@ include(Macros
  include(CMakeDependentOption)
  include(CheckCCompilerFlag)
  
 -project(CURL C)
 +project(GNURL C)
 +
 +message(WARNING "the curl cmake build system is poorly maintained. Be aware")
 +
- file(STRINGS $GNURL_SOURCE_DIR}/include/gnurl/curlver.h 
CURL_VERSION_H_CONTENTS REGEX "#define LIBCURL_VERSION( |_NUM )")
++file(STRINGS ${GNURL_SOURCE_DIR}/include/gnurl/curlver.h 
CURL_VERSION_H_CONTENTS REGEX "#define LIBCURL_VERSION( |_NUM )")
+ 
 -file(STRINGS ${CURL_SOURCE_DIR}/include/curl/curlver.h 
CURL_VERSION_H_CONTENTS REGEX "#define LIBCURL_VERSION( |_NUM )")
  string(REGEX MATCH "#define LIBCURL_VERSION \"[^\"]*"
    CURL_VERSION ${CURL_VERSION_H_CONTENTS})
  string(REGEX REPLACE "[^\"]+\"" "" CURL_VERSION ${CURL_VERSION})
@@@ -175,57 -173,51 +183,59 @@@ 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)
+ option(CURL_DISABLE_MQTT "to disable MQTT" OFF)
+ mark_as_advanced(CURL_DISABLE_MQTT)
  
  if(HTTP_ONLY)
+   set(CURL_DISABLE_DICT ON)
+   set(CURL_DISABLE_FILE ON)
    set(CURL_DISABLE_FTP ON)
+   set(CURL_DISABLE_GOPHER ON)
+   set(CURL_DISABLE_IMAP ON)
    set(CURL_DISABLE_LDAP ON)
    set(CURL_DISABLE_LDAPS ON)
-   set(CURL_DISABLE_TELNET ON)
-   set(CURL_DISABLE_DICT ON)
-   set(CURL_DISABLE_FILE ON)
-   set(CURL_DISABLE_TFTP ON)
-   set(CURL_DISABLE_RTSP ON)
+   set(CURL_DISABLE_MQTT ON)
    set(CURL_DISABLE_POP3 ON)
-   set(CURL_DISABLE_IMAP ON)
+   set(CURL_DISABLE_RTSP ON)
    set(CURL_DISABLE_SMB ON)
    set(CURL_DISABLE_SMTP ON)
-   set(CURL_DISABLE_GOPHER ON)
+   set(CURL_DISABLE_TELNET ON)
+   set(CURL_DISABLE_TFTP ON)
  endif()
  
+ option(CURL_DISABLE_ALTSVC "to disable alt-svc support" OFF)
+ mark_as_advanced(CURL_DISABLE_ALTSVC)
  option(CURL_DISABLE_COOKIES "to disable cookies support" OFF)
  mark_as_advanced(CURL_DISABLE_COOKIES)
- 
  option(CURL_DISABLE_CRYPTO_AUTH "to disable cryptographic authentication" OFF)
  mark_as_advanced(CURL_DISABLE_CRYPTO_AUTH)
 +
  option(CURL_DISABLE_VERBOSE_STRINGS "to disable verbose strings" OFF)
  mark_as_advanced(CURL_DISABLE_VERBOSE_STRINGS)
 +
  option(ENABLE_IPV6 "Define if you want to enable IPv6 support" ON)
  mark_as_advanced(ENABLE_IPV6)
 +
  if(ENABLE_IPV6 AND NOT WIN32)
    include(CheckStructHasMember)
    check_struct_has_member("struct sockaddr_in6" sin6_addr "netinet/in.h"
@@@ -665,30 -621,27 +671,27 @@@ option(USE_NGHTTP2 "Use Nghttp2 library
  check_library_exists_concat("idn2" idn2_lookup_ul HAVE_LIBIDN2)
  
  # Check for symbol dlopen (same as HAVE_LIBDL)
 -check_library_exists("${CURL_LIBS}" dlopen "" HAVE_DLOPEN)
 +check_library_exists("${GNURL_LIBS}" dlopen "" HAVE_DLOPEN)
  
- option(CURL_ZLIB "Set to ON to enable building curl with zlib support." ON)
  set(HAVE_LIBZ OFF)
  set(HAVE_ZLIB_H OFF)
  set(USE_ZLIB OFF)
- if(CURL_ZLIB)
-   find_package(ZLIB QUIET)
-   if(ZLIB_FOUND)
-     set(HAVE_ZLIB_H ON)
-     set(HAVE_LIBZ ON)
-     set(USE_ZLIB ON)
- 
-     # Depend on ZLIB via imported targets if supported by the running
-     # version of CMake.  This allows our dependents to get our dependencies
-     # transitively.
-     if(NOT CMAKE_VERSION VERSION_LESS 3.4)
-       list(APPEND GNURL_LIBS ZLIB::ZLIB)
-     else()
-       list(APPEND GNURL_LIBS ${ZLIB_LIBRARIES})
-       include_directories(${ZLIB_INCLUDE_DIRS})
-     endif()
-     list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS})
+ optional_dependency(ZLIB)
+ if(ZLIB_FOUND)
+   set(HAVE_ZLIB_H ON)
+   set(HAVE_LIBZ ON)
+   set(USE_ZLIB ON)
+ 
+   # Depend on ZLIB via imported targets if supported by the running
+   # version of CMake.  This allows our dependents to get our dependencies
+   # transitively.
+   if(NOT CMAKE_VERSION VERSION_LESS 3.4)
 -    list(APPEND CURL_LIBS ZLIB::ZLIB)
++    list(APPEND GNURL_LIBS ZLIB::ZLIB)
+   else()
 -    list(APPEND CURL_LIBS ${ZLIB_LIBRARIES})
++    list(APPEND GNURL_LIBS ${ZLIB_LIBRARIES})
+     include_directories(${ZLIB_INCLUDE_DIRS})
    endif()
+   list(APPEND CMAKE_REQUIRED_INCLUDES ${ZLIB_INCLUDE_DIRS})
  endif()
  
  option(CURL_BROTLI "Set to ON to enable building curl with brotli support." 
OFF)
@@@ -770,8 -773,9 +773,8 @@@ if(CMAKE_USE_GSSAPI
      set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}")
      set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} 
${GSS_LINKER_FLAGS}")
      set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} 
${GSS_LINKER_FLAGS}")
+     set(CMAKE_STATIC_LINKER_FLAGS "${CMAKE_STATIC_LINKER_FLAGS} 
${GSS_LINKER_FLAGS}")
 -    list(APPEND CURL_LIBS ${GSS_LIBRARIES})
 -
 +    list(APPEND GNURL_LIBS ${GSS_LIBRARIES})
- 
    else()
      message(WARNING "GSSAPI support has been requested but no supporting 
libraries found. Skipping.")
    endif()
diff --cc Makefile.am
index 75d9ce110,16adc9833..5c4815b2b
--- a/Makefile.am
+++ b/Makefile.am
@@@ -200,9 -327,419 +200,10 @@@ 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)
+       (cd packages && $(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 README.md
index 363fd4929,44c85121a..1479aa36d
--- a/README.md
+++ b/README.md
@@@ -1,8 -1,16 +1,9 @@@
 -![curl logo](https://curl.se/logo/curl-logo.svg)
 +gnurl
 +=====
  
 -[![CII Best 
Practices](https://bestpractices.coreinfrastructure.org/projects/63/badge)](https://bestpractices.coreinfrastructure.org/projects/63)
 -[![Coverity 
passed](https://scan.coverity.com/projects/curl/badge.svg)](https://scan.coverity.com/projects/curl)
 -[![Travis-CI Build 
Status](https://travis-ci.org/curl/curl.svg?branch=master)](https://travis-ci.org/curl/curl)
 -[![AppVeyor Build 
Status](https://ci.appveyor.com/api/projects/status/l1vv31029huhf4g4?svg=true)](https://ci.appveyor.com/project/curlorg/curl)
 -[![Azure DevOps Build 
Status](https://dev.azure.com/daniel0244/curl/_apis/build/status/curl.curl?branchName=master)](https://dev.azure.com/daniel0244/curl/_build/latest?definitionId=1&branchName=master)
 -[![Cirrus Build 
Status](https://api.cirrus-ci.com/github/curl/curl.svg?branch=master)](https://cirrus-ci.com/github/curl/curl)
 -[![Backers on Open 
Collective](https://opencollective.com/curl/backers/badge.svg)](#backers)
 -[![Sponsors on Open 
Collective](https://opencollective.com/curl/sponsors/badge.svg)](#sponsors)
 -[![Language Grade: 
C/C++](https://img.shields.io/lgtm/grade/cpp/g/curl/curl.svg?logo=lgtm&logoWidth=18)](https://lgtm.com/projects/g/curl/curl/context:cpp)
 -[![Codacy 
Badge](https://api.codacy.com/project/badge/Grade/d11483a0cc5c4ebd9da4ff9f7cd56690)](https://www.codacy.com/app/curl/curl?utm_source=github.com&amp;utm_medium=referral&amp;utm_content=curl/curl&amp;utm_campaign=Badge_Grade)
 -[![Fuzzing 
Status](https://oss-fuzz-build-logs.storage.googleapis.com/badges/curl.svg)](https://bugs.chromium.org/p/oss-fuzz/issues/list?sort=-opened&can=1&q=proj:curl)
 +[![Travis-CI Build 
Status](https://travis-ci.org/teknokatze/gnurl.svg?branch=master)](https://travis-ci.org/teknokatze/gnurl)
 +[![Cirrus Build 
Status](https://api.cirrus-ci.com/github/teknokatze/gnurl.svg?branch=master)](https://cirrus-ci.com/github/teknokatze/gnurl)
++![curl logo](https://curl.se/logo/curl-logo.svg)
  
  Curl is a command-line tool for transferring data specified with URL
  syntax. Find out how to use curl by reading [the curl.1 man
@@@ -12,26 -20,26 +13,25 @@@ by reading [the INSTALL document](https
  
  libcurl is the library curl is using to do its job. It is readily available to
  be used by your software. Read [the libcurl.3 man
- page](https://curl.haxx.se/libcurl/c/libcurl.html) to learn how!
+ page](https://curl.se/libcurl/c/libcurl.html) to learn how!
  
- You can find answers to the most frequent questions for curl in [the FAQ 
document](https://curl.haxx.se/docs/faq.html).
 -You can find answers to the most frequent questions we get in [the FAQ
++You can find answers to the most frequent questions for curl in [the FAQ
+ document](https://curl.se/docs/faq.html).
  
- Study [the COPYING file](https://curl.haxx.se/docs/copyright.html) for
- distribution terms and similar. If you distribute curl binaries or other
- binaries that involve libcurl, you might enjoy [the LICENSE-MIXING
- document](https://curl.haxx.se/legal/licmix.html).
+ Study [the COPYING file](https://curl.se/docs/copyright.html) for
+ distribution terms.
  
  ## Contact
  
- For curl, if you have problems, questions, ideas or suggestions, please 
contact us by posting to a suitable [mailing list](https://curl.haxx.se/mail/).
 -If you have problems, questions, ideas or suggestions, please contact us by
 -posting to a suitable [mailing list](https://curl.se/mail/).
++For curl, if you have problems, questions, ideas or suggestions, please 
contact us by posting to a suitable [mailing list](https://curl.se/mail/).
 +For gnurl, if you have problems, questions, ideas or suggestions, please 
contact us by posting to a suitable [mailing 
list](https://gnunet.org/en/engage.html) or bug tracker.
  
- All curl contributors to the project are listed in [the THANKS 
document](https://curl.haxx.se/docs/thanks.html).
 -All contributors to the project are listed in [the THANKS
 -document](https://curl.se/docs/thanks.html).
++All curl contributors to the project are listed in [the THANKS 
document](https://curl.se/docs/thanks.html).
  
  ## Website
  
 -Visit the [curl website](https://curl.se/) for the latest news and
 -downloads.
 +Visit the [gnurl web site](https://gnunet.org/en/gnurl.html/) for the latest 
news and downloads.
- For curl specific information, visit the [curl web 
site](https://curl.haxx.se/).
++For curl specific information, visit the [curl web site](https://curl.se/).
  
  ## Git
  
@@@ -43,21 -51,14 +43,20 @@@ To download the very latest source fro
  
  ## Security problems
  
 -Report suspected security problems via [our HackerOne
 -page](https://hackerone.com/curl) and not in public!
 +gnurl is a fork of curl. Any security problems should first be tested with 
curl.
- In the unlikely case that you suspect a gnurl specific security problem, 
report it to the author of this software (ng0, gnunet.org).
++In the unlikely case that you suspect a gnurl specific security problem, 
report it to the author of this fork software (Nikita, gnunet).
  
  ## Notice
  
 -Curl contains pieces of source code that is Copyright (c) 1998, 1999 Kungliga
 -Tekniska Högskolan. This notice is included here to comply with the
 -distribution terms.
 +gnurl, and therefore Curl contains pieces of source code that is
 +Copyright (c) 1998, 1999 Kungliga Tekniska Högskolan. This notice is
 +included here to comply with the distribution terms.
 +
 +## Backers
 +
- In the unlikely case anyone wants to sponsor my work, which primarily covers 
NetBSD and GNUnet now, [[click here](https://www.patreon.com/ng0)].
- The continued work on this (micro)fork of curl is financed for by [[Taler 
SA](https://taler.net)].
++In the unlikely case anyone wants to sponsor my work, which primarily covers 
NetBSD and GNUnet now, [[click here](https://www.patreon.com/teknokatze)].
 +
 +## Curl - Please support the development of curl, section below from 
[curl/curl](https://github.com/curl/curl)
  
  ## Backers
  
diff --cc configure.ac
index fb8fe15df,39bdb5ef1..66b4e6635
--- a/configure.ac
+++ b/configure.ac
@@@ -24,7 -24,7 +24,7 @@@ dnl Process this file with autoconf to 
  AC_PREREQ(2.57)
  
  dnl We don't know the version number "statically" so we use a dash here
- AC_INIT([gnurl], [-], [a suitable curl mailing list: 
https://curl.haxx.se/mail/])
 -AC_INIT([curl], [-], [a suitable curl mailing list: https://curl.se/mail/])
++AC_INIT([gnurl], [-], [a suitable curl mailing list: https://curl.se/mail/])
  
  XC_OVR_ZZ50
  XC_OVR_ZZ60
@@@ -169,29 -168,8 +169,35 @@@ curl_verbose_msg="enabled (--disable-ve
      ssl_backends=
  
  
 -enable_altsvc="yes"
 +dnl valgrind for tests -- coredumps all over the place with the
 +dnl valgrind version I here, fixes welcome.
 +AC_MSG_CHECKING(wether to enable valgrind in testsuite)
 +AC_ARG_ENABLE([valgrind],
 +            [AS_HELP_STRING([--enable-valgrind],
 +                            [Enable valgrind for tests])],
 +                            [valgrind=${enableval}],
 +                            [valgrind=no])
 +AC_MSG_RESULT($valgrind)
 +AS_IF([test "x$valgrind" = "xno"],
 +      [AM_CONDITIONAL([VALGRIND],
 +                    false)
 +       AC_DEFINE([VALGRIND],
 +              [0],
 +              [Running tests with -n])
 +       valgrind_msg="no"],
 +      [AM_CONDITIONAL([VALGRIND],
 +                      true)
 +      AC_DEFINE([VALGRIND],
 +                [1],
 +                [Running tests with valgrind])
 +      valgrind_msg="yes"])
 +
++# curl_altsvc_msg="enabled";
++#    ssl_backends=
++#
++#
++# enable_altsvc="yes"
+ 
  dnl
  dnl Save some initial values the user might have provided
  dnl
@@@ -1830,22 -1754,14 +1840,16 @@@ if test -z "$ssl_backends" -o "x$OPT_SS
  
    case "$OPT_SSL" in
    yes)
 +    AC_MSG_ERROR([You must not build gnurl with OpenSSL, use --without-ssl!])
      dnl --with-ssl (without path) used
-     if test x$cross_compiling != xyes; then
-       dnl only do pkg-config magic when not cross-compiling
-       PKGTEST="yes"
-     fi
+     PKGTEST="yes"
      PREFIX_OPENSSL=/usr/local/ssl
      LIB_OPENSSL="$PREFIX_OPENSSL/lib$libsuff"
      ;;
    off)
 +    AC_MSG_ERROR([You must not build gnurl with OpenSSL, use --without-ssl!])
      dnl no --with-ssl option given, just check default places
-     if test x$cross_compiling != xyes; then
-       dnl only do pkg-config magic when not cross-compiling
-       PKGTEST="yes"
-     fi
+     PKGTEST="yes"
      PREFIX_OPENSSL=
      ;;
    *)
@@@ -5298,10 -5264,9 +5371,10 @@@ AC_MSG_NOTICE([Configured to build gnur
    Alt-svc:          ${curl_altsvc_msg}
    HTTP2:            ${curl_h2_msg}
    HTTP3:            ${curl_h3_msg}
-   ESNI:             ${curl_esni_msg}
+   ECH:              ${curl_ech_msg}
    Protocols:        ${SUPPORT_PROTOCOLS}
    Features:         ${SUPPORT_FEATURES}
 +  valgrind tests:   ${valgrind_msg}
  ])
  if test -n "$experimental"; then
   cat >&2 << _EOF
diff --cc docs/Makefile.am
index 820764528,9cf657748..376299811
--- a/docs/Makefile.am
+++ b/docs/Makefile.am
@@@ -41,9 -45,10 +41,9 @@@ EXTRA_DIST 
   ALTSVC.md                                      \
   BINDINGS.md                                    \
   BUG-BOUNTY.md                                  \
-  BUGS                                           \
+  BUGS.md                                        \
   CHECKSRC.md                                    \
   CIPHERS.md                                     \
 - CMakeLists.txt                                 \
   CODE_OF_CONDUCT.md                             \
   CODE_REVIEW.md                                 \
   CODE_STYLE.md                                  \
@@@ -80,10 -85,12 +80,10 @@@
   SSLCERTS.md                                    \
   THANKS                                         \
   TODO                                           \
-  TheArtOfHttpScripting                          \
+  TheArtOfHttpScripting.md                       \
   VERSIONS.md
  
 -MAN2HTML= roffit $< >$@
 -
 -SUFFIXES = .1 .html .pdf
 +SUFFIXES = .1
  
  # $(abs_builddir) is to disable VPATH when searching for this file, which
  # would otherwise find the copy in $(srcdir) which breaks the $(HUGE)
diff --cc docs/cmdline-opts/page-footer
index de77c4e0c,d1f32a66f..f105eb759
--- a/docs/cmdline-opts/page-footer
+++ b/docs/cmdline-opts/page-footer
@@@ -39,6 -37,9 +39,10 @@@ accesses the target URL through the pro
  The list of host names can also be include numerical IP addresses, and IPv6
  versions should then be given without enclosing brackets.
  
+ IPv6 numerical addresses are compared as strings, so they will only match if
+ the representations are the same: "::1" is the same as "::0:1" but they don't
+ match.
++
  .IP "CURL_SSL_BACKEND <TLS backend>"
  If curl was built with support for "MultiSSL", meaning that it has built-in
  support for more than one TLS backend, this environment variable can be set to
@@@ -275,10 -276,11 +279,10 @@@ is the protocol used for HTTP/3 transfe
  .IP XX
  More error codes will appear here in future releases. The existing ones
  are meant to never change.
 -.SH AUTHORS / CONTRIBUTORS
 +.Sh AUTHORS
  Daniel Stenberg is the main author, but the whole list of contributors is
  found in the separate THANKS file.
 -.SH WWW
 -https://curl.se
 -.SH "SEE ALSO"
 -.BR ftp (1),
 -.BR wget (1)
 +.Sh SEE ALSO
- .Lk https://curl.haxx.se
++.Lk https://curl.se
 +.Xr ftp 1 ,
 +.Xr wget 1
diff --cc docs/examples/.gitignore
index cf5571bbf,f1f0e39cf..45661bb7e
--- a/docs/examples/.gitignore
+++ b/docs/examples/.gitignore
@@@ -1,10 -1,5 +1,11 @@@
 +altsvc
 +http3
 +http3-present
 +imap-authzid
 +pop3-authzid
 +smtp-authzid
  10-at-a-time
+ altsvc
  anyauthput
  certinfo
  chkspeed
diff --cc docs/libcurl/gnurl_easy_cleanup.3
index fd05f44fb,000000000..0411b1809
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_cleanup.3
+++ b/docs/libcurl/gnurl_easy_cleanup.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_cleanup 3 "22 Aug 2007" "libcurl 7.17.0" "libgnurl Manual"
 +.SH NAME
 +curl_easy_cleanup - End a libcurl easy handle
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +.BI "void curl_easy_cleanup(CURL *" handle ");"
 +.SH DESCRIPTION
 +This function must be the last function to call for an easy session. It is the
 +opposite of the \fIcurl_easy_init(3)\fP function and must be called with the
 +same \fIhandle\fP as input that a \fIcurl_easy_init(3)\fP call returned.
 +
 +This might close all connections this handle has used and possibly has kept
 +open until now - unless it was attached to a multi handle while doing the
 +transfers. Don't call this function if you intend to transfer more files,
 +re-using handles is a key to good performance with libcurl.
 +
 +Occasionally you may get your progress callback or header callback called from
 +within \fIcurl_easy_cleanup(3)\fP (if previously set for the handle using
 +\fIcurl_easy_setopt(3)\fP). Like if libcurl decides to shut down the
 +connection and the protocol is of a kind that requires a command/response
 +sequence before disconnect. Examples of such protocols are FTP, POP3 and IMAP.
 +
 +Any use of the \fBhandle\fP after this function has been called and have
 +returned, is illegal. \fIcurl_easy_cleanup(3)\fP kills the handle and all
 +memory associated with it!
 +
 +Passing in a NULL pointer in \fIhandle\fP will make this function return
 +immediately with no action.
 +.SH "OLD TIMES"
 +For libcurl versions before 7.17,: after you've called this function, you can
 +safely remove all the strings you've previously told libcurl to use, as it
 +won't use them anymore now.
 +.SH RETURN VALUE
 +None
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  res = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_easy_init "(3), " curl_easy_duphandle "(3), "
 +.BR curl_easy_reset "(3), "
 +.BR curl_multi_cleanup "(3), " curl_multi_remove_handle "(3) "
diff --cc docs/libcurl/gnurl_easy_duphandle.3
index bf413235c,000000000..df5277d2e
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_duphandle.3
+++ b/docs/libcurl/gnurl_easy_duphandle.3
@@@ -1,53 -1,0 +1,53 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_duphandle 3 "19 Sep 2014" "libcurl" "libgnurl Manual"
 +.SH NAME
 +curl_easy_duphandle - Clone a libcurl session handle
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +.BI "CURL *curl_easy_duphandle(CURL *"handle ");"
 +
 +.SH DESCRIPTION
 +This function will return a new curl handle, a duplicate, using all the
 +options previously set in the input curl \fIhandle\fP. Both handles can
 +subsequently be used independently and they must both be freed with
 +\fIcurl_easy_cleanup(3)\fP.
 +
 +All strings that the input handle has been told to point to (as opposed to
 +copy) with previous calls to \fIcurl_easy_setopt(3)\fP using char * inputs,
 +will be pointed to by the new handle as well. You must therefore make sure to
 +keep the data around until both handles have been cleaned up.
 +
 +The new handle will \fBnot\fP inherit any state information, no connections,
 +no SSL sessions and no cookies. It also will not inherit any share object
 +states or options (it will be made as if \fICURLOPT_SHARE(3)\fP was set to
 +NULL).
 +
 +In multi-threaded programs, this function must be called in a synchronous way,
 +the input handle may not be in use when cloned.
 +.SH RETURN VALUE
 +If this function returns NULL, something went wrong and no valid handle was
 +returned.
 +.SH "SEE ALSO"
 +.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_reset "(3),"
 +.BR curl_global_init "(3)"
diff --cc docs/libcurl/gnurl_easy_escape.3
index 8430ea1c2,000000000..fed95a650
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_escape.3
+++ b/docs/libcurl/gnurl_easy_escape.3
@@@ -1,67 -1,0 +1,68 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_escape 3 "7 April 2006" "libcurl 7.15.4" "libgnurl Manual"
 +.SH NAME
 +curl_easy_escape - URL encodes the given string
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "char *curl_easy_escape( CURL *" curl ", const char *" string
 +.BI ", int "length " );"
 +.ad
 +.SH DESCRIPTION
 +This function converts the given input \fIstring\fP to a URL encoded string
 +and returns that as a new allocated string. All input characters that are not
 +a-z, A-Z, 0-9, '-', '.', '_' or '~' are converted to their "URL escaped"
 +version (%NN where NN is a two-digit hexadecimal number).
 +
 +If \fIlength\fP is set to 0 (zero), \fIcurl_easy_escape(3)\fP uses strlen() on
- the input \fIstring\fP to find out the size.
++the input \fIstring\fP to find out the size. This function does not accept
++input strings longer than \fBCURL_MAX_INPUT_LENGTH\fP (8 MB).
 +
 +You must \fIcurl_free(3)\fP the returned string when you're done with it.
 +.SH ENCODING
 +libcurl is typically not aware of, nor does it care about, character
 +encodings. \fIcurl_easy_escape(3)\fP encodes the data byte-by-byte into the
 +URL encoded version without knowledge or care for what particular character
 +encoding the application or the receiving server may assume that the data
 +uses.
 +
 +The caller of \fIcurl_easy_escape(3)\fP must make sure that the data passed in
 +to the function is encoded correctly.
 +.SH AVAILABILITY
 +Added in 7.15.4 and replaces the old \fIcurl_escape(3)\fP function.
 +.SH RETURN VALUE
 +A pointer to a null-terminated string or NULL if it failed.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  char *output = curl_easy_escape(curl, "data to convert", 15);
 +  if(output) {
 +    printf("Encoded: %s\\n", output);
 +    curl_free(output);
 +  }
 +}
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_easy_unescape "(3), " curl_free "(3), " RFC 3986
diff --cc docs/libcurl/gnurl_easy_getinfo.3
index c6a338e1c,000000000..105699377
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_getinfo.3
+++ b/docs/libcurl/gnurl_easy_getinfo.3
@@@ -1,283 -1,0 +1,286 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_METHOD
 +Last used HTTP method.
 +See \fICURLINFO_EFFECTIVE_METHOD(3)\fP
 +.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_ERROR
++Detailed proxy error.
++See \fICURLINFO_PROXY_ERROR(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 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 a17400dc5,000000000..af8950038
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_pause.3
index 6d223f2dd,000000000..3f27639d2
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_pause.3
+++ b/docs/libcurl/gnurl_easy_pause.3
@@@ -1,103 -1,0 +1,103 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_pause 3 "17 Dec 2007" "libcurl 7.18.0" "libgnurl Manual"
 +.SH NAME
 +curl_easy_pause - pause and unpause a connection
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +.BI "CURLcode curl_easy_pause(CURL *"handle ", int "bitmask " );"
 +
 +.SH DESCRIPTION
 +Using this function, you can explicitly mark a running connection to get
 +paused, and you can unpause a connection that was previously paused.
 +
 +A connection can be paused by using this function or by letting the read or
 +the write callbacks return the proper magic return code
 +(\fICURL_READFUNC_PAUSE\fP and \fICURL_WRITEFUNC_PAUSE\fP). A write callback
 +that returns pause signals to the library that it couldn't take care of any
 +data at all, and that data will then be delivered again to the callback when
 +the writing is later unpaused.
 +
 +While it may feel tempting, take care and notice that you cannot call this
 +function from another thread. To unpause, you may for example call it from the
 +progress callback (\fICURLOPT_PROGRESSFUNCTION(3)\fP), which gets called at
 +least once per second, even if the connection is paused.
 +
 +When this function is called to unpause reading, the chance is high that you
 +will get your write callback called before this function returns.
 +
 +The \fBhandle\fP argument is of course identifying the handle that operates on
 +the connection you want to pause or unpause.
 +
 +The \fBbitmask\fP argument is a set of bits that sets the new state of the
 +connection. The following bits can be used:
 +.IP CURLPAUSE_RECV
 +Pause receiving data. There will be no data received on this connection until
 +this function is called again without this bit set. Thus, the write callback
 +(\fICURLOPT_WRITEFUNCTION(3)\fP) won't be called.
 +.IP CURLPAUSE_SEND
 +Pause sending data. There will be no data sent on this connection until this
 +function is called again without this bit set. Thus, the read callback
 +(\fICURLOPT_READFUNCTION(3)\fP) won't be called.
 +.IP CURLPAUSE_ALL
 +Convenience define that pauses both directions.
 +.IP CURLPAUSE_CONT
 +Convenience define that unpauses both directions.
 +.SH RETURN VALUE
 +CURLE_OK (zero) means that the option was set properly, and a non-zero return
 +code means something wrong occurred after the new state was set.  See the
 +\fIlibcurl-errors(3)\fP man page for the full list with descriptions.
 +.SH LIMITATIONS
 +The pausing of transfers does not work with protocols that work without
 +network connectivity, like FILE://. Trying to pause such a transfer, in any
 +direction, will cause problems in the worst case or an error in the best case.
 +.SH AVAILABILITY
 +This function was added in libcurl 7.18.0. Before this version, there was no
 +explicit support for pausing transfers.
 +.SH "USAGE WITH THE MULTI-SOCKET INTERFACE"
 +Before libcurl 7.32.0, when a specific handle was unpaused with this function,
 +there was no particular forced rechecking or similar of the socket's state,
 +which made the continuation of the transfer get delayed until next
 +multi-socket call invoke or even longer. Alternatively, the user could
 +forcibly call for example \fIcurl_multi_socket_all(3)\fP - with a rather hefty
 +performance penalty.
 +
 +Starting in libcurl 7.32.0, unpausing a transfer will schedule a timeout
 +trigger for that handle 1 millisecond into the future, so that a
 +curl_multi_socket_action( ... CURL_SOCKET_TIMEOUT) can be used immediately
 +afterwards to get the transfer going again as desired.
 +.SH "MEMORY USE"
 +When pausing a read by returning the magic return code from a write callback,
 +the read data is already in libcurl's internal buffers so it'll have to keep
 +it in an allocated buffer until the reading is again unpaused using this
 +function.
 +
 +If the downloaded data is compressed and is asked to get uncompressed
 +automatically on download, libcurl will continue to uncompress the entire
 +downloaded chunk and it will cache the data uncompressed. This has the side-
 +effect that if you download something that is compressed a lot, it can result
 +in a very large data amount needing to be allocated to save the data during
 +the pause. This said, you should probably consider not using paused reading if
 +you allow libcurl to uncompress data automatically.
 +.SH "SEE ALSO"
 +.BR curl_easy_cleanup "(3), " curl_easy_reset "(3)"
diff --cc docs/libcurl/gnurl_easy_perform.3
index 36c6675f0,000000000..6e1ea6f37
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_recv.3
index d5127757f,000000000..abcc97457
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_recv.3
+++ b/docs/libcurl/gnurl_easy_recv.3
@@@ -1,84 -1,0 +1,84 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_recv 3 "29 April 2008" "libcurl 7.18.2" "libgnurl Manual"
 +.SH NAME
 +curl_easy_recv - receives raw data on an "easy" connection
 +.SH SYNOPSIS
 +.B #include <gnurl/easy.h>
 +.sp
 +.BI "CURLcode curl_easy_recv( CURL *" curl ", void *" buffer ","
 +.BI "size_t " buflen ", size_t *" n ");"
 +.ad
 +.SH DESCRIPTION
 +This function receives raw data from the established connection. You may use
 +it together with \fIcurl_easy_send(3)\fP to implement custom protocols using
 +libcurl. This functionality can be particularly useful if you use proxies
 +and/or SSL encryption: libcurl will take care of proxy negotiation and
 +connection set-up.
 +
 +\fBbuffer\fP is a pointer to your buffer that will get the received
 +data. \fBbuflen\fP is the maximum amount of data you can get in that
 +buffer. The variable \fBn\fP points to will receive the number of received
 +bytes.
 +
 +To establish the connection, set \fICURLOPT_CONNECT_ONLY(3)\fP option before
 +calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Note that
 +\fIcurl_easy_recv(3)\fP does not work on connections that were created without
 +this option.
 +
 +The call will return \fBCURLE_AGAIN\fP if there is no data to read - the
 +socket is used in non-blocking mode internally. When \fBCURLE_AGAIN\fP is
 +returned, use your operating system facilities like \fIselect(2)\fP to wait
 +for data. The socket may be obtained using \fIcurl_easy_getinfo(3)\fP with
 +\fICURLINFO_ACTIVESOCKET(3)\fP.
 +
 +Wait on the socket only if \fIcurl_easy_recv(3)\fP returns \fBCURLE_AGAIN\fP.
 +The reason for this is libcurl or the SSL library may internally cache some
 +data, therefore you should call \fIcurl_easy_recv(3)\fP until all data is
 +read which would include any cached data.
 +
 +Furthermore if you wait on the socket and it tells you there is data to read,
 +\fIcurl_easy_recv(3)\fP may return \fBCURLE_AGAIN\fP if the only data that was
 +read was for internal SSL processing, and no other data is available.
 +
 +.SH AVAILABILITY
 +Added in 7.18.2.
 +.SH RETURN VALUE
 +On success, returns \fBCURLE_OK\fP, stores the received data into
 +\fBbuffer\fP, and the number of bytes it actually read into \fB*n\fP.
 +
 +On failure, returns the appropriate error code.
 +
 +The function may return \fBCURLE_AGAIN\fP. In this case, use your operating
 +system facilities to wait until data can be read, and retry.
 +
 +Reading exactly 0 bytes indicates a closed connection.
 +
 +If there's no socket available to use from the previous transfer, this 
function
 +returns \fBCURLE_UNSUPPORTED_PROTOCOL\fP.
 +.SH EXAMPLE
 +See \fBsendrecv.c\fP in \fBdocs/examples\fP directory for usage example.
 +.SH "SEE ALSO"
 +.BR curl_easy_setopt "(3), " curl_easy_perform "(3), "
 +.BR curl_easy_getinfo "(3), "
 +.BR curl_easy_send "(3) "
diff --cc docs/libcurl/gnurl_easy_reset.3
index 5bf6ddf9a,000000000..05b7b069f
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_reset.3
+++ b/docs/libcurl/gnurl_easy_reset.3
@@@ -1,44 -1,0 +1,44 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_reset 3 "31 July 2004" "libcurl 7.12.1" "libgnurl Manual"
 +.SH NAME
 +curl_easy_reset - reset all options of a libcurl session handle
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +.BI "void curl_easy_reset(CURL *"handle ");"
 +
 +.SH DESCRIPTION
 +Re-initializes all options previously set on a specified CURL handle to the
 +default values. This puts back the handle to the same state as it was in when
 +it was just created with \fIcurl_easy_init(3)\fP.
 +
 +It does not change the following information kept in the handle: live
 +connections, the Session ID cache, the DNS cache, the cookies, the shares or
 +the alt-svc cache.
 +.SH AVAILABILITY
 +This function was added in libcurl 7.12.1
 +.SH RETURN VALUE
 +Nothing
 +.SH "SEE ALSO"
 +.BR curl_easy_init "(3)," curl_easy_cleanup "(3)," curl_easy_setopt "(3),"
 +.BR curl_easy_duphandle "(3)"
diff --cc docs/libcurl/gnurl_easy_send.3
index 08c0671b0,000000000..91c1324d4
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_send.3
+++ b/docs/libcurl/gnurl_easy_send.3
@@@ -1,75 -1,0 +1,75 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_send 3 "29 April 2008" "libcurl 7.18.2" "libgnurl Manual"
 +.SH NAME
 +curl_easy_send - sends raw data over an "easy" connection
 +.SH SYNOPSIS
 +.B #include <gnurl/easy.h>
 +.sp
 +.BI "CURLcode curl_easy_send( CURL *" curl ", const void *" buffer ","
 +.BI " size_t " buflen ", size_t *" n ");"
 +.ad
 +.SH DESCRIPTION
 +This function sends arbitrary data over the established connection. You may
 +use it together with \fIcurl_easy_recv(3)\fP to implement custom protocols
 +using libcurl. This functionality can be particularly useful if you use
 +proxies and/or SSL encryption: libcurl will take care of proxy negotiation and
 +connection set-up.
 +
 +\fBbuffer\fP is a pointer to the data of length \fBbuflen\fP that you want 
sent.
 +The variable \fBn\fP points to will receive the number of sent bytes.
 +
 +To establish the connection, set \fICURLOPT_CONNECT_ONLY(3)\fP option before
 +calling \fIcurl_easy_perform(3)\fP or \fIcurl_multi_perform(3)\fP. Note that
 +\fIcurl_easy_send(3)\fP will not work on connections that were created without
 +this option.
 +
 +The call will return \fBCURLE_AGAIN\fP if it's not possible to send data right
 +now - the socket is used in non-blocking mode internally. When
 +\fBCURLE_AGAIN\fP is returned, use your operating system facilities like
 +\fIselect(2)\fP to wait until the socket is writable. The socket may be
 +obtained using \fIcurl_easy_getinfo(3)\fP with \fICURLINFO_ACTIVESOCKET(3)\fP.
 +
 +Furthermore if you wait on the socket and it tells you it's writable,
 +\fIcurl_easy_send(3)\fP may return \fBCURLE_AGAIN\fP if the only data that was
 +sent was for internal SSL processing, and no other data could be sent.
 +
 +.SH AVAILABILITY
 +Added in 7.18.2.
 +.SH RETURN VALUE
 +On success, returns \fBCURLE_OK\fP and stores the number of bytes actually
 +sent into \fB*n\fP. Note that this may very well be less than the amount you
 +wanted to send.
 +
 +On failure, returns the appropriate error code.
 +
 +This function may return \fBCURLE_AGAIN\fP. In this case, use your operating
 +system facilities to wait until the socket is writable, and retry.
 +
 +If there's no socket available to use from the previous transfer, this 
function
 +returns \fBCURLE_UNSUPPORTED_PROTOCOL\fP.
 +.SH EXAMPLE
 +See \fBsendrecv.c\fP in \fBdocs/examples\fP directory for usage example.
 +.SH "SEE ALSO"
 +.BR curl_easy_setopt "(3), " curl_easy_perform "(3), " curl_easy_getinfo 
"(3), "
 +.BR curl_easy_recv "(3) "
diff --cc docs/libcurl/gnurl_easy_setopt.3
index 6d6e3f842,000000000..848981927
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_setopt.3
+++ b/docs/libcurl/gnurl_easy_setopt.3
@@@ -1,663 -1,0 +1,681 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_setopt 3 "25 Jun 2014" "libcurl 7.38.0" "libgnurl Manual"
 +.SH NAME
 +curl_easy_setopt \- set options for a curl easy handle
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLoption option, parameter);
 +.SH DESCRIPTION
 +\fIcurl_easy_setopt(3)\fP is used to tell libcurl how to behave. By setting
 +the appropriate options, the application can change libcurl's behavior.  All
 +options are set with an \fIoption\fP followed by a \fIparameter\fP. That
 +parameter can be a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject
 +pointer\fP or a \fBcurl_off_t\fP, depending on what the specific option
 +expects. Read this manual carefully as bad input values may cause libcurl to
 +behave badly!  You can only set one option in each function call. A typical
 +application uses many \fIcurl_easy_setopt(3)\fP calls in the setup phase.
 +
 +Options set with this function call are valid for all forthcoming transfers
 +performed using this \fIhandle\fP.  The options are not in any way reset
 +between transfers, so if you want subsequent transfers with different options,
 +you must change them between the transfers. You can optionally reset all
 +options back to internal default with \fIcurl_easy_reset(3)\fP.
 +
 +Strings passed to libcurl as 'char *' arguments, are copied by the library;
 +thus the string storage associated to the pointer argument may be overwritten
 +after \fIcurl_easy_setopt(3)\fP returns. The only exception to this rule is
 +really \fICURLOPT_POSTFIELDS(3)\fP, but the alternative that copies the string
 +\fICURLOPT_COPYPOSTFIELDS(3)\fP has some usage characteristics you need to
- read up on.
++read up on. This function does not accept input strings longer than
++\fBCURL_MAX_INPUT_LENGTH\fP (8 MB).
 +
 +The order in which the options are set does not matter.
 +
 +Before version 7.17.0, strings were not copied. Instead the user was forced
 +keep them available until libcurl no longer needed them.
 +
 +The \fIhandle\fP is the return code from a \fIcurl_easy_init(3)\fP or
 +\fIcurl_easy_duphandle(3)\fP call.
 +.SH BEHAVIOR OPTIONS
 +.IP CURLOPT_VERBOSE
 +Display verbose information. See \fICURLOPT_VERBOSE(3)\fP
 +.IP CURLOPT_HEADER
 +Include the header in the body output. See \fICURLOPT_HEADER(3)\fP
 +.IP CURLOPT_NOPROGRESS
 +Shut off the progress meter. See \fICURLOPT_NOPROGRESS(3)\fP
 +.IP CURLOPT_NOSIGNAL
 +Do not install signal handlers. See \fICURLOPT_NOSIGNAL(3)\fP
 +.IP CURLOPT_WILDCARDMATCH
 +Transfer multiple files according to a file name pattern. See 
\fICURLOPT_WILDCARDMATCH(3)\fP
 +.SH CALLBACK OPTIONS
 +.IP CURLOPT_WRITEFUNCTION
 +Callback for writing data. See \fICURLOPT_WRITEFUNCTION(3)\fP
 +.IP CURLOPT_WRITEDATA
 +Data pointer to pass to the write callback. See \fICURLOPT_WRITEDATA(3)\fP
 +.IP CURLOPT_READFUNCTION
 +Callback for reading data. See \fICURLOPT_READFUNCTION(3)\fP
 +.IP CURLOPT_READDATA
 +Data pointer to pass to the read callback. See \fICURLOPT_READDATA(3)\fP
 +.IP CURLOPT_IOCTLFUNCTION
 +Callback for I/O operations. See \fICURLOPT_IOCTLFUNCTION(3)\fP
 +.IP CURLOPT_IOCTLDATA
 +Data pointer to pass to the I/O callback. See \fICURLOPT_IOCTLDATA(3)\fP
 +.IP CURLOPT_SEEKFUNCTION
 +Callback for seek operations. See \fICURLOPT_SEEKFUNCTION(3)\fP
 +.IP CURLOPT_SEEKDATA
 +Data pointer to pass to the seek callback. See \fICURLOPT_SEEKDATA(3)\fP
 +.IP CURLOPT_SOCKOPTFUNCTION
 +Callback for sockopt operations. See \fICURLOPT_SOCKOPTFUNCTION(3)\fP
 +.IP CURLOPT_SOCKOPTDATA
 +Data pointer to pass to the sockopt callback. See \fICURLOPT_SOCKOPTDATA(3)\fP
 +.IP CURLOPT_OPENSOCKETFUNCTION
 +Callback for socket creation. See \fICURLOPT_OPENSOCKETFUNCTION(3)\fP
 +.IP CURLOPT_OPENSOCKETDATA
 +Data pointer to pass to the open socket callback. See 
\fICURLOPT_OPENSOCKETDATA(3)\fP
 +.IP CURLOPT_CLOSESOCKETFUNCTION
 +Callback for closing socket. See \fICURLOPT_CLOSESOCKETFUNCTION(3)\fP
 +.IP CURLOPT_CLOSESOCKETDATA
 +Data pointer to pass to the close socket callback. See 
\fICURLOPT_CLOSESOCKETDATA(3)\fP
 +.IP CURLOPT_PROGRESSFUNCTION
 +OBSOLETE callback for progress meter. See \fICURLOPT_PROGRESSFUNCTION(3)\fP
 +.IP CURLOPT_PROGRESSDATA
 +Data pointer to pass to the progress meter callback. See 
\fICURLOPT_PROGRESSDATA(3)\fP
 +.IP CURLOPT_XFERINFOFUNCTION
 +Callback for progress meter. See \fICURLOPT_XFERINFOFUNCTION(3)\fP
 +.IP CURLOPT_XFERINFODATA
 +Data pointer to pass to the progress meter callback. See 
\fICURLOPT_XFERINFODATA(3)\fP
 +.IP CURLOPT_HEADERFUNCTION
 +Callback for writing received headers. See \fICURLOPT_HEADERFUNCTION(3)\fP
 +.IP CURLOPT_HEADERDATA
 +Data pointer to pass to the header callback. See \fICURLOPT_HEADERDATA(3)\fP
 +.IP CURLOPT_DEBUGFUNCTION
 +Callback for debug information. See \fICURLOPT_DEBUGFUNCTION(3)\fP
 +.IP CURLOPT_DEBUGDATA
 +Data pointer to pass to the debug callback. See \fICURLOPT_DEBUGDATA(3)\fP
 +.IP CURLOPT_SSL_CTX_FUNCTION
 +Callback for SSL context logic. See \fICURLOPT_SSL_CTX_FUNCTION(3)\fP
 +.IP CURLOPT_SSL_CTX_DATA
 +Data pointer to pass to the SSL context callback. See 
\fICURLOPT_SSL_CTX_DATA(3)\fP
 +.IP CURLOPT_CONV_TO_NETWORK_FUNCTION
 +Callback for code base conversion. See 
\fICURLOPT_CONV_TO_NETWORK_FUNCTION(3)\fP
 +.IP CURLOPT_CONV_FROM_NETWORK_FUNCTION
 +Callback for code base conversion. See 
\fICURLOPT_CONV_FROM_NETWORK_FUNCTION(3)\fP
 +.IP CURLOPT_CONV_FROM_UTF8_FUNCTION
 +Callback for code base conversion. See 
\fICURLOPT_CONV_FROM_UTF8_FUNCTION(3)\fP
 +.IP CURLOPT_INTERLEAVEFUNCTION
 +Callback for RTSP interleaved data. See \fICURLOPT_INTERLEAVEFUNCTION(3)\fP
 +.IP CURLOPT_INTERLEAVEDATA
 +Data pointer to pass to the RTSP interleave callback. See 
\fICURLOPT_INTERLEAVEDATA(3)\fP
 +.IP CURLOPT_CHUNK_BGN_FUNCTION
 +Callback for wildcard download start of chunk. See 
\fICURLOPT_CHUNK_BGN_FUNCTION(3)\fP
 +.IP CURLOPT_CHUNK_END_FUNCTION
 +Callback for wildcard download end of chunk. See 
\fICURLOPT_CHUNK_END_FUNCTION(3)\fP
 +.IP CURLOPT_CHUNK_DATA
 +Data pointer to pass to the chunk callbacks. See \fICURLOPT_CHUNK_DATA(3)\fP
 +.IP CURLOPT_FNMATCH_FUNCTION
 +Callback for wildcard matching. See \fICURLOPT_FNMATCH_FUNCTION(3)\fP
 +.IP CURLOPT_FNMATCH_DATA
 +Data pointer to pass to the wildcard matching callback. See 
\fICURLOPT_FNMATCH_DATA(3)\fP
 +.IP CURLOPT_SUPPRESS_CONNECT_HEADERS
 +Suppress proxy CONNECT response headers from user callbacks. See 
\fICURLOPT_SUPPRESS_CONNECT_HEADERS(3)\fP
 +.IP CURLOPT_RESOLVER_START_FUNCTION
 +Callback to be called before a new resolve request is started. See 
\fICURLOPT_RESOLVER_START_FUNCTION(3)\fP
 +.IP CURLOPT_RESOLVER_START_DATA
 +Data pointer to pass to resolver start callback. See 
\fICURLOPT_RESOLVER_START_DATA(3)\fP
 +.SH ERROR OPTIONS
 +.IP CURLOPT_ERRORBUFFER
 +Error message buffer. See \fICURLOPT_ERRORBUFFER(3)\fP
 +.IP CURLOPT_STDERR
 +stderr replacement stream. See \fICURLOPT_STDERR(3)\fP
 +.IP CURLOPT_FAILONERROR
 +Fail on HTTP 4xx errors. \fICURLOPT_FAILONERROR(3)\fP
 +.IP CURLOPT_KEEP_SENDING_ON_ERROR
 +Keep sending on HTTP >= 300 errors. \fICURLOPT_KEEP_SENDING_ON_ERROR(3)\fP
 +.SH NETWORK OPTIONS
 +.IP CURLOPT_URL
 +URL to work on. See \fICURLOPT_URL(3)\fP
 +.IP CURLOPT_PATH_AS_IS
 +Disable squashing /../ and /./ sequences in the path. See 
\fICURLOPT_PATH_AS_IS(3)\fP
 +.IP CURLOPT_PROTOCOLS
 +Allowed protocols. See \fICURLOPT_PROTOCOLS(3)\fP
 +.IP CURLOPT_REDIR_PROTOCOLS
 +Protocols to allow redirects to. See \fICURLOPT_REDIR_PROTOCOLS(3)\fP
 +.IP CURLOPT_DEFAULT_PROTOCOL
 +Default protocol. See \fICURLOPT_DEFAULT_PROTOCOL(3)\fP
 +.IP CURLOPT_PROXY
 +Proxy to use. See \fICURLOPT_PROXY(3)\fP
 +.IP CURLOPT_PRE_PROXY
 +Socks proxy to use. See \fICURLOPT_PRE_PROXY(3)\fP
 +.IP CURLOPT_PROXYPORT
 +Proxy port to use. See \fICURLOPT_PROXYPORT(3)\fP
 +.IP CURLOPT_PROXYTYPE
 +Proxy type. See \fICURLOPT_PROXYTYPE(3)\fP
 +.IP CURLOPT_NOPROXY
 +Filter out hosts from proxy use. \fICURLOPT_NOPROXY(3)\fP
 +.IP CURLOPT_HTTPPROXYTUNNEL
 +Tunnel through the HTTP proxy. \fICURLOPT_HTTPPROXYTUNNEL(3)\fP
 +.IP CURLOPT_CONNECT_TO
 +Connect to a specific host and port. See \fICURLOPT_CONNECT_TO(3)\fP
 +.IP CURLOPT_SOCKS5_AUTH
 +Socks5 authentication methods. See \fICURLOPT_SOCKS5_AUTH(3)\fP
 +.IP CURLOPT_SOCKS5_GSSAPI_SERVICE
 +Socks5 GSSAPI service name. \fICURLOPT_SOCKS5_GSSAPI_SERVICE(3)\fP
 +.IP CURLOPT_SOCKS5_GSSAPI_NEC
 +Socks5 GSSAPI NEC mode. See \fICURLOPT_SOCKS5_GSSAPI_NEC(3)\fP
 +.IP CURLOPT_PROXY_SERVICE_NAME
 +Proxy authentication service name. \fICURLOPT_PROXY_SERVICE_NAME(3)\fP
 +.IP CURLOPT_HAPROXYPROTOCOL
 +Send an HAProxy PROXY protocol v1 header. See \fICURLOPT_HAPROXYPROTOCOL(3)\fP
 +.IP CURLOPT_SERVICE_NAME
 +Authentication service name. \fICURLOPT_SERVICE_NAME(3)\fP
 +.IP CURLOPT_INTERFACE
 +Bind connection locally to this. See \fICURLOPT_INTERFACE(3)\fP
 +.IP CURLOPT_LOCALPORT
 +Bind connection locally to this port. See \fICURLOPT_LOCALPORT(3)\fP
 +.IP CURLOPT_LOCALPORTRANGE
 +Bind connection locally to port range. See \fICURLOPT_LOCALPORTRANGE(3)\fP
 +.IP CURLOPT_DNS_CACHE_TIMEOUT
 +Timeout for DNS cache. See \fICURLOPT_DNS_CACHE_TIMEOUT(3)\fP
 +.IP CURLOPT_DNS_USE_GLOBAL_CACHE
 +OBSOLETE Enable global DNS cache. See \fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP
 +.IP CURLOPT_DOH_URL
 +Use this DOH server for name resolves. See \fICURLOPT_DOH_URL(3)\fP
 +.IP CURLOPT_BUFFERSIZE
 +Ask for alternate buffer size. See \fICURLOPT_BUFFERSIZE(3)\fP
 +.IP CURLOPT_PORT
 +Port number to connect to. See \fICURLOPT_PORT(3)\fP
 +.IP CURLOPT_TCP_FASTOPEN
 +Enable TFO, TCP Fast Open. See \fICURLOPT_TCP_FASTOPEN(3)\fP
 +.IP CURLOPT_TCP_NODELAY
 +Disable the Nagle algorithm. See \fICURLOPT_TCP_NODELAY(3)\fP
 +.IP CURLOPT_ADDRESS_SCOPE
 +IPv6 scope for local addresses. See \fICURLOPT_ADDRESS_SCOPE(3)\fP
 +.IP CURLOPT_TCP_KEEPALIVE
 +Enable TCP keep-alive. See \fICURLOPT_TCP_KEEPALIVE(3)\fP
 +.IP CURLOPT_TCP_KEEPIDLE
 +Idle time before sending keep-alive. See \fICURLOPT_TCP_KEEPIDLE(3)\fP
 +.IP CURLOPT_TCP_KEEPINTVL
 +Interval between keep-alive probes. See \fICURLOPT_TCP_KEEPINTVL(3)\fP
 +.IP CURLOPT_UNIX_SOCKET_PATH
 +Path to a Unix domain socket. See \fICURLOPT_UNIX_SOCKET_PATH(3)\fP
 +.IP CURLOPT_ABSTRACT_UNIX_SOCKET
 +Path to an abstract Unix domain socket. See 
\fICURLOPT_ABSTRACT_UNIX_SOCKET(3)\fP
 +.SH NAMES and PASSWORDS OPTIONS (Authentication)
 +.IP CURLOPT_NETRC
 +Enable .netrc parsing. See \fICURLOPT_NETRC(3)\fP
 +.IP CURLOPT_NETRC_FILE
 +\&.netrc file name. See \fICURLOPT_NETRC_FILE(3)\fP
 +.IP CURLOPT_USERPWD
 +User name and password. See \fICURLOPT_USERPWD(3)\fP
 +.IP CURLOPT_PROXYUSERPWD
 +Proxy user name and password. See \fICURLOPT_PROXYUSERPWD(3)\fP
 +.IP CURLOPT_USERNAME
 +User name. See \fICURLOPT_USERNAME(3)\fP
 +.IP CURLOPT_PASSWORD
 +Password. See \fICURLOPT_PASSWORD(3)\fP
 +.IP CURLOPT_LOGIN_OPTIONS
 +Login options. See \fICURLOPT_LOGIN_OPTIONS(3)\fP
 +.IP CURLOPT_PROXYUSERNAME
 +Proxy user name. See \fICURLOPT_PROXYUSERNAME(3)\fP
 +.IP CURLOPT_PROXYPASSWORD
 +Proxy password. See \fICURLOPT_PROXYPASSWORD(3)\fP
 +.IP CURLOPT_HTTPAUTH
 +HTTP server authentication methods. See \fICURLOPT_HTTPAUTH(3)\fP
 +.IP CURLOPT_TLSAUTH_USERNAME
 +TLS authentication user name. See \fICURLOPT_TLSAUTH_USERNAME(3)\fP
 +.IP CURLOPT_PROXY_TLSAUTH_USERNAME
 +Proxy TLS authentication user name. See 
\fICURLOPT_PROXY_TLSAUTH_USERNAME(3)\fP
 +.IP CURLOPT_TLSAUTH_PASSWORD
 +TLS authentication password. See \fICURLOPT_TLSAUTH_PASSWORD(3)\fP
 +.IP CURLOPT_PROXY_TLSAUTH_PASSWORD
 +Proxy TLS authentication password. See \fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP
 +.IP CURLOPT_TLSAUTH_TYPE
 +TLS authentication methods. See \fICURLOPT_TLSAUTH_TYPE(3)\fP
 +.IP CURLOPT_PROXY_TLSAUTH_TYPE
 +Proxy TLS authentication methods. See \fICURLOPT_PROXY_TLSAUTH_TYPE(3)\fP
 +.IP CURLOPT_PROXYAUTH
 +HTTP proxy authentication methods. See \fICURLOPT_PROXYAUTH(3)\fP
 +.IP CURLOPT_SASL_AUTHZID
 +SASL authorisation identity (identity to act as). See 
\fICURLOPT_SASL_AUTHZID(3)\fP
 +.IP CURLOPT_SASL_IR
 +Enable SASL initial response. See \fICURLOPT_SASL_IR(3)\fP
 +.IP CURLOPT_XOAUTH2_BEARER
 +OAuth2 bearer token. See \fICURLOPT_XOAUTH2_BEARER(3)\fP
 +.IP CURLOPT_DISALLOW_USERNAME_IN_URL
 +Don't allow username in URL. See \fICURLOPT_DISALLOW_USERNAME_IN_URL(3)\fP
 +.SH HTTP OPTIONS
 +.IP CURLOPT_AUTOREFERER
 +Automatically set Referer: header. See \fICURLOPT_AUTOREFERER(3)\fP
 +.IP CURLOPT_ACCEPT_ENCODING
 +Accept-Encoding and automatic decompressing data. See 
\fICURLOPT_ACCEPT_ENCODING(3)\fP
 +.IP CURLOPT_TRANSFER_ENCODING
 +Request Transfer-Encoding. See \fICURLOPT_TRANSFER_ENCODING(3)\fP
 +.IP CURLOPT_FOLLOWLOCATION
 +Follow HTTP redirects. See \fICURLOPT_FOLLOWLOCATION(3)\fP
 +.IP CURLOPT_UNRESTRICTED_AUTH
 +Do not restrict authentication to original host. 
\fICURLOPT_UNRESTRICTED_AUTH(3)\fP
 +.IP CURLOPT_MAXREDIRS
 +Maximum number of redirects to follow. See \fICURLOPT_MAXREDIRS(3)\fP
 +.IP CURLOPT_POSTREDIR
 +How to act on redirects after POST. See \fICURLOPT_POSTREDIR(3)\fP
 +.IP CURLOPT_PUT
 +Issue an HTTP PUT request. See \fICURLOPT_PUT(3)\fP
 +.IP CURLOPT_POST
 +Issue an HTTP POST request. See \fICURLOPT_POST(3)\fP
 +.IP CURLOPT_POSTFIELDS
 +Send a POST with this data. See \fICURLOPT_POSTFIELDS(3)\fP
 +.IP CURLOPT_POSTFIELDSIZE
 +The POST data is this big. See \fICURLOPT_POSTFIELDSIZE(3)\fP
 +.IP CURLOPT_POSTFIELDSIZE_LARGE
 +The POST data is this big. See \fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP
 +.IP CURLOPT_COPYPOSTFIELDS
 +Send a POST with this data - and copy it. See \fICURLOPT_COPYPOSTFIELDS(3)\fP
 +.IP CURLOPT_HTTPPOST
 +Multipart formpost HTTP POST. See \fICURLOPT_HTTPPOST(3)\fP
 +.IP CURLOPT_REFERER
 +Referer: header. See \fICURLOPT_REFERER(3)\fP
 +.IP CURLOPT_USERAGENT
 +User-Agent: header. See \fICURLOPT_USERAGENT(3)\fP
 +.IP CURLOPT_HTTPHEADER
 +Custom HTTP headers. See \fICURLOPT_HTTPHEADER(3)\fP
 +.IP CURLOPT_HEADEROPT
 +Control custom headers. See \fICURLOPT_HEADEROPT(3)\fP
 +.IP CURLOPT_PROXYHEADER
 +Custom HTTP headers sent to proxy. See \fICURLOPT_PROXYHEADER(3)\fP
 +.IP CURLOPT_HTTP200ALIASES
 +Alternative versions of 200 OK. See \fICURLOPT_HTTP200ALIASES(3)\fP
 +.IP CURLOPT_COOKIE
 +Cookie(s) to send. See \fICURLOPT_COOKIE(3)\fP
 +.IP CURLOPT_COOKIEFILE
 +File to read cookies from. See \fICURLOPT_COOKIEFILE(3)\fP
 +.IP CURLOPT_COOKIEJAR
 +File to write cookies to. See \fICURLOPT_COOKIEJAR(3)\fP
 +.IP CURLOPT_COOKIESESSION
 +Start a new cookie session. See \fICURLOPT_COOKIESESSION(3)\fP
 +.IP CURLOPT_COOKIELIST
 +Add or control cookies. See \fICURLOPT_COOKIELIST(3)\fP
 +.IP CURLOPT_ALTSVC
 +Specify the Alt-Svc: cache file name. See \fICURLOPT_ALTSVC(3)\fP
 +.IP CURLOPT_ALTSVC_CTRL
 +Enable and configure Alt-Svc: treatment. See \fICURLOPT_ALTSVC_CTRL(3)\fP
++.IP CURLOPT_HSTS
++Set HSTS cache file. See \fICURLOPT_HSTS(3)\fP
++.IP CURLOPT_HSTS_CTRL
++Enable HSTS. See \fICURLOPT_HSTS_CTRL(3)\fP
++.IP CURLOPT_HSTSREADFUNCTION
++Set HSTS read callback. See \fICURLOPT_HSTSREADFUNCTION(3)\fP
++.IP CURLOPT_HSTSREADDATA
++Pass pointer to the HSTS read callback. See \fICURLOPT_HSTSREADDATA(3)\fP
++.IP CURLOPT_HSTSWRITEFUNCTION
++Set HSTS write callback. See \fICURLOPT_HSTSWRITEFUNCTION(3)\fP
++.IP CURLOPT_HSTSWRITEDATA
++Pass pointer to the HSTS write callback. See \fICURLOPT_HSTSWRITEDATA(3)\fP
 +.IP CURLOPT_HTTPGET
 +Do an HTTP GET request. See \fICURLOPT_HTTPGET(3)\fP
 +.IP CURLOPT_REQUEST_TARGET
 +Set the request target. \fICURLOPT_REQUEST_TARGET(3)\fP
 +.IP CURLOPT_HTTP_VERSION
 +HTTP version to use. \fICURLOPT_HTTP_VERSION(3)\fP
 +.IP CURLOPT_HTTP09_ALLOWED
 +Allow HTTP/0.9 responses. \fICURLOPT_HTTP09_ALLOWED(3)\fP
 +.IP CURLOPT_IGNORE_CONTENT_LENGTH
 +Ignore Content-Length. See \fICURLOPT_IGNORE_CONTENT_LENGTH(3)\fP
 +.IP CURLOPT_HTTP_CONTENT_DECODING
 +Disable Content decoding. See \fICURLOPT_HTTP_CONTENT_DECODING(3)\fP
 +.IP CURLOPT_HTTP_TRANSFER_DECODING
 +Disable Transfer decoding. See \fICURLOPT_HTTP_TRANSFER_DECODING(3)\fP
 +.IP CURLOPT_EXPECT_100_TIMEOUT_MS
 +100-continue timeout. See \fICURLOPT_EXPECT_100_TIMEOUT_MS(3)\fP
 +.IP CURLOPT_TRAILERFUNCTION
 +Set callback for sending trailing headers. See
 +\fICURLOPT_TRAILERFUNCTION(3)\fP
 +.IP CURLOPT_TRAILERDATA
 +Custom pointer passed to the trailing headers callback. See
 +\fICURLOPT_TRAILERDATA(3)\fP
 +.IP CURLOPT_PIPEWAIT
 +Wait on connection to pipeline on it. See \fICURLOPT_PIPEWAIT(3)\fP
 +.IP CURLOPT_STREAM_DEPENDS
 +This HTTP/2 stream depends on another. See \fICURLOPT_STREAM_DEPENDS(3)\fP
 +.IP CURLOPT_STREAM_DEPENDS_E
 +This HTTP/2 stream depends on another exclusively. See
 +\fICURLOPT_STREAM_DEPENDS_E(3)\fP
 +.IP CURLOPT_STREAM_WEIGHT
 +Set this HTTP/2 stream's weight. See \fICURLOPT_STREAM_WEIGHT(3)\fP
 +.SH SMTP OPTIONS
 +.IP CURLOPT_MAIL_FROM
 +Address of the sender. See \fICURLOPT_MAIL_FROM(3)\fP
 +.IP CURLOPT_MAIL_RCPT
 +Address of the recipients. See \fICURLOPT_MAIL_RCPT(3)\fP
 +.IP CURLOPT_MAIL_AUTH
 +Authentication address. See \fICURLOPT_MAIL_AUTH(3)\fP
 +.IP CURLOPT_MAIL_RCPT_ALLLOWFAILS
 +Allow RCPT TO command to fail for some recipients. See 
\fICURLOPT_MAIL_RCPT_ALLLOWFAILS(3)\fP
 +.SH TFTP OPTIONS
 +.IP CURLOPT_TFTP_BLKSIZE
 +TFTP block size. See \fICURLOPT_TFTP_BLKSIZE(3)\fP
 +.IP CURLOPT_TFTP_NO_OPTIONS
 +Do not send TFTP options requests. See \fICURLOPT_TFTP_NO_OPTIONS(3)\fP
 +.SH FTP OPTIONS
 +.IP CURLOPT_FTPPORT
 +Use active FTP. See \fICURLOPT_FTPPORT(3)\fP
 +.IP CURLOPT_QUOTE
 +Commands to run before transfer. See \fICURLOPT_QUOTE(3)\fP
 +.IP CURLOPT_POSTQUOTE
 +Commands to run after transfer. See \fICURLOPT_POSTQUOTE(3)\fP
 +.IP CURLOPT_PREQUOTE
 +Commands to run just before transfer. See \fICURLOPT_PREQUOTE(3)\fP
 +.IP CURLOPT_APPEND
 +Append to remote file. See \fICURLOPT_APPEND(3)\fP
 +.IP CURLOPT_FTP_USE_EPRT
 +Use EPTR. See \fICURLOPT_FTP_USE_EPRT(3)\fP
 +.IP CURLOPT_FTP_USE_EPSV
 +Use EPSV. See \fICURLOPT_FTP_USE_EPSV(3)\fP
 +.IP CURLOPT_FTP_USE_PRET
 +Use PRET. See \fICURLOPT_FTP_USE_PRET(3)\fP
 +.IP CURLOPT_FTP_CREATE_MISSING_DIRS
 +Create missing directories on the remote server. See 
\fICURLOPT_FTP_CREATE_MISSING_DIRS(3)\fP
 +.IP CURLOPT_FTP_RESPONSE_TIMEOUT
 +Timeout for FTP responses. See \fICURLOPT_FTP_RESPONSE_TIMEOUT(3)\fP
 +.IP CURLOPT_FTP_ALTERNATIVE_TO_USER
 +Alternative to USER. See \fICURLOPT_FTP_ALTERNATIVE_TO_USER(3)\fP
 +.IP CURLOPT_FTP_SKIP_PASV_IP
 +Ignore the IP address in the PASV response. See 
\fICURLOPT_FTP_SKIP_PASV_IP(3)\fP
 +.IP CURLOPT_FTPSSLAUTH
 +Control how to do TLS. See \fICURLOPT_FTPSSLAUTH(3)\fP
 +.IP CURLOPT_FTP_SSL_CCC
 +Back to non-TLS again after authentication. See \fICURLOPT_FTP_SSL_CCC(3)\fP
 +.IP CURLOPT_FTP_ACCOUNT
 +Send ACCT command. See \fICURLOPT_FTP_ACCOUNT(3)\fP
 +.IP CURLOPT_FTP_FILEMETHOD
 +Specify how to reach files. See \fICURLOPT_FTP_FILEMETHOD(3)\fP
 +.SH RTSP OPTIONS
 +.IP CURLOPT_RTSP_REQUEST
 +RTSP request. See \fICURLOPT_RTSP_REQUEST(3)\fP
 +.IP CURLOPT_RTSP_SESSION_ID
 +RTSP session-id. See \fICURLOPT_RTSP_SESSION_ID(3)\fP
 +.IP CURLOPT_RTSP_STREAM_URI
 +RTSP stream URI. See \fICURLOPT_RTSP_STREAM_URI(3)\fP
 +.IP CURLOPT_RTSP_TRANSPORT
 +RTSP Transport: header. See \fICURLOPT_RTSP_TRANSPORT(3)\fP
 +.IP CURLOPT_RTSP_CLIENT_CSEQ
 +Client CSEQ number. See \fICURLOPT_RTSP_CLIENT_CSEQ(3)\fP
 +.IP CURLOPT_RTSP_SERVER_CSEQ
 +CSEQ number for RTSP Server->Client request. See 
\fICURLOPT_RTSP_SERVER_CSEQ(3)\fP
 +.SH PROTOCOL OPTIONS
 +.IP CURLOPT_TRANSFERTEXT
 +Use text transfer. See \fICURLOPT_TRANSFERTEXT(3)\fP
 +.IP CURLOPT_PROXY_TRANSFER_MODE
 +Add transfer mode to URL over proxy. See \fICURLOPT_PROXY_TRANSFER_MODE(3)\fP
 +.IP CURLOPT_CRLF
 +Convert newlines. See \fICURLOPT_CRLF(3)\fP
 +.IP CURLOPT_RANGE
 +Range requests. See \fICURLOPT_RANGE(3)\fP
 +.IP CURLOPT_RESUME_FROM
 +Resume a transfer. See \fICURLOPT_RESUME_FROM(3)\fP
 +.IP CURLOPT_RESUME_FROM_LARGE
 +Resume a transfer. See \fICURLOPT_RESUME_FROM_LARGE(3)\fP
 +.IP CURLOPT_CURLU
 +Set URL to work on with CURLU *. See \fICURLOPT_CURLU(3)\fP
 +.IP CURLOPT_CUSTOMREQUEST
 +Custom request/method. See \fICURLOPT_CUSTOMREQUEST(3)\fP
 +.IP CURLOPT_FILETIME
 +Request file modification date and time. See \fICURLOPT_FILETIME(3)\fP
 +.IP CURLOPT_DIRLISTONLY
 +List only. See \fICURLOPT_DIRLISTONLY(3)\fP
 +.IP CURLOPT_NOBODY
 +Do not get the body contents. See \fICURLOPT_NOBODY(3)\fP
 +.IP CURLOPT_INFILESIZE
 +Size of file to send. \fICURLOPT_INFILESIZE(3)\fP
 +.IP CURLOPT_INFILESIZE_LARGE
 +Size of file to send. \fICURLOPT_INFILESIZE_LARGE(3)\fP
 +.IP CURLOPT_UPLOAD
 +Upload data. See \fICURLOPT_UPLOAD(3)\fP
 +.IP CURLOPT_UPLOAD_BUFFERSIZE
 +Set upload buffer size. See \fICURLOPT_UPLOAD_BUFFERSIZE(3)\fP
 +.IP CURLOPT_MIMEPOST
 +Post/send MIME data. See \fICURLOPT_MIMEPOST(3)\fP
 +.IP CURLOPT_MAXFILESIZE
 +Maximum file size to get. See \fICURLOPT_MAXFILESIZE(3)\fP
 +.IP CURLOPT_MAXFILESIZE_LARGE
 +Maximum file size to get. See \fICURLOPT_MAXFILESIZE_LARGE(3)\fP
 +.IP CURLOPT_TIMECONDITION
 +Make a time conditional request. See \fICURLOPT_TIMECONDITION(3)\fP
 +.IP CURLOPT_TIMEVALUE
 +Time value for the time conditional request. See \fICURLOPT_TIMEVALUE(3)\fP
 +.IP CURLOPT_TIMEVALUE_LARGE
 +Time value for the time conditional request. See 
\fICURLOPT_TIMEVALUE_LARGE(3)\fP
 +.SH CONNECTION OPTIONS
 +.IP CURLOPT_TIMEOUT
 +Timeout for the entire request. See \fICURLOPT_TIMEOUT(3)\fP
 +.IP CURLOPT_TIMEOUT_MS
 +Millisecond timeout for the entire request. See \fICURLOPT_TIMEOUT_MS(3)\fP
 +.IP CURLOPT_LOW_SPEED_LIMIT
 +Low speed limit to abort transfer. See \fICURLOPT_LOW_SPEED_LIMIT(3)\fP
 +.IP CURLOPT_LOW_SPEED_TIME
 +Time to be below the speed to trigger low speed abort. See 
\fICURLOPT_LOW_SPEED_TIME(3)\fP
 +.IP CURLOPT_MAX_SEND_SPEED_LARGE
 +Cap the upload speed to this. See \fICURLOPT_MAX_SEND_SPEED_LARGE(3)\fP
 +.IP CURLOPT_MAX_RECV_SPEED_LARGE
 +Cap the download speed to this. See \fICURLOPT_MAX_RECV_SPEED_LARGE(3)\fP
 +.IP CURLOPT_MAXCONNECTS
 +Maximum number of connections in the connection pool. See 
\fICURLOPT_MAXCONNECTS(3)\fP
 +.IP CURLOPT_FRESH_CONNECT
 +Use a new connection. \fICURLOPT_FRESH_CONNECT(3)\fP
 +.IP CURLOPT_FORBID_REUSE
 +Prevent subsequent connections from re-using this. See 
\fICURLOPT_FORBID_REUSE(3)\fP
 +.IP CURLOPT_MAXAGE_CONN
 +Limit the age of connections for reuse. See \fICURLOPT_MAXAGE_CONN(3)\fP
 +.IP CURLOPT_CONNECTTIMEOUT
 +Timeout for the connection phase. See \fICURLOPT_CONNECTTIMEOUT(3)\fP
 +.IP CURLOPT_CONNECTTIMEOUT_MS
 +Millisecond timeout for the connection phase. See 
\fICURLOPT_CONNECTTIMEOUT_MS(3)\fP
 +.IP CURLOPT_IPRESOLVE
 +IP version to resolve to. See \fICURLOPT_IPRESOLVE(3)\fP
 +.IP CURLOPT_CONNECT_ONLY
 +Only connect, nothing else. See \fICURLOPT_CONNECT_ONLY(3)\fP
 +.IP CURLOPT_USE_SSL
 +Use TLS/SSL. See \fICURLOPT_USE_SSL(3)\fP
 +.IP CURLOPT_RESOLVE
 +Provide fixed/fake name resolves. See \fICURLOPT_RESOLVE(3)\fP
 +.IP CURLOPT_DNS_INTERFACE
 +Bind name resolves to this interface. See \fICURLOPT_DNS_INTERFACE(3)\fP
 +.IP CURLOPT_DNS_LOCAL_IP4
 +Bind name resolves to this IP4 address. See \fICURLOPT_DNS_LOCAL_IP4(3)\fP
 +.IP CURLOPT_DNS_LOCAL_IP6
 +Bind name resolves to this IP6 address. See \fICURLOPT_DNS_LOCAL_IP6(3)\fP
 +.IP CURLOPT_DNS_SERVERS
 +Preferred DNS servers. See \fICURLOPT_DNS_SERVERS(3)\fP
 +.IP CURLOPT_DNS_SHUFFLE_ADDRESSES
 +Shuffle addresses before use. See \fICURLOPT_DNS_SHUFFLE_ADDRESSES(3)\fP
 +.IP CURLOPT_ACCEPTTIMEOUT_MS
 +Timeout for waiting for the server's connect back to be accepted. See 
\fICURLOPT_ACCEPTTIMEOUT_MS(3)\fP
 +.IP CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS
 +Timeout for happy eyeballs. See \fICURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS(3)\fP
 +.IP CURLOPT_UPKEEP_INTERVAL_MS
 +Sets the interval at which connection upkeep are performed. See
 +\fICURLOPT_UPKEEP_INTERVAL_MS(3)\fP
 +.SH SSL and SECURITY OPTIONS
 +.IP CURLOPT_SSLCERT
 +Client cert. See \fICURLOPT_SSLCERT(3)\fP
 +.IP CURLOPT_SSLCERT_BLOB
 +Client cert memory buffer. See \fICURLOPT_SSLCERT_BLOB(3)\fP
 +.IP CURLOPT_PROXY_SSLCERT
 +Proxy client cert. See \fICURLOPT_PROXY_SSLCERT(3)\fP
 +.IP CURLOPT_PROXY_SSLCERT_BLOB
 +Proxy client cert memory buffer. See \fICURLOPT_PROXY_SSLCERT_BLOB(3)\fP
 +.IP CURLOPT_SSLCERTTYPE
 +Client cert type.  See \fICURLOPT_SSLCERTTYPE(3)\fP
 +.IP CURLOPT_PROXY_SSLCERTTYPE
 +Proxy client cert type.  See \fICURLOPT_PROXY_SSLCERTTYPE(3)\fP
 +.IP CURLOPT_SSLKEY
 +Client key. See \fICURLOPT_SSLKEY(3)\fP
 +.IP CURLOPT_SSLKEY_BLOB
 +Client key memory buffer. See \fICURLOPT_SSLKEY_BLOB(3)\fP
 +.IP CURLOPT_PROXY_SSLKEY
 +Proxy client key. See \fICURLOPT_PROXY_SSLKEY(3)\fP
 +.IP CURLOPT_PROXY_SSLKEY_BLOB
 +Proxy client key. See \fICURLOPT_PROXY_SSLKEY_BLOB(3)\fP
 +.IP CURLOPT_SSLKEYTYPE
 +Client key type. See \fICURLOPT_SSLKEYTYPE(3)\fP
 +.IP CURLOPT_PROXY_SSLKEYTYPE
 +Proxy client key type. See \fICURLOPT_PROXY_SSLKEYTYPE(3)\fP
 +.IP CURLOPT_KEYPASSWD
 +Client key password. See \fICURLOPT_KEYPASSWD(3)\fP
 +.IP CURLOPT_PROXY_KEYPASSWD
 +Proxy client key password. See \fICURLOPT_PROXY_KEYPASSWD(3)\fP
++.IP CURLOPT_SSL_EC_CURVES
++Set key exchange curves. See \fICURLOPT_SSL_EC_CURVES(3)\fP
 +.IP CURLOPT_SSL_ENABLE_ALPN
 +Enable use of ALPN. See \fICURLOPT_SSL_ENABLE_ALPN(3)\fP
 +.IP CURLOPT_SSL_ENABLE_NPN
 +Enable use of NPN. See \fICURLOPT_SSL_ENABLE_NPN(3)\fP
 +.IP CURLOPT_SSLENGINE
 +Use identifier with SSL engine. See \fICURLOPT_SSLENGINE(3)\fP
 +.IP CURLOPT_SSLENGINE_DEFAULT
 +Default SSL engine. See \fICURLOPT_SSLENGINE_DEFAULT(3)\fP
 +.IP CURLOPT_SSL_FALSESTART
 +Enable TLS False Start. See \fICURLOPT_SSL_FALSESTART(3)\fP
 +.IP CURLOPT_SSLVERSION
 +SSL version to use. See \fICURLOPT_SSLVERSION(3)\fP
 +.IP CURLOPT_PROXY_SSLVERSION
 +Proxy SSL version to use. See \fICURLOPT_PROXY_SSLVERSION(3)\fP
 +.IP CURLOPT_SSL_VERIFYHOST
 +Verify the host name in the SSL certificate. See 
\fICURLOPT_SSL_VERIFYHOST(3)\fP
 +.IP CURLOPT_PROXY_SSL_VERIFYHOST
 +Verify the host name in the proxy SSL certificate. See 
\fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP
 +.IP CURLOPT_SSL_VERIFYPEER
 +Verify the SSL certificate. See \fICURLOPT_SSL_VERIFYPEER(3)\fP
 +.IP CURLOPT_PROXY_SSL_VERIFYPEER
 +Verify the proxy SSL certificate. See \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP
 +.IP CURLOPT_SSL_VERIFYSTATUS
 +Verify the SSL certificate's status. See \fICURLOPT_SSL_VERIFYSTATUS(3)\fP
 +.IP CURLOPT_CAINFO
 +CA cert bundle. See \fICURLOPT_CAINFO(3)\fP
 +.IP CURLOPT_PROXY_CAINFO
 +Proxy CA cert bundle. See \fICURLOPT_PROXY_CAINFO(3)\fP
 +.IP CURLOPT_ISSUERCERT
 +Issuer certificate. See \fICURLOPT_ISSUERCERT(3)\fP
 +.IP CURLOPT_ISSUERCERT_BLOB
 +Issuer certificate memory buffer. See \fICURLOPT_ISSUERCERT_BLOB(3)\fP
 +.IP CURLOPT_PROXY_ISSUERCERT
 +Proxy issuer certificate. See \fICURLOPT_PROXY_ISSUERCERT(3)\fP
 +.IP CURLOPT_PROXY_ISSUERCERT_BLOB
 +Proxy issuer certificate memory buffer. See 
\fICURLOPT_PROXY_ISSUERCERT_BLOB(3)\fP
 +.IP CURLOPT_CAPATH
 +Path to CA cert bundle. See \fICURLOPT_CAPATH(3)\fP
 +.IP CURLOPT_PROXY_CAPATH
 +Path to proxy CA cert bundle. See \fICURLOPT_PROXY_CAPATH(3)\fP
 +.IP CURLOPT_CRLFILE
 +Certificate Revocation List. See \fICURLOPT_CRLFILE(3)\fP
 +.IP CURLOPT_PROXY_CRLFILE
 +Proxy Certificate Revocation List. See \fICURLOPT_PROXY_CRLFILE(3)\fP
 +.IP CURLOPT_CERTINFO
 +Extract certificate info. See \fICURLOPT_CERTINFO(3)\fP
 +.IP CURLOPT_PINNEDPUBLICKEY
 +Set pinned SSL public key . See \fICURLOPT_PINNEDPUBLICKEY(3)\fP
 +.IP CURLOPT_PROXY_PINNEDPUBLICKEY
 +Set the proxy's pinned SSL public key. See
 +\fICURLOPT_PROXY_PINNEDPUBLICKEY(3)\fP
 +.IP CURLOPT_RANDOM_FILE
 +Provide source for entropy random data. See \fICURLOPT_RANDOM_FILE(3)\fP
 +.IP CURLOPT_EGDSOCKET
 +Identify EGD socket for entropy. See \fICURLOPT_EGDSOCKET(3)\fP
 +.IP CURLOPT_SSL_CIPHER_LIST
 +Ciphers to use. See \fICURLOPT_SSL_CIPHER_LIST(3)\fP
 +.IP CURLOPT_PROXY_SSL_CIPHER_LIST
 +Proxy ciphers to use. See \fICURLOPT_PROXY_SSL_CIPHER_LIST(3)\fP
 +.IP CURLOPT_TLS13_CIPHERS
 +TLS 1.3 cipher suites to use. See \fICURLOPT_TLS13_CIPHERS(3)\fP
 +.IP CURLOPT_PROXY_TLS13_CIPHERS
 +Proxy TLS 1.3 cipher suites to use. See \fICURLOPT_PROXY_TLS13_CIPHERS(3)\fP
 +.IP CURLOPT_SSL_SESSIONID_CACHE
 +Disable SSL session-id cache. See \fICURLOPT_SSL_SESSIONID_CACHE(3)\fP
 +.IP CURLOPT_SSL_OPTIONS
 +Control SSL behavior. See \fICURLOPT_SSL_OPTIONS(3)\fP
 +.IP CURLOPT_PROXY_SSL_OPTIONS
 +Control proxy SSL behavior. See \fICURLOPT_PROXY_SSL_OPTIONS(3)\fP
 +.IP CURLOPT_KRBLEVEL
 +Kerberos security level. See \fICURLOPT_KRBLEVEL(3)\fP
 +.IP CURLOPT_GSSAPI_DELEGATION
 +Disable GSS-API delegation. See \fICURLOPT_GSSAPI_DELEGATION(3)\fP
 +.SH SSH OPTIONS
 +.IP CURLOPT_SSH_AUTH_TYPES
 +SSH authentication types. See \fICURLOPT_SSH_AUTH_TYPES(3)\fP
 +.IP CURLOPT_SSH_COMPRESSION
 +Enable SSH compression. See \fICURLOPT_SSH_COMPRESSION(3)\fP
 +.IP CURLOPT_SSH_HOST_PUBLIC_KEY_MD5
 +MD5 of host's public key. See \fICURLOPT_SSH_HOST_PUBLIC_KEY_MD5(3)\fP
 +.IP CURLOPT_SSH_PUBLIC_KEYFILE
 +File name of public key. See \fICURLOPT_SSH_PUBLIC_KEYFILE(3)\fP
 +.IP CURLOPT_SSH_PRIVATE_KEYFILE
 +File name of private key. See \fICURLOPT_SSH_PRIVATE_KEYFILE(3)\fP
 +.IP CURLOPT_SSH_KNOWNHOSTS
 +File name with known hosts. See \fICURLOPT_SSH_KNOWNHOSTS(3)\fP
 +.IP CURLOPT_SSH_KEYFUNCTION
 +Callback for known hosts handling. See \fICURLOPT_SSH_KEYFUNCTION(3)\fP
 +.IP CURLOPT_SSH_KEYDATA
 +Custom pointer to pass to ssh key callback. See \fICURLOPT_SSH_KEYDATA(3)\fP
 +.SH OTHER OPTIONS
 +.IP CURLOPT_PRIVATE
 +Private pointer to store. See \fICURLOPT_PRIVATE(3)\fP
 +.IP CURLOPT_SHARE
 +Share object to use. See \fICURLOPT_SHARE(3)\fP
 +.IP CURLOPT_NEW_FILE_PERMS
 +Mode for creating new remote files. See \fICURLOPT_NEW_FILE_PERMS(3)\fP
 +.IP CURLOPT_NEW_DIRECTORY_PERMS
 +Mode for creating new remote directories. See 
\fICURLOPT_NEW_DIRECTORY_PERMS(3)\fP
 +.SH TELNET OPTIONS
 +.IP CURLOPT_TELNETOPTIONS
 +TELNET options. See \fICURLOPT_TELNETOPTIONS(3)\fP
 +.SH RETURN VALUE
 +\fICURLE_OK\fP (zero) means that the option was set properly, non-zero means 
an
 +error occurred as \fI<gnurl/curl.h>\fP defines. See the 
\fIlibcurl-errors(3)\fP
 +man page for the full list with descriptions.
 +
 +Strings passed on to libcurl must be shorter than 8000000 bytes, otherwise
 +\fIcurl_easy_setopt(3)\fP returns \fBCURLE_BAD_FUNCTION_ARGUMENT\fP (added in
 +7.65.0).
 +
++\fBCURLE_BAD_FUNCTION_ARGUMENT\fP is returned when the argument to an option
++is invalid, like perhaps out of range.a
++
 +If you try to set an option that libcurl doesn't know about, perhaps because
 +the library is too old to support it or the option was removed in a recent
 +version, this function will return \fICURLE_UNKNOWN_OPTION\fP. If support for
 +the option was disabled at compile-time, it will return
 +\fICURLE_NOT_BUILT_IN\fP.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  res = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_easy_init "(3), " curl_easy_cleanup "(3), " curl_easy_reset "(3), "
 +.BR curl_easy_getinfo "(3), " curl_multi_setopt "(3), "
diff --cc docs/libcurl/gnurl_easy_strerror.3
index ec49d2cc0,000000000..5463f3830
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-terminated string.
 +.SH "SEE ALSO"
 +.BR libcurl-errors "(3), " curl_multi_strerror "(3), " curl_share_strerror 
"(3)"
diff --cc docs/libcurl/gnurl_easy_unescape.3
index 9841b4435,000000000..a997f2ef8
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_unescape.3
+++ b/docs/libcurl/gnurl_easy_unescape.3
@@@ -1,54 -1,0 +1,54 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_unescape 3 "7 April 2006" "libcurl 7.15.4" "libgnurl Manual"
 +.SH NAME
 +curl_easy_unescape - URL decodes the given string
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "char *curl_easy_unescape( CURL *" curl ", const char *" url
 +.BI ", int "inlength ", int *" outlength " );"
 +.ad
 +.SH DESCRIPTION
 +This function converts the given URL encoded input string to a "plain string"
 +and returns that in an allocated memory area. All input characters that are
 +URL encoded (%XX where XX is a two-digit hexadecimal number) are converted to
 +their binary versions.
 +
 +If the \fBlength\fP argument is set to 0 (zero), \fIcurl_easy_unescape(3)\fP
 +will use strlen() on the input \fIurl\fP string to find out the size.
 +
 +If \fBoutlength\fP is non-NULL, the function will write the length of the
 +returned string in the integer it points to. This allows an escaped string
 +containing %00 to still get used properly after unescaping. Since this is a
 +pointer to an \fIint\fP type, it can only return a value up to INT_MAX so no
 +longer string can be unescaped if the string length is returned in this
 +parameter.
 +
 +You must \fIcurl_free(3)\fP the returned string when you're done with it.
 +.SH AVAILABILITY
 +Added in 7.15.4 and replaces the old \fIcurl_unescape(3)\fP function.
 +.SH RETURN VALUE
 +A pointer to a null-terminated string or NULL if it failed.
 +.SH "SEE ALSO"
 +.BR curl_easy_escape "(3), " curl_free "(3)," RFC 3986
diff --cc docs/libcurl/gnurl_easy_upkeep.3
index 761902381,000000000..9437959d8
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_easy_upkeep.3
+++ b/docs/libcurl/gnurl_easy_upkeep.3
@@@ -1,77 -1,0 +1,77 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_upkeep 3 "31 Oct 2018" "libcurl 7.62.0" "libgnurl Manual"
 +.SH NAME
 +curl_easy_upkeep - Perform any connection upkeep checks.
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +.BI "CURLcode curl_easy_upkeep(CURL *" handle ");"
 +.SH DESCRIPTION
 +
 +Some protocols have "connection upkeep" mechanisms. These mechanisms usually
 +send some traffic on existing connections in order to keep them alive; this
 +can prevent connections from being closed due to overzealous firewalls, for
 +example.
 +
 +Currently the only protocol with a connection upkeep mechanism is HTTP/2: when
 +the connection upkeep interval is exceeded and \fIcurl_easy_upkeep(3)\fP
 +is called, an HTTP/2 PING frame is sent on the connection.
 +
 +This function must be explicitly called in order to perform the upkeep work.
 +The connection upkeep interval is set with
 +\fICURLOPT_UPKEEP_INTERVAL_MS(3)\fP.
 +
 +.SH AVAILABILITY
 +Added in 7.62.0.
 +.SH RETURN VALUE
 +On success, returns \fBCURLE_OK\fP.
 +
 +On failure, returns the appropriate error code.
 +
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  /* Make a connection to an HTTP/2 server. */
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Set the interval to 30000ms / 30s */
 +  curl_easy_setopt(curl, CURLOPT_UPKEEP_INTERVAL_MS, 30000L);
 +
 +  curl_easy_perform(curl);
 +
 +  /* Perform more work here. */
 +
 +  /* While the connection is being held open, curl_easy_upkeep() can be
 +     called. If curl_easy_upkeep() is called and the time since the last
 +     upkeep exceeds the interval, then an HTTP/2 PING is sent. */
 +  curl_easy_upkeep(curl);
 +
 +  /* Perform more work here. */
 +
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +
 +.fi
diff --cc docs/libcurl/gnurl_escape.3
index c65392801,000000000..3a28d4fa4
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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 e3a48e49d,000000000..581d551d0
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_formfree.3
index 24764dc59,000000000..71df7e19a
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_formfree.3
+++ b/docs/libcurl/gnurl_formfree.3
@@@ -1,51 -1,0 +1,51 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_formfree 3 "6 April 2001" "libcurl 7.7.1" "libgnurl Manual"
 +.SH NAME
 +curl_formfree - free a previously build multipart/formdata HTTP POST chain
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "void curl_formfree(struct curl_httppost *" form);
 +.ad
 +.SH DESCRIPTION
 +This function is deprecated. Do not use! See \fIcurl_mime_init(3)\fP instead!
 +
 +curl_formfree() is used to clean up data previously built/appended with
 +\fIcurl_formadd(3)\fP. This must be called when the data has been used, which
 +typically means after \fIcurl_easy_perform(3)\fP has been called.
 +
 +The pointer to free is the same pointer you passed to the
 +\fICURLOPT_HTTPPOST(3)\fP option, which is the \fIfirstitem\fP pointer from
 +the \fIcurl_formadd(3)\fP invoke(s).
 +
 +\fBform\fP is the pointer as returned from a previous call to
 +\fIcurl_formadd(3)\fP and may be NULL.
 +
 +Passing in a NULL pointer in \fIform\fP will make this function return
 +immediately with no action.
 +.SH AVAILABILITY
 +Deprecated in 7.56.0.
 +.SH RETURN VALUE
 +None
 +.SH "SEE ALSO"
 +.BR curl_formadd "(3), " curl_mime_init "(3), " curl_mime_free "(3)"
diff --cc docs/libcurl/gnurl_formget.3
index 261e51df6,000000000..c9e43bd75
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_formget.3
+++ b/docs/libcurl/gnurl_formget.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_formget 3 "20 June 2006" "libcurl 7.15.5" "libgnurl Manual"
 +.SH NAME
 +curl_formget - serialize a previously built multipart/formdata HTTP POST chain
 +.SH SYNOPSIS
 +.nf
 +.B #include <gnurl/curl.h>
 +
 +int curl_formget(struct curl_httppost * form, void *userp,
 +                  curl_formget_callback append );
 +.SH DESCRIPTION
 +curl_formget() is used to serialize data previously built/appended with
 +\fIcurl_formadd(3)\fP. Accepts a void pointer as second argument named
 +\fIuserp\fP which will be passed as the first argument to the
 +curl_formget_callback function.
 +
 +.BI "typedef size_t (*curl_formget_callback)(void *" userp, " const char *" 
buf,
 +.BI " size_t " len ");"
 +
 +The curl_formget_callback will be executed for each part of the HTTP POST
 +chain. The character buffer passed to the callback must not be freed. The
 +callback should return the buffer length passed to it on success.
 +
 +If the \fBCURLFORM_STREAM\fP option is used in the formpost, it will prevent
 +\fIcurl_formget(3)\fP from working until you've performed the actual HTTP
 +request as only then will libcurl get the actual read callback to use!
 +.SH RETURN VALUE
 +0 means everything was ok, non-zero means an error occurred
 +.SH EXAMPLE
 +.nf
 +
 + size_t print_httppost_callback(void *arg, const char *buf, size_t len)
 + {
 +   fwrite(buf, len, 1, stdout);
 +   (*(size_t *) arg) += len;
 +   return len;
 + }
 +
 + size_t print_httppost(struct curl_httppost *post)
 + {
 +   size_t total_size = 0;
 +   if(curl_formget(post, &total_size, print_httppost_callback)) {
 +     return (size_t) -1;
 +   }
 +   return total_size;
 + }
 +.SH AVAILABILITY
 +This function was added in libcurl 7.15.5. The form API is deprecated in
 +libcurl 7.56.0.
 +.SH "SEE ALSO"
 +.BR curl_formadd "(3), " curl_mime_init "(3)"
diff --cc docs/libcurl/gnurl_free.3
index e9901fa74,000000000..e13e1b985
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_free.3
+++ b/docs/libcurl/gnurl_free.3
@@@ -1,38 -1,0 +1,38 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_free 3 "12 Aug 2003" "libcurl 7.10" "libgnurl Manual"
 +.SH NAME
 +curl_free - reclaim memory that has been obtained through a libcurl call
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "void curl_free( char *" ptr " );"
 +.ad
 +.SH DESCRIPTION
 +curl_free reclaims memory that has been obtained through a libcurl call.  Use
 +\fIcurl_free(3)\fP instead of free() to avoid anomalies that can result from
 +differences in memory management between your application and libcurl.
 +
 +Passing in a NULL pointer in \fIptr\fP will make this function return
 +immediately with no action.
 +.SH "SEE ALSO"
 +.BR curl_easy_unescape "(3), " curl_easy_escape "(3) "
diff --cc docs/libcurl/gnurl_getdate.3
index eb122eaf3,000000000..a29e485af
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_getdate.3
+++ b/docs/libcurl/gnurl_getdate.3
@@@ -1,110 -1,0 +1,110 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_getdate 3 "12 Aug 2005" "libcurl 7.0" "libgnurl Manual"
 +.SH NAME
 +curl_getdate - Convert a date string to number of seconds
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "time_t curl_getdate(char *" datestring ", time_t *"now " );"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_getdate(3)\fP returns the number of seconds since the Epoch, January
 +1st 1970 00:00:00 in the UTC time zone, for the date and time that the
 +\fIdatestring\fP parameter specifies. The \fInow\fP parameter is not used,
 +pass a NULL there.
 +.SH PARSING DATES AND TIMES
 +A "date" is a string containing several items separated by whitespace. The
 +order of the items is immaterial.  A date string may contain many flavors of
 +items:
 +.TP 0.8i
 +.B calendar date items
 +Can be specified several ways. Month names can only be three-letter english
 +abbreviations, numbers can be zero-prefixed and the year may use 2 or 4 
digits.
 +Examples: 06 Nov 1994, 06-Nov-94 and Nov-94 6.
 +.TP
 +.B time of the day items
 +This string specifies the time on a given day. You must specify it with 6
 +digits with two colons: HH:MM:SS. To not include the time in a date string,
 +will make the function assume 00:00:00. Example: 18:19:21.
 +.TP
 +.B time zone items
 +Specifies international time zone. There are a few acronyms supported, but in
 +general you should instead use the specific relative time compared to
 +UTC. Supported formats include: -1200, MST, +0100.
 +.TP
 +.B day of the week items
 +Specifies a day of the week. Days of the week may be spelled out in full
 +(using english): `Sunday', `Monday', etc or they may be abbreviated to their
 +first three letters. This is usually not info that adds anything.
 +.TP
 +.B pure numbers
 +If a decimal number of the form YYYYMMDD appears, then YYYY is read as the
 +year, MM as the month number and DD as the day of the month, for the specified
 +calendar date.
 +.PP
 +.SH EXAMPLES
 +.nf
 +Sun, 06 Nov 1994 08:49:37 GMT
 +Sunday, 06-Nov-94 08:49:37 GMT
 +Sun Nov  6 08:49:37 1994
 +06 Nov 1994 08:49:37 GMT
 +06-Nov-94 08:49:37 GMT
 +Nov  6 08:49:37 1994
 +06 Nov 1994 08:49:37
 +06-Nov-94 08:49:37
 +1994 Nov 6 08:49:37
 +GMT 08:49:37 06-Nov-94 Sunday
 +94 6 Nov 08:49:37
 +1994 Nov 6
 +06-Nov-94
 +Sun Nov 6 94
 +1994.Nov.6
 +Sun/Nov/6/94/GMT
 +Sun, 06 Nov 1994 08:49:37 CET
 +06 Nov 1994 08:49:37 EST
 +Sun, 12 Sep 2004 15:05:58 -0700
 +Sat, 11 Sep 2004 21:32:11 +0200
 +20040912 15:05:58 -0700
 +20040911 +0200
 +.fi
 +.SH STANDARDS
 +This parser was written to handle date formats specified in RFC 822 (including
 +the update in RFC 1123) using time zone name or time zone delta and RFC 850
 +(obsoleted by RFC 1036) and ANSI C's asctime() format. These formats are the
 +only ones RFC 7231 says HTTP applications may use.
 +.SH RETURN VALUE
 +This function returns -1 when it fails to parse the date string. Otherwise it
 +returns the number of seconds as described.
 +
 +On systems with a signed 32 bit time_t: if the year is larger than 2037 or
 +less than 1903, this function will return -1.
 +
 +On systems with an unsigned 32 bit time_t: if the year is larger than 2106 or
 +less than 1970, this function will return -1.
 +
 +On systems with 64 bit time_t: if the year is less than 1583, this function
 +will return -1. (The Gregorian calendar was first introduced 1582 so no "real"
 +dates in this way of doing dates existed before then.)
 +.SH "SEE ALSO"
 +.BR curl_easy_escape "(3), " curl_easy_unescape "(3), "
 +.BR CURLOPT_TIMECONDITION "(3), " CURLOPT_TIMEVALUE "(3) "
diff --cc docs/libcurl/gnurl_getenv.3
index a953eba35,000000000..3d1f8929e
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_global_cleanup.3
index a5b6675c2,000000000..8fdfc1162
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_global_cleanup.3
+++ b/docs/libcurl/gnurl_global_cleanup.3
@@@ -1,55 -1,0 +1,55 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_global_cleanup 3 "17 Feb 2006" "libcurl 7.8" "libgnurl Manual"
 +.SH NAME
 +curl_global_cleanup - global libcurl cleanup
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "void curl_global_cleanup(void);"
 +.ad
 +.SH DESCRIPTION
 +This function releases resources acquired by \fIcurl_global_init(3)\fP.
 +
 +You should call \fIcurl_global_cleanup(3)\fP once for each call you make to
 +\fIcurl_global_init(3)\fP, after you are done using libcurl.
 +
 +\fBThis function is not thread safe.\fP You must not call it when any other
 +thread in the program (i.e. a thread sharing the same memory) is running.
 +This doesn't just mean no other thread that is using libcurl.  Because
 +\fIcurl_global_cleanup(3)\fP calls functions of other libraries that are
 +similarly thread unsafe, it could conflict with any other thread that uses
 +these other libraries.
 +
 +See the description in \fIlibcurl(3)\fP of global environment requirements for
 +details of how to use this function.
 +.SH CAUTION
 +\fIcurl_global_cleanup(3)\fP does not block waiting for any libcurl-created
 +threads to terminate (such as threads used for name resolving). If a module
 +containing libcurl is dynamically unloaded while libcurl-created threads are
 +still running then your program may crash or other corruption may occur. We
 +recommend you do not run libcurl from any module that may be unloaded
 +dynamically. This behavior may be addressed in the future.
 +.SH "SEE ALSO"
 +.BR curl_global_init "(3), "
 +.BR libcurl "(3), "
 +.BR libcurl-thread "(3), "
diff --cc docs/libcurl/gnurl_global_init.3
index db84fad00,000000000..abc6d9b60
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_global_init.3
+++ b/docs/libcurl/gnurl_global_init.3
@@@ -1,103 -1,0 +1,103 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_global_init 3 "11 May 2004" "libcurl 7.12" "libgnurl Manual"
 +.SH NAME
 +curl_global_init - Global libcurl initialisation
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_global_init(long " flags ");"
 +.ad
 +.SH DESCRIPTION
 +This function sets up the program environment that libcurl needs.  Think of it
 +as an extension of the library loader.
 +
 +This function must be called at least once within a program (a program is all
 +the code that shares a memory space) before the program calls any other
 +function in libcurl.  The environment it sets up is constant for the life of
 +the program and is the same for every program, so multiple calls have the same
 +effect as one call.
 +
 +The flags option is a bit pattern that tells libcurl exactly what features to
 +init, as described below. Set the desired bits by ORing the values together.
 +In normal operation, you must specify CURL_GLOBAL_ALL.  Don't use any other
 +value unless you are familiar with it and mean to control internal operations 
of
 +libcurl.
 +
 +\fBThis function is not thread safe.\fP You must not call it when any other
 +thread in the program (i.e. a thread sharing the same memory) is running.
 +This doesn't just mean no other thread that is using libcurl.  Because
 +\fIcurl_global_init(3)\fP calls functions of other libraries that are
 +similarly thread unsafe, it could conflict with any other thread that uses
 +these other libraries.
 +
 +If you are initializing libcurl from a Windows DLL you should not initialize 
it
 +from DllMain or a static initializer because Windows holds the loader lock
 +during that time and it could cause a deadlock.
 +
 +See the description in \fIlibcurl(3)\fP of global environment requirements for
 +details of how to use this function.
 +.SH FLAGS
 +.IP CURL_GLOBAL_ALL
 +Initialize everything possible. This sets all known bits except
 +\fBCURL_GLOBAL_ACK_EINTR\fP.
 +
 +.IP CURL_GLOBAL_SSL
 +(This flag's presence or absence serves no meaning since 7.57.0. The
 +description below is for older libcurl versions.)
 +
 +Initialize SSL.
 +
 +The implication here is that if this bit is not set, the initialization of the
 +SSL layer needs to be done by the application or at least outside of
 +libcurl. The exact procedure how to do SSL initialization depends on the TLS
 +backend libcurl uses.
 +
 +Doing TLS based transfers without having the TLS layer initialized may lead to
 +unexpected behaviors.
 +.IP CURL_GLOBAL_WIN32
 +Initialize the Win32 socket libraries.
 +
 +The implication here is that if this bit is not set, the initialization of
 +winsock has to be done by the application or you risk getting undefined
 +behaviors. This option exists for when the initialization is handled outside
 +of libcurl so there's no need for libcurl to do it again.
 +.IP CURL_GLOBAL_NOTHING
 +Initialise nothing extra. This sets no bit.
 +.IP CURL_GLOBAL_DEFAULT
 +A sensible default. It will init both SSL and Win32. Right now, this equals
 +the functionality of the \fBCURL_GLOBAL_ALL\fP mask.
 +.IP CURL_GLOBAL_ACK_EINTR
 +This bit has no point since 7.69.0 but its behavior is instead the default.
 +
 +Before 7.69.0: when this flag is set, curl will acknowledge EINTR condition
 +when connecting or when waiting for data.  Otherwise, curl waits until full
 +timeout elapses. (Added in 7.30.0)
 +.SH RETURN VALUE
 +If this function returns non-zero, something went wrong and you cannot use the
 +other curl functions.
 +.SH "SEE ALSO"
 +.BR curl_global_init_mem "(3), "
 +.BR curl_global_cleanup "(3), "
 +.BR curl_global_sslset "(3), "
 +.BR curl_easy_init "(3) "
 +.BR libcurl "(3) "
diff --cc docs/libcurl/gnurl_global_init_mem.3
index ddd64db7f,000000000..d3d1d9279
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_global_init_mem.3
+++ b/docs/libcurl/gnurl_global_init_mem.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_global_init_mem 3 "10 May 2004" "libcurl 7.12.0" "libgnurl Manual"
 +.SH NAME
 +curl_global_init_mem - Global libcurl initialisation with memory callbacks
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.nf
 +.B "CURLcode curl_global_init_mem(long " flags,
 +.B " curl_malloc_callback "m,
 +.B " curl_free_callback "f,
 +.B " curl_realloc_callback "r,
 +.B " curl_strdup_callback "s,
 +.B " curl_calloc_callback "c ");"
 +.SH DESCRIPTION
 +This function works exactly as \fIcurl_global_init(3)\fP with one addition: it
 +allows the application to set callbacks to replace the otherwise used internal
 +memory functions.
 +
 +If you are using libcurl from multiple threads or libcurl was built with the
 +threaded resolver option then the callback functions must be thread safe. The
 +threaded resolver is a common build option to enable (and in some cases the
 +default) so we strongly urge you to make your callback functions thread safe.
 +
 +All callback arguments must be set to valid function pointers. The
 +prototypes for the given callbacks must match these:
 +.IP "void *malloc_callback(size_t size);"
 +To replace malloc()
 +.IP "void free_callback(void *ptr);"
 +To replace free()
 +.IP "void *realloc_callback(void *ptr, size_t size);"
 +To replace realloc()
 +.IP "char *strdup_callback(const char *str);"
 +To replace strdup()
 +.IP "void *calloc_callback(size_t nmemb, size_t size);"
 +To replace calloc()
 +.RE
 +This function is otherwise the same as \fIcurl_global_init(3)\fP, please refer
 +to that man page for documentation.
 +.SH "CAUTION"
 +Manipulating these gives considerable powers to the application to severely
 +screw things up for libcurl. Take care!
 +.SH AVAILABILITY
 +Added in 7.12.0
 +.SH "SEE ALSO"
 +.BR curl_global_init "(3), "
 +.BR curl_global_cleanup "(3), "
diff --cc docs/libcurl/gnurl_global_sslset.3
index ed9c236d7,000000000..8cc67a234
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_global_sslset.3
+++ b/docs/libcurl/gnurl_global_sslset.3
@@@ -1,102 -1,0 +1,102 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_global_sslset 3 "15 July 2017" "libcurl 7.56" "libgnurl Manual"
 +.SH NAME
 +curl_global_sslset - Select SSL backend to use with libcurl
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.nf
 +
 +typedef struct {
 +  curl_sslbackend id;
 +  const char *name;
 +} curl_ssl_backend;
 +
 +typedef enum {
 +  CURLSSLBACKEND_NONE = 0,
 +  CURLSSLBACKEND_OPENSSL = 1,
 +  CURLSSLBACKEND_GNUTLS = 2,
 +  CURLSSLBACKEND_NSS = 3,
 +  CURLSSLBACKEND_GSKIT = 5,
 +  CURLSSLBACKEND_POLARSSL = 6, /* deprecated */
 +  CURLSSLBACKEND_WOLFSSL = 7,
 +  CURLSSLBACKEND_SCHANNEL = 8,
 +  CURLSSLBACKEND_SECURETRANSPORT = 9,
 +  CURLSSLBACKEND_AXTLS = 10, /* deprecated */
 +  CURLSSLBACKEND_MBEDTLS = 11,
 +  CURLSSLBACKEND_MESALINK = 12,
 +  CURLSSLBACKEND_BEARSSL = 13
 +} curl_sslbackend;
 +
 +.B "CURLsslset curl_global_sslset(curl_sslbackend " id,
 +.B "                              const char *" name,
 +.B "                              curl_ssl_backend ***" avail ");"
 +.fi
 +.SH DESCRIPTION
 +This function configures at runtime which SSL backend to use with
 +libcurl. This function can only be used to select an SSL backend once, and it
 +must be called \fBbefore\fP \fIcurl_global_init(3)\fP.
 +
 +The backend can be identified by the \fIid\fP
 +(e.g. \fBCURLSSLBACKEND_OPENSSL\fP). The backend can also be specified via the
 +\fIname\fP parameter for a case insensitive match (passing -1 as \fIid\fP). If
 +both \fIid\fP and \fIname\fP are specified, the \fIname\fP will be ignored.
 +
 +If neither \fIid\fP nor \fPname\fP are specified, the function will fail with
 +CURLSSLSET_UNKNOWN_BACKEND and set the \fIavail\fP pointer to the
 +NULL-terminated list of available backends. The available backends are those
 +that this particular build of libcurl supports.
 +
 +Since libcurl 7.60.0, the \fIavail\fP pointer will always be set to the list
 +of alternatives if non-NULL.
 +
 +Upon success, the function returns CURLSSLSET_OK.
 +
 +If the specified SSL backend is not available, the function returns
 +CURLSSLSET_UNKNOWN_BACKEND and sets the \fIavail\fP pointer to a
 +NULL-terminated list of available SSL backends. In this case, you may call the
 +function again to try to select a different backend.
 +
 +The SSL backend can be set only once. If it has already been set, a subsequent
 +attempt to change it will result in a \fBCURLSSLSET_TOO_LATE\fP.
 +
 +\fBThis function is not thread safe.\fP You must not call it when any other
 +thread in the program (i.e. a thread sharing the same memory) is running.
 +This doesn't just mean no other thread that is using libcurl.
 +
 +.SH AVAILABILITY
 +This function was added in libcurl 7.56.0. Before this version, there was no
 +support for choosing SSL backends at runtime.
 +.SH RETURN VALUE
 +If this function returns CURLSSLSET_OK, the backend was successfully selected.
 +
 +If the chosen backend is unknown (or support for the chosen backend has not
 +been compiled into libcurl), the function returns 
\fICURLSSLSET_UNKNOWN_BACKEND\fP.
 +
 +If the backend had been configured previously, or if \fIcurl_global_init(3)\fP
 +has already been called, the function returns \fICURLSSLSET_TOO_LATE\fP.
 +
 +If this libcurl was built completely without SSL support, with no backends at
 +all, this function returns \fICURLSSLSET_NO_BACKENDS\fP.
 +.SH "SEE ALSO"
 +.BR curl_global_init "(3), "
 +.BR libcurl "(3) "
diff --cc docs/libcurl/gnurl_mime_addpart.3
index 9aab787eb,000000000..330b28f71
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_addpart.3
+++ b/docs/libcurl/gnurl_mime_addpart.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_addpart 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_addpart - append a new empty part to a mime structure
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "curl_mimepart * curl_mime_addpart(curl_mime * " mime ");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_addpart(3)\fP creates and appends a new empty part to the given
 +mime structure and returns a handle to it.  The returned part handle can
 +subsequently be populated using functions from the mime API.
 +
 +\fImime\fP is the handle of the mime structure in which the new part must be
 +appended.
 +.SH AVAILABILITY
 +As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
 +.SH RETURN VALUE
 +A mime part structure handle, or NULL 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);
 +
 + /* continue and set name + data to the part */
 + curl_mime_data(part, "This is the field data", CURL_ZERO_TERMINATED);
 + curl_mime_name(part, "data");
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_mime_init "(3),"
 +.BR curl_mime_name "(3),"
 +.BR curl_mime_data "(3),"
 +.BR curl_mime_data_cb "(3),"
 +.BR curl_mime_filedata "(3),"
 +.BR curl_mime_filename "(3),"
 +.BR curl_mime_subparts "(3),"
 +.BR curl_mime_type "(3),"
 +.BR curl_mime_headers "(3),"
 +.BR curl_mime_encoder "(3)"
diff --cc docs/libcurl/gnurl_mime_data.3
index 728826ab0,000000000..1cc4d2a10
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_data.3
+++ b/docs/libcurl/gnurl_mime_data.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_data 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_data - set a mime part's body data from memory
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_mime_data(curl_mimepart * " part ", const char * " data
 +.BI ", size_t " datasize ");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_data(3)\fP sets a mime part's body content from memory data.
 +
 +\fIdata\fP points to the data bytes: those are copied to the part and their
 +storage may safely be reused after call.
 +\fIdatasize\fP is the number of data bytes: it can be set to
 +\fICURL_ZERO_TERMINATED\fP to indicate \fIdata\fP is a null-terminated
 +character string.
 +\fIpart\fP is the part's to assign contents to.
 +
 +Setting a part's contents twice is valid: only the value set by the last call
 +is retained. It is possible to unassign part's contents by setting
 +\fIdata\fP to NULL.
 +
 +Setting very large data is memory consuming: one might consider using
 +\fIcurl_mime_data_cb(3)\fP in such a case.
 +.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);
 +
 + /* add data to the part  */
 + curl_mime_data(part, "raw contents to send", CURL_ZERO_TERMINATED);
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_mime_addpart "(3),"
 +.BR curl_mime_data_cb "(3),"
 +.BR curl_mime_name "(3),"
 +.BR curl_mime_type "(3)"
diff --cc docs/libcurl/gnurl_mime_data_cb.3
index 2fd7413c4,000000000..1eadf1e04
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_data_cb.3
+++ b/docs/libcurl/gnurl_mime_data_cb.3
@@@ -1,167 -1,0 +1,167 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_data_cb 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_data_cb - set a callback-based data source for a mime part's body
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +size_t readfunc(char *buffer, size_t size, size_t nitems, void *arg);
 +.br
 +int seekfunc(void *arg, curl_off_t offset, int origin);
 +.br
 +void freefunc(void *arg);
 +.sp
 +.BI "CURLcode curl_mime_data_cb(curl_mimepart * " part ", curl_off_t " 
datasize ,
 +.br
 +.BI "        curl_read_callback " readfunc ", curl_seek_callback " seekfunc ,
 +.br
 +.BI "        curl_free_callback " freefunc ", void * " arg ");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_data_cb(3)\fP sets the data source of a mime part's body content
 +from a data read callback function.
 +
 +\fIpart\fP is the part's to assign contents to.
 +
 +\fIreadfunc\fP is a pointer to a data read callback function, with a signature
 +as shown by the above prototype. It may not be set to NULL.
 +
 +\fIseekfunc\fP is a pointer to a seek callback function, with a signature as
 +shown by the above prototype. This function will be used upon resending data
 +(i.e.: after a redirect); this pointer may be set to NULL, in which case a
 +resend is not possible.
 +
 +\fIfreefunc\fP is a pointer to a user resource freeing callback function, with
 +a signature as shown by the above prototype. If no resource is to be freed, it
 +may safely be set to NULL. This function will be called upon mime structure
 +freeing.
 +
 +\fIarg\fP is a user defined argument to callback functions.
 +
 +The read 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 \fInmemb\fP number
 +of bytes by your function.
 +
 +Your read function must then return the actual number of bytes that it stored
 +in that memory area. 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.
 +
 +The seek function gets called by libcurl to rewind input stream data or to
 +seek to a certain position. 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.
 +
 +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.
 +
 +Care must be taken if the part is bound to a curl easy handle that is later
 +duplicated: the \fIarg\fP pointer argument is also duplicated, resulting in
 +the pointed item to be shared between the original and the copied handle.
 +In particular, special attention should be given to the \fIfreefunc\fP
 +procedure code since it will be called twice with the same argument.
 +
 +.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
 +Sending a huge data string will cause the same amount of memory to be
 +allocated: to avoid overhead resources consumption, one might want to use a
 +callback source to avoid data duplication. In this case, original data
 +must be retained until after the transfer terminates.
 +.nf
 +
 +char hugedata[512000];
 +
 +struct ctl {
 +  char *buffer;
 +  curl_off_t size;
 +  curl_off_t position;
 +};
 +
 +size_t read_callback(char *buffer, size_t size, size_t nitems, void *arg)
 +{
 +  struct ctl *p = (struct ctl *) arg;
 +  curl_off_t sz = p->size - p->position;
 +
 +  nitems *= size;
 +  if(sz > nitems)
 +    sz = nitems;
 +  if(sz)
 +    memcpy(buffer, p->buffer + p->position, sz);
 +  p->position += sz;
 +  return sz;
 +}
 +
 +int seek_callback(void *arg, curl_off_t offset, int origin)
 +{
 +  struct ctl *p = (struct ctl *) arg;
 +
 +  switch(origin) {
 +  case SEEK_END:
 +    offset += p->size;
 +    break;
 +  case SEEK_CUR:
 +    offset += p->position;
 +    break;
 +  }
 +
 +  if(offset < 0)
 +    return CURL_SEEKFUNC_FAIL;
 +  p->position = offset;
 +  return CURL_SEEKFUNC_OK;
 +}
 +
 + CURL *easy = curl_easy_init();
 + curl_mime *mime = curl_mime_init(easy);
 + curl_mimepart *part = curl_mime_addpart(mime);
 + struct ctl hugectl;
 +
 + hugectl.buffer = hugedata;
 + hugectl.size = sizeof hugedata;
 + hugectl.position = 0;
 + curl_mime_data_cb(part, hugectl.size, read_callback, seek_callback, NULL,
 +                   &hugectl);
 +
 +.SH "SEE ALSO"
 +.BR curl_mime_addpart "(3),"
 +.BR curl_mime_data "(3),"
 +.BR curl_mime_name "(3),"
 +.BR curl_easy_duphandle "(3)"
diff --cc docs/libcurl/gnurl_mime_encoder.3
index d0546b6b0,000000000..1026a679b
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_encoder.3
+++ b/docs/libcurl/gnurl_mime_encoder.3
@@@ -1,97 -1,0 +1,97 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_encoder 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_encoder - set a mime part's encoder and content transfer encoding
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_mime_encoder(curl_mimepart * " part ,
 +.BI "const char * " encoding ");"
 +.ad
 +.SH DESCRIPTION
 +curl_mime_encoder() requests a mime part's content to be encoded before being
 +transmitted.
 +
 +\fIpart\fP is the part's handle to assign an encoder.
 +\fIencoding\fP is a pointer to a null-terminated encoding scheme. It may be
 +set to NULL to disable an encoder previously attached to the part. The 
encoding
 +scheme storage may safely be reused after this function returns.
 +
 +Setting a part's encoder twice is valid: only the value set by the last call 
is
 +retained.
 +
 +Upon multipart rendering, the part's content is encoded according to the
 +pertaining scheme and a corresponding \fIContent-Transfer-Encoding"\fP header
 +is added to the part.
 +
 +Supported encoding schemes are:
 +.br
 +"\fIbinary\fP": the data is left unchanged, the header is added.
 +.br
 +"\fI8bit\fP": header added, no data change.
 +.br
 +"\fI7bit\fP": the data is unchanged, but is each byte is checked
 +to be a 7-bit value; if not, a read error occurs.
 +.br
 +"\fIbase64\fP": Data is converted to base64 encoding, then split in
 +CRLF-terminated lines of at most 76 characters.
 +.br
 +"\fIquoted-printable\fP": data is encoded in quoted printable lines of
 +at most 76 characters. Since the resulting size of the final data cannot be
 +determined prior to reading the original data, it is left as unknown, causing
 +chunked transfer in HTTP. For the same reason, this encoder may not be used
 +with IMAP. This encoder targets text data that is mostly ASCII and should
 +not be used with other types of data.
 +
 +If the original data is already encoded in such a scheme, a custom
 +\fIContent-Transfer-Encoding\fP header should be added with
 +\FIcurl_mime_headers\fP() instead of setting a part encoder.
 +
 +Encoding should not be applied to multiparts, thus the use of this
 +function on a part with content set with \fIcurl_mime_subparts\fP() is
 +strongly discouraged.
 +.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);
 +
 + /* send a file */
 + curl_mime_filedata(part, "image.png");
 +
 + /* encode file data in base64 for transfer */
 + curl_mime_encoder(part, "base64");
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_mime_addpart "(3),"
 +.BR curl_mime_headers "(3),"
 +.BR curl_mime_subparts "(3)"
diff --cc docs/libcurl/gnurl_mime_filedata.3
index e89d22fea,000000000..deb0d4510
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_filedata.3
+++ b/docs/libcurl/gnurl_mime_filedata.3
@@@ -1,84 -1,0 +1,84 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_filedata 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_filedata - set a mime part's body data from a file contents
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_mime_filedata(curl_mimepart * " part ,
 +.BI " const char * " filename ");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_filedata(3)\fP sets a mime part's body content from the named
 +file's contents. This is an alternative to \fIcurl_mime_data(3)\fP for setting
 +data to a mime part.
 +
 +\fIpart\fP is the part's to assign contents to.
 +
 +\fIfilename\fP points to the null-terminated file's path name. The pointer can
 +be NULL to detach the previous part contents settings.  Filename storage can
 +be safely be reused after this call.
 +
 +As a side effect, the part's remote file name is set to the base name of the
 +given \fIfilename\fP if it is a valid named file. This can be undone or
 +overridden by a subsequent call to \fIcurl_mime_filename(3)\fP.
 +
 +The contents of the file is read during the file transfer in a streaming
 +manner to allow huge files to get transferred without using much memory. It
 +therefore requires that the file is kept intact during the entire request.
 +
 +If the file size cannot be determined before actually reading it (such as for
 +a device or named pipe), the whole mime structure containing the part
 +will be transferred as chunks by HTTP and rejected by IMAP.
 +
 +Setting a part's contents twice is valid: only the value set by the last call
 +is retained.
 +.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. CURLE_READ_ERROR is only an
 +indication that the file is not yet readable: it can be safely ignored at
 +this time, but the file must be made readable before the pertaining
 +easy handle is performed.
 +.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);
 +
 + /* send data from this file */
 + curl_mime_filedata(part, "image.png");
 +
 + /* set name */
 + curl_mime_name(part, "data");
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_mime_addpart "(3),"
 +.BR curl_mime_data "(3),"
 +.BR curl_mime_filename "(3),"
 +.BR curl_mime_name "(3)"
diff --cc docs/libcurl/gnurl_mime_filename.3
index 6534a9ce5,000000000..a231545d5
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_filename.3
+++ b/docs/libcurl/gnurl_mime_filename.3
@@@ -1,72 -1,0 +1,72 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_filename 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_filename - set a mime part's remote file name
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_mime_filename(curl_mimepart * " part ,
 +.BI "const char * " filename ");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_filename(3)\fP sets a mime part's remote file name. When remote
 +file name is set, content data is processed as a file, whatever is the part's
 +content source. A part's remote file name is transmitted to the server in the
 +associated Content-Disposition generated header.
 +
 +\fIpart\fP is the part's handle to assign the remote file name to.
 +
 +\fIfilename\fP points to the null-terminated file name string; it may be set
 +to NULL to remove a previously attached remote file name.
 +
 +The remote file name string is copied into the part, thus the associated
 +storage may safely be released or reused after call. Setting a part's file
 +name twice is valid: only the value set by the last call is retained.
 +.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);
 +
 + /* send image data from memory */
 + curl_mime_data(part, imagebuf, imagebuf_len);
 +
 + /* set a file name to make it look like a file upload */
 + curl_mime_filename(part, "image.png");
 +
 + /* set name */
 + curl_mime_name(part, "data");
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_mime_addpart "(3),"
 +.BR curl_mime_filedata "(3),"
 +.BR curl_mime_data "(3)"
diff --cc docs/libcurl/gnurl_mime_free.3
index 8476d1a32,000000000..4677c3f73
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_free.3
+++ b/docs/libcurl/gnurl_mime_free.3
@@@ -1,50 -1,0 +1,50 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_free 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_free - free a previously built mime structure
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "void curl_mime_free(curl_mime *" mime);
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_free(3)\fP is used to clean up data previously built/appended
 +with \fIcurl_mime_addpart(3)\fP and other mime-handling functions.  This must
 +be called when the data has been used, which typically means after
 +\fIcurl_easy_perform(3)\fP has been called.
 +
 +The handle to free is the one you passed to
 +the \fICURLOPT_MIMEPOST(3)\fP option: attached subparts mime structures must
 +not be explicitly freed as they are by the top structure freeing.
 +
 +\fBmime\fP is the handle as returned from a previous call to
 +\fIcurl_mime_init(3)\fP and may be NULL.
 +
 +Passing in a NULL pointer in \fImime\fP will make this function return
 +immediately with no action.
 +.SH AVAILABILITY
 +As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
 +.SH RETURN VALUE
 +None
 +.SH "SEE ALSO"
 +.BR curl_mime_init "(3)"
diff --cc docs/libcurl/gnurl_mime_headers.3
index ae54efd81,000000000..0e9b365b7
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_headers.3
+++ b/docs/libcurl/gnurl_mime_headers.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_headers 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_headers - set a mime part's custom headers
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_mime_headers(curl_mimepart * " part ,
 +.BI "struct curl_slist * " headers ", int " take_ownership ");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_headers(3)\fP sets a mime part's custom headers.
 +
 +\fIpart\fP is the part's handle to assign the custom headers list to.
 +
 +\fIheaders\fP is the head of a list of custom headers; it may be set to NULL
 +to remove a previously attached custom header list.
 +
 +\fItake_ownership\fP: when non-zero, causes the list to be freed upon
 +replacement or mime structure deletion; in this case the list must not be
 +freed explicitly.
 +
 +Setting a part's custom headers list twice is valid: only the value set by
 +the last call is retained.
 +.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
 + struct curl_slist *headers = NULL;
 +
-  headers = curl_slist_append("Custom-Header: mooo", headers);
++ headers = curl_slist_append(headers, "Custom-Header: mooo");
 +
 + /* use these headers, please take ownership */
 + curl_mime_headers(part, headers, TRUE);
 +
 + /* pass on this data */
 + curl_mime_data(part, "12345679", CURL_ZERO_TERMINATED);
 +
 + /* set name */
 + curl_mime_name(part, "numbers");
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_mime_addpart "(3)"
diff --cc docs/libcurl/gnurl_mime_init.3
index d6a49d1e7,000000000..e83df3874
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_init.3
+++ b/docs/libcurl/gnurl_mime_init.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_init 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_init - create a mime handle
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "curl_mime * curl_mime_init(CURL * " easy_handle ");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_init(3)\fP creates a handle to a new empty mime structure
 +intended to be used with \fIeasy_handle\fP. This mime structure can be
 +subsequently filled using the mime API, then attached to \fIeasy_handle\fP
 +using option \fICURLOPT_MIMEPOST(3)\fP within a \fIcurl_easy_setopt(3)\fP
 +call.
 +
 +Using a mime handle is the recommended way to post an HTTP form, format and
 +send a multi-part e-mail with SMTP or upload such an e-mail to an IMAP server.
 +
 +.SH AVAILABILITY
 +As long as at least one of HTTP, SMTP or IMAP is enabled. Added in 7.56.0.
 +.SH RETURN VALUE
 +A mime struct handle, or NULL upon failure.
 +.SH EXAMPLE
 +.nf
 +
 + CURL *easy = curl_easy_init();
 + curl_mime *mime;
 + curl_mimepart *part;
 +
 + /* Build an HTTP form with a single field named "data", */
 + mime = curl_mime_init(easy);
 + part = curl_mime_addpart(mime);
 + curl_mime_data(part, "This is the field data", CURL_ZERO_TERMINATED);
 + curl_mime_name(part, "data");
 +
 + /* Post and send it. */
 + curl_easy_setopt(easy, CURLOPT_MIMEPOST, mime);
-  curl_easy_setopt(easy, CURLOPT_URL, "http://example.com";);
++ curl_easy_setopt(easy, CURLOPT_URL, "https://example.com";);
 + curl_easy_perform(easy);
 +
 + /* Clean-up. */
 + curl_easy_cleanup(easy);
 + curl_mime_free(mime);
 +
 +.SH "SEE ALSO"
 +.BR curl_mime_addpart "(3),"
 +.BR curl_mime_free "(3),"
 +.BR CURLOPT_MIMEPOST "(3)"
diff --cc docs/libcurl/gnurl_mime_name.3
index 79afe7515,000000000..a8504b112
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_name.3
+++ b/docs/libcurl/gnurl_mime_name.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_name 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_name - set a mime part's name
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_mime_name(curl_mimepart * " part ", const char * " name 
");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_name(3)\fP sets a mime part's name. This is the way HTTP form
 +fields are named.
 +
 +\fIpart\fP is the part's handle to assign a name to.
 +
 +\fIname\fP points to the null-terminated name string.
 +
 +The name string is copied into the part, thus the associated storage may
 +safely be released or reused after call. Setting a part's name twice is valid:
 +only the value set by the last call is retained. It is possible to "unname" a
 +part by setting \fIname\fP to NULL.
 +.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);
 +
 + /* give the part a name */
 + curl_mime_name(part, "shoe_size");
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_mime_addpart "(3),"
 +.BR curl_mime_data "(3),"
 +.BR curl_mime_type "(3)"
diff --cc docs/libcurl/gnurl_mime_subparts.3
index ab57e6159,000000000..4f9883655
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mime_subparts.3
+++ b/docs/libcurl/gnurl_mime_subparts.3
@@@ -1,53 -1,0 +1,53 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_subparts 3 "22 August 2017" "libcurl 7.56.0" "libgnurl Manual"
 +.SH NAME
 +curl_mime_subparts - set subparts of a multipart mime part
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLcode curl_mime_subparts(curl_mimepart * " part ,
 +.BI "curl_mime * " subparts ");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_mime_subparts(3)\fP sets a multipart mime part's content from a mime
 +structure.
 +
 +\fIpart\fP is a handle to the multipart part.
 +
 +\fIsubparts\fP is a mime structure handle holding the subparts. After
 +\fIcurl_mime_subparts\fP succeeds, the mime structure handle belongs to the
 +multipart part and must not be freed explicitly. It may however be updated by
 +subsequent calls to mime API functions.
 +
 +Setting a part's contents twice is valid: only the value set by the last call
 +is retained. It is possible to unassign previous part's contents by setting
 +\fIsubparts\fP to NULL.
 +.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
 +TODO
 +.SH "SEE ALSO"
 +.BR curl_mime_addpart "(3),"
 +.BR curl_mime_init "(3)"
diff --cc docs/libcurl/gnurl_mime_type.3
index 1c1daae9b,000000000..29bbbf008
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_mprintf.3
index c34898afc,000000000..4a19e8cbf
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_mprintf.3
+++ b/docs/libcurl/gnurl_mprintf.3
@@@ -1,103 -1,0 +1,103 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_printf 3 "30 April 2004" "libcurl 7.12" "libgnurl Manual"
 +.SH NAME
 +curl_maprintf, curl_mfprintf, curl_mprintf, curl_msnprintf, curl_msprintf
 +curl_mvaprintf, curl_mvfprintf, curl_mvprintf, curl_mvsnprintf,
 +curl_mvsprintf - formatted output conversion
 +.SH SYNOPSIS
 +.B #include <gnurl/mprintf.h>
 +.sp
 +.BI "int curl_mprintf(const char *" format ", ...);"
 +.br
 +.BI "int curl_mfprintf(FILE *" fd ", const char *" format ", ...);"
 +.br
 +.BI "int curl_msprintf(char *" buffer ", const char *" format ", ...);"
 +.br
 +.BI "int curl_msnprintf(char *" buffer ", size_t " maxlength ", const char *" 
format ", ...);"
 +.br
 +.BI "int curl_mvprintf(const char *" format ", va_list " args ");"
 +.br
 +.BI "int curl_mvfprintf(FILE *" fd ", const char *" format ", va_list " args 
");"
 +.br
 +.BI "int curl_mvsprintf(char *" buffer ", const char *" format ", va_list " 
args ");"
 +.br
 +.BI "int curl_mvsnprintf(char *" buffer ", size_t " maxlength ", const char 
*" format ", va_list " args ");"
 +.br
 +.BI "char *curl_maprintf(const char *" format ", ...);"
 +.br
 +.BI "char *curl_mvaprintf(const char *" format ", va_list " args ");"
 +.SH DESCRIPTION
 +These are all functions that produce output according to a format string and
 +given arguments. These are mostly clones of the well-known C-style functions
 +and there will be no detailed explanation of all available formatting rules
 +and usage here.
 +
 +See this table for notable exceptions.
 +.RS
 +.TP
 +.B curl_mprintf()
 +Normal printf() clone.
 +.TP
 +.B curl_mfprintf()
 +Normal fprintf() clone.
 +.TP
 +.B curl_msprintf()
 +Normal sprintf() clone.
 +.TP
 +.B curl_msnprintf()
 +snprintf() clone. Many systems don't have this. It is just like \fBsprintf\fP
 +but with an extra argument after the buffer that specifies the length of the
 +target buffer.
 +.TP
 +.B curl_mvprintf()
 +Normal vprintf() clone.
 +.TP
 +.B curl_mvfprintf()
 +Normal vfprintf() clone.
 +.TP
 +.B curl_mvsprintf()
 +Normal vsprintf() clone.
 +.TP
 +.B curl_mvsnprintf()
 +vsnprintf() clone.  Many systems don't have this. It is just like
 +\fBvsprintf\fP but with an extra argument after the buffer that specifies the
 +length of the target buffer.
 +.TP
 +.B curl_maprintf()
 +Like printf() but returns the output string as a malloc()ed string. The
 +returned string must be free()ed by the receiver.
 +.TP
 +.B curl_mvaprintf()
 +Like curl_maprintf() but takes a va_list pointer argument instead of a
 +variable amount of arguments.
 +.RE
 +.SH AVAILABILITY
 +These functions will be removed from the public libcurl API in the future. Do
 +not use them in any new programs or projects.
 +.SH RETURN VALUE
 +The \fBcurl_maprintf\fP and \fBcurl_mvaprintf\fP functions return a pointer to
 +a newly allocated string, or NULL if it failed.
 +
 +All other functions return the number of characters they actually outputted.
 +.SH "SEE ALSO"
 +.BR printf "(3), " sprintf "(3), " fprintf "(3), " vprintf "(3) "
diff --cc docs/libcurl/gnurl_multi_add_handle.3
index c1d103f17,000000000..c8c230f34
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_add_handle.3
+++ b/docs/libcurl/gnurl_multi_add_handle.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_add_handle 3 "4 March 2002" "libcurl 7.9.5" "libgnurl Manual"
 +.SH NAME
 +curl_multi_add_handle - add an easy handle to a multi session
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_add_handle(CURLM *multi_handle, CURL *easy_handle);
 +.ad
 +.SH DESCRIPTION
 +Adds a standard easy handle to the multi stack. This function call will make
 +this \fImulti_handle\fP control the specified \fIeasy_handle\fP.
 +
 +While an easy handle is added to a multi stack, you cannot and you must not
 +use \fIcurl_easy_perform(3)\fP on that handle. After having removed the easy
 +handle from the multi stack again, it is perfectly fine to use it with the
 +easy interface again.
 +
 +If the easy handle is not set to use a shared (\fICURLOPT_SHARE(3)\fP) or
 +global DNS cache (\fICURLOPT_DNS_USE_GLOBAL_CACHE(3)\fP), it will be made to
 +use the DNS cache that is shared between all easy handles within the multi
 +handle when \fIcurl_multi_add_handle(3)\fP is called.
 +
 +When an easy interface is added to a multi handle, it will use a shared
 +connection cache owned by the multi handle. Removing and adding new easy
 +handles will not affect the pool of connections or the ability to do
 +connection re-use.
 +
 +If you have \fICURLMOPT_TIMERFUNCTION(3)\fP set in the multi handle (and you
 +really should if you're working event-based with
 +\fIcurl_multi_socket_action(3)\fP and friends), that callback will be called
 +from within this function to ask for an updated timer so that your main event
 +loop will get the activity on this handle to get started.
 +
 +The easy handle will remain added to the multi handle until you remove it
 +again with \fIcurl_multi_remove_handle(3)\fP - even when a transfer with that
 +specific easy handle is completed.
 +
 +You should remove the easy handle from the multi stack before you terminate
 +first the easy handle and then the multi handle:
 +
 +1 - \fIcurl_multi_remove_handle(3)\fP
 +
 +2 - \fIcurl_easy_cleanup(3)\fP
 +
 +3 - \fIcurl_multi_cleanup(3)\fP
 +.SH RETURN VALUE
 +CURLMcode type, general libcurl multi interface error code.
 +.SH "SEE ALSO"
 +.BR curl_multi_cleanup "(3)," curl_multi_init "(3), "
 +.BR curl_multi_setopt "(3), " curl_multi_socket_action "(3) "
diff --cc docs/libcurl/gnurl_multi_assign.3
index 7cb2bf29b,000000000..395986966
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_cleanup.3
index cc3691137,000000000..6cb0537c2
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_cleanup.3
+++ b/docs/libcurl/gnurl_multi_cleanup.3
@@@ -1,50 -1,0 +1,50 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_cleanup 3 "1 March 2002" "libcurl 7.9.5" "libgnurl Manual"
 +.SH NAME
 +curl_multi_cleanup - close down a multi session
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLMcode curl_multi_cleanup( CURLM *multi_handle );"
 +.ad
 +.SH DESCRIPTION
 +Cleans up and removes a whole multi stack. It does not free or touch any
 +individual easy handles in any way - they still need to be closed
 +individually, using the usual \fIcurl_easy_cleanup(3)\fP way. The order of
 +cleaning up should be:
 +
 +1 - \fIcurl_multi_remove_handle(3)\fP before any easy handles are cleaned up
 +
 +2 - \fIcurl_easy_cleanup(3)\fP can now be called independently since the easy
 +handle is no longer connected to the multi handle
 +
 +3 - \fIcurl_multi_cleanup(3)\fP should be called when all easy handles are
 +removed
 +
 +Passing in a NULL pointer in \fImulti_handle\fP will make this function return
 +CURLM_BAD_HANDLE immediately with no other action.
 +.SH RETURN VALUE
 +CURLMcode type, general libcurl multi interface error code. On success,
 +CURLM_OK is returned.
 +.SH "SEE ALSO"
 +.BR curl_multi_init "(3)," curl_easy_cleanup "(3)," curl_easy_init "(3)"
diff --cc docs/libcurl/gnurl_multi_fdset.3
index 81fb4b1dc,000000000..74cb22511
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_fdset.3
+++ b/docs/libcurl/gnurl_multi_fdset.3
@@@ -1,84 -1,0 +1,84 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_fdset 3 "2 Jan 2006" "libcurl 7.16.0" "libgnurl Manual"
 +.SH NAME
 +curl_multi_fdset - extracts file descriptor information from a multi handle
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_fdset(CURLM *multi_handle,
 +                           fd_set *read_fd_set,
 +                           fd_set *write_fd_set,
 +                           fd_set *exc_fd_set,
 +                           int *max_fd);
 +.ad
 +.SH DESCRIPTION
 +This function extracts file descriptor information from a given multi_handle.
 +libcurl returns its fd_set sets. The application can use these to select() on,
 +but be sure to FD_ZERO them before calling this function as
 +\fIcurl_multi_fdset(3)\fP only adds its own descriptors, it doesn't zero or
 +otherwise remove any others. The \fIcurl_multi_perform(3)\fP function should
 +be called as soon as one of them is ready to be read from or written to.
 +
 +If the \fIread_fd_set\fP argument is not a null pointer, it points to an
 +object of type fd_set that on returns specifies the file descriptors to be
 +checked for being ready to read.
 +
 +If the \fIwrite_fd_set\fP argument is not a null pointer, it points to an
 +object of type fd_set that on return specifies the file descriptors to be
 +checked for being ready to write.
 +
 +If the \fIexc_fd_set\fP argument is not a null pointer, it points to an object
 +of type fd_set that on return specifies the file descriptors to be checked for
 +error conditions pending.
 +
 +If no file descriptors are set by libcurl, \fImax_fd\fP will contain -1 when
 +this function returns. Otherwise it will contain the highest descriptor number
 +libcurl set. When libcurl returns -1 in \fImax_fd\fP, it is because libcurl
 +currently does something that isn't possible for your application to monitor
 +with a socket and unfortunately you can then not know exactly when the current
 +action is completed using select(). You then need to wait a while before you
 +proceed and call \fIcurl_multi_perform(3)\fP anyway. How long to wait? Unless
 +\fIcurl_multi_timeout(3)\fP gives you a lower number, we suggest 100
 +milliseconds or so, but you may want to test it out in your own particular
 +conditions to find a suitable value.
 +
 +When doing select(), you should use \fIcurl_multi_timeout(3)\fP to figure out
 +how long to wait for action. Call \fIcurl_multi_perform(3)\fP even if no
 +activity has been seen on the fd_sets after the timeout expires as otherwise
 +internal retries and timeouts may not work as you'd think and want.
 +
 +If one of the sockets used by libcurl happens to be larger than what can be
 +set in an fd_set, which on POSIX systems means that the file descriptor is
 +larger than FD_SETSIZE, then libcurl will try to not set it. Setting a too
 +large file descriptor in an fd_set implies an out of bounds write which can
 +cause crashes, or worse. The effect of NOT storing it will possibly save you
 +from the crash, but will make your program NOT wait for sockets it should wait
 +for...
 +.SH RETURN VALUE
 +CURLMcode type, general libcurl multi interface error code. See
 +\fIlibcurl-errors(3)\fP
 +.SH "SEE ALSO"
 +.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
 +.BR curl_multi_wait "(3), "
 +.BR curl_multi_timeout "(3), " curl_multi_perform "(3), " select "(2) "
diff --cc docs/libcurl/gnurl_multi_info_read.3
index daa754a9a,000000000..e89b30f8d
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 d06c12f4e,000000000..0b4f9e0ca
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_perform.3
index f59cc5e53,000000000..76fa3ff12
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_perform.3
+++ b/docs/libcurl/gnurl_multi_perform.3
@@@ -1,130 -1,0 +1,130 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_perform 3 "1 March 2002" "libcurl 7.9.5" "libgnurl Manual"
 +.SH NAME
 +curl_multi_perform - reads/writes available data from each easy handle
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_perform(CURLM *multi_handle, int *running_handles);
 +.ad
 +.SH DESCRIPTION
 +This function handles transfers on all the added handles that need attention
 +in an non-blocking fashion.
 +
 +When an application has found out there's data available for the multi_handle
 +or a timeout has elapsed, the application should call this function to
 +read/write whatever there is to read or write right now etc.
 +\fIcurl_multi_perform(3)\fP returns as soon as the reads/writes are done. This
 +function does not require that there actually is any data available for
 +reading or that data can be written, it can be called just in case. It will
 +write the number of handles that still transfer data in the second argument's
 +integer-pointer.
 +
 +If the amount of \fIrunning_handles\fP is changed from the previous call (or
 +is less than the amount of easy handles you've added to the multi handle), you
 +know that there is one or more transfers less "running". You can then call
 +\fIcurl_multi_info_read(3)\fP to get information about each individual
 +completed transfer, and that returned info includes CURLcode and more. If an
 +added handle fails very quickly, it may never be counted as a running_handle.
 +You could use \fIcurl_multi_info_read(3)\fP to track actual status of the
 +added handles in that case.
 +
 +When \fIrunning_handles\fP is set to zero (0) on the return of this function,
 +there is no longer any transfers in progress.
 +.SH EXAMPLE
 +.nf
 +#ifdef _WIN32
 +#define SHORT_SLEEP Sleep(100)
 +#else
 +#define SHORT_SLEEP usleep(100000)
 +#endif
 +
 +fd_set fdread;
 +fd_set fdwrite;
 +fd_set fdexcep;
 +int maxfd = -1;
 +
 +long curl_timeo;
 +
 +curl_multi_timeout(multi_handle, &curl_timeo);
 +if(curl_timeo < 0)
 +  curl_timeo = 1000;
 +
 +timeout.tv_sec = curl_timeo / 1000;
 +timeout.tv_usec = (curl_timeo % 1000) * 1000;
 +
 +FD_ZERO(&fdread);
 +FD_ZERO(&fdwrite);
 +FD_ZERO(&fdexcep);
 +
 +/* get file descriptors from the transfers */
 +mc = curl_multi_fdset(multi_handle, &fdread, &fdwrite, &fdexcep, &maxfd);
 +
 +if(maxfd == -1) {
 +  SHORT_SLEEP;
 +  rc = 0;
 +}
 +else
 +  rc = select(maxfd+1, &fdread, &fdwrite, &fdexcep, &timeout);
 +
 +switch(rc) {
 +case -1:
 +  /* select error */
 +  break;
 +case 0:
 +default:
 +  /* timeout or readable/writable sockets */
 +  curl_multi_perform(multi_handle, &still_running);
 +  break;
 +}
 +
 +/* if there are still transfers, loop! */
 +.fi
 +.SH "RETURN VALUE"
 +CURLMcode type, general libcurl multi interface error code.
 +
 +Before version 7.20.0 (released on February 9 2010): If you receive 
\fICURLM_CALL_MULTI_PERFORM\fP, this
 +basically means that you should call \fIcurl_multi_perform(3)\fP again, before
 +you select() on more actions. You don't have to do it immediately, but the
 +return code means that libcurl may have more data available to return or that
 +there may be more data to send off before it is "satisfied". Do note that
 +\fIcurl_multi_perform(3)\fP will return \fICURLM_CALL_MULTI_PERFORM\fP only
 +when it wants to be called again \fBimmediately\fP. When things are fine and
 +there is nothing immediate it wants done, it'll return \fICURLM_OK\fP and you
 +need to wait for \&"action" and then call this function again.
 +
 +This function only returns errors etc regarding the whole multi stack.
 +Problems still might have occurred on individual transfers even when this
 +function returns \fICURLM_OK\fP. Use \fIcurl_multi_info_read(3)\fP to figure
 +out how individual transfers did.
 +.SH "TYPICAL USAGE"
 +Most applications will use \fIcurl_multi_fdset(3)\fP to get the multi_handle's
 +file descriptors, and \fIcurl_multi_timeout(3)\fP to get a suitable timeout
 +period, then it'll wait for action on the file descriptors using
 +\fBselect(3)\fP. As soon as one or more file descriptor is ready,
 +\fIcurl_multi_perform(3)\fP gets called.
 +.SH "SEE ALSO"
 +.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
 +.BR curl_multi_wait "(3), "
 +.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
 +.BR libcurl-errors "(3)"
diff --cc docs/libcurl/gnurl_multi_poll.3
index adab68d5e,000000000..37fcd7581
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_poll.3
+++ b/docs/libcurl/gnurl_multi_poll.3
@@@ -1,117 -1,0 +1,117 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_poll 3 "29 Jul 2019" "libcurl 7.66.0" "libgnurl Manual"
 +.SH NAME
 +curl_multi_poll - polls on all easy handles in a multi handle
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_poll(CURLM *multi_handle,
 +                          struct curl_waitfd extra_fds[],
 +                          unsigned int extra_nfds,
 +                          int timeout_ms,
 +                          int *numfds);
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_multi_poll(3)\fP polls all file descriptors used by the curl easy
 +handles contained in the given multi handle set.  It will block until activity
 +is detected on at least one of the handles or \fItimeout_ms\fP has passed.
 +Alternatively, if the multi handle has a pending internal timeout that has a
 +shorter expiry time than \fItimeout_ms\fP, that shorter time will be used
 +instead to make sure timeout accuracy is reasonably kept.
 +
 +The calling application may pass additional curl_waitfd structures which are
 +similar to \fIpoll(2)\fP's pollfd structure to be waited on in the same call.
 +
 +On completion, if \fInumfds\fP is non-NULL, it will be populated with the
 +total number of file descriptors on which interesting events occurred. This
 +number can include both libcurl internal descriptors as well as descriptors
 +provided in \fIextra_fds\fP.
 +
 +The \fIcurl_multi_wakeup(3)\fP function can be used from another thread to
 +wake up this function and return faster. This is one of the details
 +that makes this function different than \fIcurl_multi_wait(3)\fP which cannot
 +be woken up this way.
 +
 +If no extra file descriptors are provided and libcurl has no file descriptor
 +to offer to wait for, this function will instead wait during \fItimeout_ms\fP
 +milliseconds (or shorter if an internal timer indicates so). This is the
 +other detail that makes this function different than
 +\fIcurl_multi_wait(3)\fP.
 +
 +This function is encouraged to be used instead of select(3) when using the
 +multi interface to allow applications to easier circumvent the common problem
 +with 1024 maximum file descriptors.
 +.SH curl_waitfd
 +.nf
 +struct curl_waitfd {
 +  curl_socket_t fd;
 +  short events;
 +  short revents;
 +};
 +.fi
 +.IP CURL_WAIT_POLLIN
 +Bit flag to curl_waitfd.events indicating the socket should poll on read
 +events such as new data received.
 +.IP CURL_WAIT_POLLPRI
 +Bit flag to curl_waitfd.events indicating the socket should poll on high
 +priority read events such as out of band data.
 +.IP CURL_WAIT_POLLOUT
 +Bit flag to curl_waitfd.events indicating the socket should poll on write
 +events such as the socket being clear to write without blocking.
 +.SH EXAMPLE
 +.nf
 +CURL *easy_handle;
 +CURLM *multi_handle;
 +
 +/* add the individual easy handle */
 +curl_multi_add_handle(multi_handle, easy_handle);
 +
 +do {
 +  CURLMcode mc;
 +  int numfds;
 +
 +  mc = curl_multi_perform(multi_handle, &still_running);
 +
 +  if(mc == CURLM_OK) {
 +    /* wait for activity or timeout */
 +    mc = curl_multi_poll(multi_handle, NULL, 0, 1000, &numfds);
 +  }
 +
 +  if(mc != CURLM_OK) {
 +    fprintf(stderr, "curl_multi failed, code %d.\\n", mc);
 +    break;
 +  }
 +
 +} while(still_running);
 +
 +curl_multi_remove_handle(multi_handle, easy_handle);
 +.fi
 +.SH RETURN VALUE
 +CURLMcode type, general libcurl multi interface error code. See
 +\fIlibcurl-errors(3)\fP
 +.SH AVAILABILITY
 +This function was added in libcurl 7.66.0.
 +.SH "SEE ALSO"
 +.BR curl_multi_fdset "(3), " curl_multi_perform "(3), "
 +.BR curl_multi_wait "(3), " curl_multi_wakeup "(3)"
diff --cc docs/libcurl/gnurl_multi_remove_handle.3
index 0987ea287,000000000..9f7cc9e3b
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_remove_handle.3
+++ b/docs/libcurl/gnurl_multi_remove_handle.3
@@@ -1,47 -1,0 +1,47 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_remove_handle 3 "6 March 2002" "libcurl 7.9.5" "libgnurl 
Manual"
 +.SH NAME
 +curl_multi_remove_handle - remove an easy handle from a multi session
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_remove_handle(CURLM *multi_handle, CURL *easy_handle);
 +.ad
 +.SH DESCRIPTION
 +Removes a given \fIeasy_handle\fP from the \fImulti_handle\fP. This will make
 +the specified easy handle be removed from this multi handle's control.
 +
 +When the easy handle has been removed from a multi stack, it is again
 +perfectly legal to invoke \fIcurl_easy_perform(3)\fP on this easy handle.
 +
 +Removing an easy handle while being used is perfectly legal and will
 +effectively halt the transfer in progress involving that easy handle. All
 +other easy handles and transfers will remain unaffected.
 +
 +It is fine to remove a handle at any time during a transfer, just not from
 +within any libcurl callback function.
 +.SH RETURN VALUE
 +CURLMcode type, general libcurl multi interface error code.
 +.SH "SEE ALSO"
 +.BR curl_multi_cleanup "(3)," curl_multi_init "(3), "
 +.BR curl_multi_add_handle "(3) "
diff --cc docs/libcurl/gnurl_multi_setopt.3
index dd141be0c,000000000..583274eab
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_setopt.3
+++ b/docs/libcurl/gnurl_multi_setopt.3
@@@ -1,80 -1,0 +1,80 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_setopt 3 "4 Nov 2014" "libcurl 7.39.0" "libgnurl Manual"
 +.SH NAME
 +curl_multi_setopt \- set options for a curl multi handle
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM * multi_handle, CURLMoption option, param);
 +.SH DESCRIPTION
 +\fIcurl_multi_setopt(3)\fP is used to tell a libcurl multi handle how to
 +behave. By using the appropriate options to \fIcurl_multi_setopt(3)\fP, you
 +can change libcurl's behaviour when using that multi handle.  All options are
 +set with the \fIoption\fP followed by the parameter \fIparam\fP. That
 +parameter can be a \fBlong\fP, a \fBfunction pointer\fP, an \fBobject
 +pointer\fP or a \fBcurl_off_t\fP type, depending on what the specific option
 +expects. Read this manual carefully as bad input values may cause libcurl to
 +behave badly!  You can only set one option in each function call.
 +
 +.SH OPTIONS
 +.IP CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE
 +See \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP
 +.IP CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE
 +See \fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP
 +.IP CURLMOPT_MAX_HOST_CONNECTIONS
 +See \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP
 +.IP CURLMOPT_MAX_PIPELINE_LENGTH
 +See \fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP
 +.IP CURLMOPT_MAX_TOTAL_CONNECTIONS
 +See \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP
 +.IP CURLMOPT_MAXCONNECTS
 +See \fICURLMOPT_MAXCONNECTS(3)\fP
 +.IP CURLMOPT_PIPELINING
 +See \fICURLMOPT_PIPELINING(3)\fP
 +.IP CURLMOPT_PIPELINING_SITE_BL
 +See \fICURLMOPT_PIPELINING_SITE_BL(3)\fP
 +.IP CURLMOPT_PIPELINING_SERVER_BL
 +See \fICURLMOPT_PIPELINING_SERVER_BL(3)\fP
 +.IP CURLMOPT_PUSHFUNCTION
 +See \fICURLMOPT_PUSHFUNCTION(3)\fP
 +.IP CURLMOPT_PUSHDATA
 +See \fICURLMOPT_PUSHDATA(3)\fP
 +.IP CURLMOPT_SOCKETFUNCTION
 +See \fICURLMOPT_SOCKETFUNCTION(3)\fP
 +.IP CURLMOPT_SOCKETDATA
 +See \fICURLMOPT_SOCKETDATA(3)\fP
 +.IP CURLMOPT_TIMERFUNCTION
 +See \fICURLMOPT_TIMERFUNCTION(3)\fP
 +.IP CURLMOPT_TIMERDATA
 +See \fICURLMOPT_TIMERDATA(3)\fP
 +.IP CURLMOPT_MAX_CONCURRENT_STREAMS
 +See \fICURLMOPT_MAX_CONCURRENT_STREAMS(3)\fP
 +.SH RETURNS
 +The standard CURLMcode for multi interface error codes. Note that it returns a
 +CURLM_UNKNOWN_OPTION if you try setting an option that this version of libcurl
 +doesn't know of.
 +.SH AVAILABILITY
 +This function was added in libcurl 7.15.4.
 +.SH "SEE ALSO"
 +.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
 +.BR curl_multi_socket "(3), " curl_multi_info_read "(3)"
diff --cc docs/libcurl/gnurl_multi_socket.3
index 3ca76e668,000000000..01b801e89
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_socket.3
+++ b/docs/libcurl/gnurl_multi_socket.3
@@@ -1,159 -1,0 +1,159 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_socket 3 "9 Jul 2006" "libcurl 7.16.0" "libgnurl Manual"
 +.SH NAME
 +curl_multi_socket \- reads/writes available data
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +CURLMcode curl_multi_socket(CURLM * multi_handle, curl_socket_t sockfd,
 +                            int *running_handles);
 +
 +CURLMcode curl_multi_socket_all(CURLM *multi_handle,
 +                                int *running_handles);
 +.fi
 +.SH DESCRIPTION
 +These functions are deprecated. Do not use! See
 +\fIcurl_multi_socket_action(3)\fP instead!
 +
 +At return, the integer \fBrunning_handles\fP points to will contain the number
 +of still running easy handles within the multi handle. When this number
 +reaches zero, all transfers are complete/done. Note that when you call
 +\fIcurl_multi_socket_action(3)\fP on a specific socket and the counter
 +decreases by one, it DOES NOT necessarily mean that this exact socket/transfer
 +is the one that completed. Use \fIcurl_multi_info_read(3)\fP to figure out
 +which easy handle that completed.
 +
 +The \fIcurl_multi_socket_action(3)\fP functions inform the application about
 +updates in the socket (file descriptor) status by doing none, one, or multiple
 +calls to the socket callback function set with the
 +\fICURLMOPT_SOCKETFUNCTION(3)\fP option to \fIcurl_multi_setopt(3)\fP. They
 +update the status with changes since the previous time the callback was
 +called.
 +
 +Get the timeout time by setting the \fICURLMOPT_TIMERFUNCTION(3)\fP option
 +with \fIcurl_multi_setopt(3)\fP. Your application will then get called with
 +information on how long to wait for socket actions at most before doing the
 +timeout action: call the \fIcurl_multi_socket_action(3)\fP function with the
 +\fBsockfd\fP argument set to CURL_SOCKET_TIMEOUT. You can also use the
 +\fIcurl_multi_timeout(3)\fP function to poll the value at any given time, but
 +for an event-based system using the callback is far better than relying on
 +polling the timeout value.
 +
 +Usage of \fIcurl_multi_socket(3)\fP is deprecated, whereas the function is
 +equivalent to \fIcurl_multi_socket_action(3)\fP with \fBev_bitmask\fP set to
 +0.
 +
 +Force libcurl to (re-)check all its internal sockets and transfers instead of
 +just a single one by calling \fIcurl_multi_socket_all(3)\fP. Note that there
 +should not be any reason to use this function!
 +.SH "CALLBACK DETAILS"
 +
 +The socket \fBcallback\fP function uses a prototype like this
 +.nf
 +
 +  int curl_socket_callback(CURL *easy,      /* easy handle */
 +                           curl_socket_t s, /* socket */
 +                           int action,      /* see values below */
 +                           void *userp,    /* private callback pointer */
 +                           void *socketp); /* private socket pointer */
 +
 +.fi
 +The callback MUST return 0.
 +
 +The \fIeasy\fP argument is a pointer to the easy handle that deals with this
 +particular socket. Note that a single handle may work with several sockets
 +simultaneously.
 +
 +The \fIs\fP argument is the actual socket value as you use it within your
 +system.
 +
 +The \fIaction\fP argument to the callback has one of five values:
 +.RS
 +.IP "CURL_POLL_NONE (0)"
 +register, not interested in readiness (yet)
 +.IP "CURL_POLL_IN (1)"
 +register, interested in read readiness
 +.IP "CURL_POLL_OUT (2)"
 +register, interested in write readiness
 +.IP "CURL_POLL_INOUT (3)"
 +register, interested in both read and write readiness
 +.IP "CURL_POLL_REMOVE (4)"
 +unregister
 +.RE
 +
 +The \fIsocketp\fP argument is a private pointer you have previously set with
 +\fIcurl_multi_assign(3)\fP to be associated with the \fIs\fP socket. If no
 +pointer has been set, socketp will be NULL. This argument is of course a
 +service to applications that want to keep certain data or structs that are
 +strictly associated to the given socket.
 +
 +The \fIuserp\fP argument is a private pointer you have previously set with
 +\fIcurl_multi_setopt(3)\fP and the \fICURLMOPT_SOCKETDATA(3)\fP option.
 +.SH "RETURN VALUE"
 +CURLMcode type, general libcurl multi interface error code.
 +
 +Legacy: If you receive \fICURLM_CALL_MULTI_PERFORM\fP, this basically means
 +that you should call \fIcurl_multi_socket(3)\fP again, before you wait for
 +more actions on libcurl's sockets. You don't have to do it immediately, but
 +the return code means that libcurl may have more data available to return or
 +that there may be more data to send off before it is "satisfied".
 +
 +In modern libcurls, \fICURLM_CALL_MULTI_PERFORM\fP or
 +\fICURLM_CALL_MULTI_SOCKET\fP should not be returned and no application needs
 +to care about them.
 +
 +NOTE that the return code is for the whole multi stack. Problems still might 
have
 +occurred on individual transfers even when one of these functions
 +return OK.
 +.SH "TYPICAL USAGE"
 +1. Create a multi handle
 +
 +2. Set the socket callback with \fICURLMOPT_SOCKETFUNCTION(3)\fP
 +
 +3. Set the timeout callback with \fICURLMOPT_TIMERFUNCTION(3)\fP, to get to
 +know what timeout value to use when waiting for socket activities.
 +
 +4. Add easy handles with curl_multi_add_handle()
 +
 +5. Provide some means to manage the sockets libcurl is using, so you can check
 +them for activity. This can be done through your application code, or by way
 +of an external library such as libevent or glib.
 +
 +6. Wait for activity on any of libcurl's sockets, use the timeout value your
 +callback has been told
 +
 +7, When activity is detected, call curl_multi_socket_action() for the
 +socket(s) that got action. If no activity is detected and the timeout expires,
 +call \fIcurl_multi_socket_action(3)\fP with \fICURL_SOCKET_TIMEOUT\fP
 +
 +8. Go back to step 6.
 +.SH AVAILABILITY
 +This function was added in libcurl 7.15.4, and is deemed stable since
 +7.16.0.
 +
 +\fIcurl_multi_socket(3)\fP is deprecated, use
 +\fIcurl_multi_socket_action(3)\fP instead!
 +.SH "SEE ALSO"
 +.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
 +.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
 +.BR "the hiperfifo.c example"
diff --cc docs/libcurl/gnurl_multi_socket_action.3
index 35b709231,000000000..419cc12fb
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_socket_action.3
+++ b/docs/libcurl/gnurl_multi_socket_action.3
@@@ -1,96 -1,0 +1,96 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_socket_action 3 "9 Jul 2006" "libcurl 7.16.0" "libgnurl 
Manual"
 +.SH NAME
 +curl_multi_socket_action \- reads/writes available data given an action
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_socket_action(CURLM * multi_handle,
 +                                   curl_socket_t sockfd,
 +                                   int ev_bitmask,
 +                                   int *running_handles);
 +.fi
 +.SH DESCRIPTION
 +When the application has detected action on a socket handled by libcurl, it
 +should call \fIcurl_multi_socket_action(3)\fP with the \fBsockfd\fP argument
 +set to the socket with the action. When the events on a socket are known, they
 +can be passed as an events bitmask \fBev_bitmask\fP by first setting
 +\fBev_bitmask\fP to 0, and then adding using bitwise OR (|) any combination of
 +events to be chosen from CURL_CSELECT_IN, CURL_CSELECT_OUT or
 +CURL_CSELECT_ERR. When the events on a socket are unknown, pass 0 instead, and
 +libcurl will test the descriptor internally. It is also permissible to pass
 +CURL_SOCKET_TIMEOUT to the \fBsockfd\fP parameter in order to initiate the
 +whole process or when a timeout occurs.
 +
 +At return, \fBrunning_handles\fP points to the number of running easy handles
 +within the multi handle. When this number reaches zero, all transfers are
 +complete/done. When you call \fIcurl_multi_socket_action(3)\fP on a specific
 +socket and the counter decreases by one, it DOES NOT necessarily mean that
 +this exact socket/transfer is the one that completed. Use
 +\fIcurl_multi_info_read(3)\fP to figure out which easy handle that completed.
 +
 +The \fIcurl_multi_socket_action(3)\fP function informs the application about
 +updates in the socket (file descriptor) status by doing none, one, or multiple
 +calls to the socket callback function set with the
 +\fICURLMOPT_SOCKETFUNCTION(3)\fP option to \fIcurl_multi_setopt(3)\fP. They
 +update the status with changes since the previous time the callback was
 +called.
 +
 +Get the timeout time by setting the \fICURLMOPT_TIMERFUNCTION(3)\fP option
 +with \fIcurl_multi_setopt(3)\fP. Your application will then get called with
 +information on how long to wait for socket actions at most before doing the
 +timeout action: call the \fIcurl_multi_socket_action(3)\fP function with the
 +\fBsockfd\fP argument set to CURL_SOCKET_TIMEOUT. You can also use the
 +\fIcurl_multi_timeout(3)\fP function to poll the value at any given time, but
 +for an event-based system using the callback is far better than relying on
 +polling the timeout value.
 +.SH "TYPICAL USAGE"
 +1. Create a multi handle
 +
 +2. Set the socket callback with \fICURLMOPT_SOCKETFUNCTION(3)\fP
 +
 +3. Set the timeout callback with \fICURLMOPT_TIMERFUNCTION(3)\fP, to get to
 +know what timeout value to use when waiting for socket activities.
 +
 +4. Add easy handles with curl_multi_add_handle()
 +
 +5. Provide some means to manage the sockets libcurl is using, so you can check
 +them for activity. This can be done through your application code, or by way
 +of an external library such as libevent or glib.
 +
 +6. Call curl_multi_socket_action(..., CURL_SOCKET_TIMEOUT, 0, ...)
 +to kickstart everything. To get one or more callbacks called.
 +
 +7. Wait for activity on any of libcurl's sockets, use the timeout value your
 +callback has been told.
 +
 +8, When activity is detected, call curl_multi_socket_action() for the
 +socket(s) that got action. If no activity is detected and the timeout expires,
 +call \fIcurl_multi_socket_action(3)\fP with \fICURL_SOCKET_TIMEOUT\fP.
 +.SH AVAILABILITY
 +This function was added in libcurl 7.15.4, and is deemed stable since 7.16.0.
 +.SH "SEE ALSO"
 +.BR curl_multi_cleanup "(3), " curl_multi_init "(3), "
 +.BR curl_multi_fdset "(3), " curl_multi_info_read "(3), "
 +.BR "the hiperfifo.c example"
diff --cc docs/libcurl/gnurl_multi_strerror.3
index feb6cd684,000000000..24dbdb946
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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 e2620dd8f,000000000..76e45ac25
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_multi_wait.3
index 21c0842b4,000000000..64a7426a9
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_wait.3
+++ b/docs/libcurl/gnurl_multi_wait.3
@@@ -1,123 -1,0 +1,123 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_wait 3 "12 Jul 2012" "libcurl 7.28.0" "libgnurl Manual"
 +.SH NAME
 +curl_multi_wait - polls on all easy handles in a multi handle
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_wait(CURLM *multi_handle,
 +                          struct curl_waitfd extra_fds[],
 +                          unsigned int extra_nfds,
 +                          int timeout_ms,
 +                          int *numfds);
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_multi_wait(3)\fP polls all file descriptors used by the curl easy
 +handles contained in the given multi handle set.  It will block until activity
 +is detected on at least one of the handles or \fItimeout_ms\fP has passed.
 +Alternatively, if the multi handle has a pending internal timeout that has a
 +shorter expiry time than \fItimeout_ms\fP, that shorter time will be used
 +instead to make sure timeout accuracy is reasonably kept.
 +
 +The calling application may pass additional curl_waitfd structures which are
 +similar to \fIpoll(2)\fP's pollfd structure to be waited on in the same call.
 +
 +On completion, if \fInumfds\fP is non-NULL, it will be populated with the
 +total number of file descriptors on which interesting events occurred. This
 +number can include both libcurl internal descriptors as well as descriptors
 +provided in \fIextra_fds\fP.
 +
 +If no extra file descriptors are provided and libcurl has no file descriptor
 +to offer to wait for, this function will return immediately. (Try
 +\fIcurl_multi_poll(3)\fP instead if you rather avoid this behavior.)
 +
 +This function is encouraged to be used instead of select(3) when using the
 +multi interface to allow applications to easier circumvent the common problem
 +with 1024 maximum file descriptors.
 +.SH curl_waitfd
 +.nf
 +struct curl_waitfd {
 +  curl_socket_t fd;
 +  short events;
 +  short revents;
 +};
 +.fi
 +.IP CURL_WAIT_POLLIN
 +Bit flag to curl_waitfd.events indicating the socket should poll on read
 +events such as new data received.
 +.IP CURL_WAIT_POLLPRI
 +Bit flag to curl_waitfd.events indicating the socket should poll on high
 +priority read events such as out of band data.
 +.IP CURL_WAIT_POLLOUT
 +Bit flag to curl_waitfd.events indicating the socket should poll on write
 +events such as the socket being clear to write without blocking.
 +.SH EXAMPLE
 +.nf
 +CURL *easy_handle;
 +CURLM *multi_handle;
 +
 +/* add the individual easy handle */
 +curl_multi_add_handle(multi_handle, easy_handle);
 +
 +do {
 +  CURLMcode mc;
 +  int numfds;
 +
 +  mc = curl_multi_perform(multi_handle, &still_running);
 +
 +  if(mc == CURLM_OK ) {
 +    /* wait for activity, timeout or "nothing" */
 +    mc = curl_multi_wait(multi_handle, NULL, 0, 1000, &numfds);
 +  }
 +
 +  if(mc != CURLM_OK) {
 +    fprintf(stderr, "curl_multi failed, code %d.\\n", mc);
 +    break;
 +  }
 +
 +  /* 'numfds' being zero means either a timeout or no file descriptors to
 +     wait for. Try timeout on first occurrence, then assume no file
 +     descriptors and no file descriptors to wait for means wait for 100
 +     milliseconds. */
 +
 +  if(!numfds) {
 +    repeats++; /* count number of repeated zero numfds */
 +    if(repeats > 1) {
 +      WAITMS(100); /* sleep 100 milliseconds */
 +    }
 +  }
 +  else
 +    repeats = 0;
 +
 +} while(still_running);
 +
 +curl_multi_remove_handle(multi_handle, easy_handle);
 +.fi
 +.SH RETURN VALUE
 +CURLMcode type, general libcurl multi interface error code. See
 +\fIlibcurl-errors(3)\fP
 +.SH AVAILABILITY
 +This function was added in libcurl 7.28.0.
 +.SH "SEE ALSO"
 +.BR curl_multi_fdset "(3), " curl_multi_perform "(3)", curl_multi_poll "(3) ",
diff --cc docs/libcurl/gnurl_multi_wakeup.3
index c47f85549,000000000..f029fb721
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_multi_wakeup.3
+++ b/docs/libcurl/gnurl_multi_wakeup.3
@@@ -1,86 -1,0 +1,86 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_wakeup 3 "17 Nov 2019" "libcurl 7.68.0" "libgnurl Manual"
 +.SH NAME
 +curl_multi_wakeup - wakes up a sleeping curl_multi_poll call
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_wakeup(CURLM *multi_handle);
 +.ad
 +.SH DESCRIPTION
 +This function can be called from any thread and it wakes up a
 +sleeping \fIcurl_multi_poll(3)\fP call that is currently (or will be)
 +waiting for activity or a timeout.
 +
 +If the function is called when there is no \fIcurl_multi_poll(3)\fP call,
 +it will cause the next call to return immediately.
 +
 +Calling this function only guarantees to wake up the current (or the next
 +if there is no current) \fIcurl_multi_poll(3)\fP call, which means it is
 +possible that multiple calls to this function will wake up the same waiting
 +operation.
 +
 +This function has no effect on \fIcurl_multi_wait(3)\fP calls.
 +.SH RETURN VALUE
 +CURLMcode type, general libcurl multi interface error code.
 +.SH AVAILABILITY
 +Added in 7.68.0
 +.SH EXAMPLE
 +.nf
 +CURL *easy_handle;
 +CURLM *multi_handle;
 +
 +/* add the individual easy handle */
 +curl_multi_add_handle(multi_handle, easy_handle);
 +
 +/* this is thread 1 */
 +do {
 +  CURLMcode mc;
 +  int numfds;
 +
 +  mc = curl_multi_perform(multi_handle, &still_running);
 +
 +  if(mc == CURLM_OK) {
 +    /* wait for activity, timeout or wakeup */
 +    mc = curl_multi_poll(multi_handle, NULL, 0, 10000, &numfds);
 +  }
 +
 +  if(time_to_die())
 +    exit(1);
 +
 +} while(still_running);
 +
 +curl_multi_remove_handle(multi_handle, easy_handle);
 +
 +/* this is thread 2 */
 +
 +if(something makes us decide to stop thread 1) {
 +
 +  set_something_to_signal_thread_1_to_exit();
 +
 +  curl_multi_wakeup(multi_handle);
 +}
 +
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_multi_poll "(3), " curl_multi_wait "(3)"
diff --cc docs/libcurl/gnurl_share_cleanup.3
index 9c07e0cbb,000000000..e3352573d
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_share_cleanup.3
+++ b/docs/libcurl/gnurl_share_cleanup.3
@@@ -1,42 -1,0 +1,42 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_cleanup 3 "8 Aug 2003" "libcurl 7.10.7" "libgnurl Manual"
 +.SH NAME
 +curl_share_cleanup - Clean up a shared object
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "CURLSHcode curl_share_cleanup(CURLSH *" share_handle ");"
 +.ad
 +.SH DESCRIPTION
 +This function deletes a shared object. The share handle cannot be used anymore
 +when this function has been called.
 +
 +Passing in a NULL pointer in \fIshare_handle\fP will make this function return
 +immediately with no action.
 +.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. If an error occurs, then the
 +share object will not be deleted.
 +.SH "SEE ALSO"
 +.BR curl_share_init "(3), " curl_share_setopt "(3)"
diff --cc docs/libcurl/gnurl_share_init.3
index 4b479a614,000000000..954b10324
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 a446b6451,000000000..022211149
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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.
 +
 +Note that due to a known bug, it is not safe to share connections this way
 +between multiple concurrent threads.
 +
 +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 5cb755742,000000000..b579298d5
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-terminated string.
 +.SH "SEE ALSO"
 +.BR libcurl-errors "(3), " curl_multi_strerror "(3), " curl_easy_strerror 
"(3)"
diff --cc docs/libcurl/gnurl_slist_append.3
index 963ad760d,000000000..c76cb7881
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_slist_append.3
+++ b/docs/libcurl/gnurl_slist_append.3
@@@ -1,72 -1,0 +1,72 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_slist_append 3 "19 Jun 2003" "libcurl 7.10.4" "libgnurl Manual"
 +.SH NAME
 +curl_slist_append - add a string to an slist
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "struct curl_slist *curl_slist_append(struct curl_slist *" list,
 +.BI "const char * "string ");"
 +.ad
 +.SH DESCRIPTION
 +\fIcurl_slist_append(3)\fP appends a string to a linked list of strings. The
 +existing \fBlist\fP should be passed as the first argument and the new list is
 +returned from this function. Pass in NULL in the \fBlist\fP argument to create
 +a new list. The specified \fBstring\fP has been appended when this function
 +returns. \fIcurl_slist_append(3)\fP copies the string.
 +
 +The list should be freed again (after usage) with
 +\fIcurl_slist_free_all(3)\fP.
 +.SH RETURN VALUE
 +A null pointer is returned if anything went wrong, otherwise the new list
 +pointer is returned. To avoid overwriting an existing non-empty list on
 +failure, the new list should be returned to a temporary variable which can
 +be tested for NULL before updating the original list pointer.
 +.SH EXAMPLE
 +.nf
 +CURL *handle;
 +struct curl_slist *slist=NULL;
 +struct curl_slist *temp=NULL;
 +
 +slist = curl_slist_append(slist, "pragma:");
 +
 +if (slist == NULL)
 +  return -1;
 +
 +temp = curl_slist_append(slist, "Accept:")
 +
 +if (temp == NULL) {
 +  curl_slist_free_all(slist);
 +  return -1;
 +}
 +
 +slist = temp;
 +
 +curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
 +
 +curl_easy_perform(handle);
 +
 +curl_slist_free_all(slist); /* free the list again */
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_slist_free_all "(3), "
diff --cc docs/libcurl/gnurl_slist_free_all.3
index bb9c522f7,000000000..30ab779fa
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_slist_free_all.3
+++ b/docs/libcurl/gnurl_slist_free_all.3
@@@ -1,55 -1,0 +1,55 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_slist_free_all 3 "5 March 2001" "libcurl 7.0" "libgnurl Manual"
 +.SH NAME
 +curl_slist_free_all - free an entire curl_slist list
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "void curl_slist_free_all(struct curl_slist *" list);
 +.ad
 +.SH DESCRIPTION
 +curl_slist_free_all() removes all traces of a previously built curl_slist
 +linked list.
 +
 +Passing in a NULL pointer in \fIlist\fP will make this function return
 +immediately with no action.
 +.SH RETURN VALUE
 +Nothing.
 +.SH EXAMPLE
 +.nf
 +CURL *handle;
 +struct curl_slist *slist=NULL;
 +
 +slist = curl_slist_append(slist, "X-libcurl: coolness");
 +
 +if (slist == NULL)
 +  return -1;
 +
 +curl_easy_setopt(handle, CURLOPT_HTTPHEADER, slist);
 +
 +curl_easy_perform(handle);
 +
 +curl_slist_free_all(slist); /* free the list again */
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_slist_append "(3), "
diff --cc docs/libcurl/gnurl_strequal.3
index 4b7752cd7,000000000..3dab5cec2
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_strequal.3
+++ b/docs/libcurl/gnurl_strequal.3
@@@ -1,51 -1,0 +1,51 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_strequal 3 "30 April 2004" "libcurl 7.12" "libgnurl Manual"
 +.SH NAME
 +curl_strequal, curl_strnequal - case insensitive string comparisons
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +.sp
 +.BI "int curl_strequal(char *" str1 ", char *" str2 ");"
 +.sp
 +.BI "int curl_strnequal(char *" str1 ", char *" str2 ", size_t " len ");"
 +.SH DESCRIPTION
 +The
 +.B curl_strequal()
 +function compares the two strings \fIstr1\fP and \fIstr2\fP, ignoring the case
 +of the characters. It returns a non-zero (TRUE) integer if the strings are
 +identical.
 +.sp
 +The \fBcurl_strnequal()\fP function is similar, except it only compares the
 +first \fIlen\fP characters of \fIstr1\fP.
 +.sp
 +These functions are provided by libcurl to enable applications to compare
 +strings in a truly portable manner. There are no standard portable case
 +insensitive string comparison functions. These two work on all platforms.
 +.SH AVAILABILITY
 +These functions will be removed from the public libcurl API in a near
 +future. They will instead be made "available" by source code access only, and
 +then as curlx_strequal() and curlx_strenqual().
 +.SH RETURN VALUE
 +Non-zero if the strings are identical. Zero if they're not.
 +.SH "SEE ALSO"
 +.BR strcmp "(3), " strcasecmp "(3)"
diff --cc docs/libcurl/gnurl_unescape.3
index c88b3947f,000000000..6fb54eb23
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_url.3
index 325865ae2,000000000..68b6cd042
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_url.3
+++ b/docs/libcurl/gnurl_url.3
@@@ -1,53 -1,0 +1,53 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_url 3 "6 Aug 2018" "libcurl" "libgnurl Manual"
 +.SH NAME
 +curl_url - returns a new CURLU handle
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +CURLU *curl_url();
 +.SH DESCRIPTION
 +This function will allocates and returns a pointer to a fresh CURLU handle, to
 +be used for further use of the URL API.
 +.SH RETURN VALUE
 +Returns a \fBCURLU *\fP if successful, or NULL if out of memory.
 +.SH EXAMPLE
 +.nf
 +  CURLUcode rc;
 +  CURLU *url = curl_url();
 +  rc = curl_url_set(url, CURLUPART_URL, "https://example.com";, 0);
 +  if(!rc) {
 +    char *scheme;
 +    rc = curl_url_get(url, CURLUPART_SCHEME, &scheme, 0);
 +    if(!rc) {
 +      printf("the scheme is %s\\n", scheme);
 +      curl_free(scheme);
 +    }
 +    curl_url_cleanup(url);
 +  }
 +.fi
 +.SH AVAILABILITY
 +Added in curl 7.62.0
 +.SH "SEE ALSO"
 +.BR curl_url_cleanup "(3), " curl_url_get "(3), " curl_url_set "(3), "
 +.BR curl_url_dup "(3), "
diff --cc docs/libcurl/gnurl_url_cleanup.3
index f0bfefdba,000000000..7452601f9
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_url_cleanup.3
+++ b/docs/libcurl/gnurl_url_cleanup.3
@@@ -1,44 -1,0 +1,44 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_url_cleanup 3 "6 Aug 2018" "libcurl" "libgnurl Manual"
 +.SH NAME
 +curl_url_cleanup - free a CURLU handle
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +void curl_url_cleanup(CURLU *handle);
 +.fi
 +.SH DESCRIPTION
 +Frees all the resources associated with the given CURLU handle!
 +.SH RETURN VALUE
 +none
 +.SH EXAMPLE
 +.nf
 +  CURLU *url = curl_url();
 +  curl_url_set(url, CURLUPART_URL, "https://example.com";, 0);
 +  curl_url_cleanup(url);
 +.fi
 +.SH AVAILABILITY
 +Added in curl 7.62.0
 +.SH "SEE ALSO"
 +.BR curl_url_dup "(3), " curl_url "(3), " curl_url_set "(3), "
 +.BR curl_url_get "(3), "
diff --cc docs/libcurl/gnurl_url_dup.3
index 7fa8d17c7,000000000..ea11af04e
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_url_dup.3
+++ b/docs/libcurl/gnurl_url_dup.3
@@@ -1,52 -1,0 +1,52 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_url_dup 3 "6 Aug 2018" "libcurl" "libgnurl Manual"
 +.SH NAME
 +curl_url_dup - duplicate a CURLU handle
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +CURLU *curl_url_dup(CURLU *inhandle);
 +.fi
 +.SH DESCRIPTION
 +Duplicates a given CURLU \fIinhandle\fP and all its contents and returns a
 +pointer to a new CURLU handle. The new handle also needs to be freed with
 +\fIcurl_url_cleanup(3)\fP.
 +.SH RETURN VALUE
 +Returns a new handle or NULL if out of memory.
 +.SH EXAMPLE
 +.nf
 +  CURLUcode rc;
 +  CURLU *url = curl_url();
 +  CURLU *url2;
 +  rc = curl_url_set(url, CURLUPART_URL, "https://example.com";, 0);
 +  if(!rc) {
 +    url2 = curl_url_dup(url); /* clone it! */
 +    curl_url_cleanup(url2);
 +  }
 +  curl_url_cleanup(url);
 +.fi
 +.SH AVAILABILITY
 +Added in curl 7.62.0
 +.SH "SEE ALSO"
 +.BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_set "(3), "
 +.BR curl_url_get "(3), "
diff --cc docs/libcurl/gnurl_url_get.3
index 20edd1427,000000000..647e76432
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_url_get.3
+++ b/docs/libcurl/gnurl_url_get.3
@@@ -1,115 -1,0 +1,115 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_url_get 3 "6 Aug 2018" "libcurl" "libgnurl Manual"
 +.SH NAME
 +curl_url_get - extract a part from a URL
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +.nf
 +CURLUcode curl_url_get(CURLU *url,
 +                       CURLUPart what,
 +                       char **part,
 +                       unsigned int flags)
 +.fi
 +.SH DESCRIPTION
 +Given the \fIurl\fP handle of an already parsed URL, this function lets the
 +user extract individual pieces from it.
 +
 +The \fIwhat\fP argument should be the particular part to extract (see list
 +below) and \fIpart\fP points to a 'char *' to get updated to point to a newly
 +allocated string with the contents.
 +
 +The \fIflags\fP argument is a bitmask with individual features.
 +
 +The returned part pointer must be freed with \fIcurl_free(3)\fP after use.
 +.SH FLAGS
 +The flags argument is zero, one or more bits set in a bitmask.
 +.IP CURLU_DEFAULT_PORT
 +If the handle has no port stored, this option will make \fIcurl_url_get(3)\fP
 +return the default port for the used scheme.
 +.IP CURLU_DEFAULT_SCHEME
 +If the handle has no scheme stored, this option will make
 +\fIcurl_url_get(3)\fP return the default scheme instead of error.
 +.IP CURLU_NO_DEFAULT_PORT
 +Instructs \fIcurl_url_get(3)\fP to not return a port number if it matches the
 +default port for the scheme.
 +.IP CURLU_URLDECODE
 +Asks \fIcurl_url_get(3)\fP to URL decode the contents before returning it. It
 +will not attempt to decode the scheme, the port number or the full URL.
 +
 +The query component will also get plus-to-space conversion as a bonus when
 +this bit is set.
 +
 +Note that this URL decoding is charset unaware and you will get a zero
 +terminated string back with data that could be intended for a particular
 +encoding.
 +
 +If there's any byte values lower than 32 in the decoded string, the get
 +operation will return an error instead.
 +.SH PARTS
 +.IP CURLUPART_URL
 +When asked to return the full URL, \fIcurl_url_get(3)\fP will return a
 +normalized and possibly cleaned up version of what was previously parsed.
 +.IP CURLUPART_SCHEME
 +Scheme cannot be URL decoded on get.
 +.IP CURLUPART_USER
 +.IP CURLUPART_PASSWORD
 +.IP CURLUPART_OPTIONS
 +.IP CURLUPART_HOST
 +The host name. If it is an IPv6 numeric address, the zoneid will not be part
 +of it but is provided separately in \fICURLUPART_ZONEID\fP. IPv6 numerical
 +addresses are returned within brackets ([]).
 +.IP CURLUPART_ZONEID
 +If the host name is a numeric IPv6 address, this field might also be set.
 +.IP CURLUPART_PORT
 +Port cannot be URL decoded on get.
 +.IP CURLUPART_PATH
 +.IP CURLUPART_QUERY
 +The query part will also get pluses converted to space when asked to URL
 +decode on get with the CURLU_URLDECODE bit.
 +.IP CURLUPART_FRAGMENT
 +.SH RETURN VALUE
 +Returns a CURLUcode error value, which is CURLUE_OK (0) if everything went
 +fine.
 +
 +If this function returns an error, no URL part is returned.
 +.SH EXAMPLE
 +.nf
 +  CURLUcode rc;
 +  CURLU *url = curl_url();
 +  rc = curl_url_set(url, CURLUPART_URL, "https://example.com";, 0);
 +  if(!rc) {
 +    char *scheme;
 +    rc = curl_url_get(url, CURLUPART_SCHEME, &scheme, 0);
 +    if(!rc) {
 +      printf("the scheme is %s\\n", scheme);
 +      curl_free(scheme);
 +    }
 +    curl_url_cleanup(url);
 +  }
 +.fi
 +.SH AVAILABILITY
 +Added in curl 7.62.0. CURLUPART_ZONEID was added in 7.65.0.
 +.SH "SEE ALSO"
 +.BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_set "(3), "
 +.BR curl_url_dup "(3), "
diff --cc docs/libcurl/gnurl_url_set.3
index 043ec38fb,000000000..23bc33279
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_url_set.3
+++ b/docs/libcurl/gnurl_url_set.3
@@@ -1,146 -1,0 +1,146 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_url_set 3 "6 Aug 2018" "libcurl" "libgnurl Manual"
 +.SH NAME
 +curl_url_set - set a URL part
 +.SH SYNOPSIS
 +.B #include <gnurl/curl.h>
 +
 +CURLUcode curl_url_set(CURLU *url,
 +                       CURLUPart part,
 +                       const char *content,
 +                       unsigned int flags)
 +.fi
 +.SH DESCRIPTION
 +Given the \fIurl\fP handle of an already parsed URL, this function lets the
 +user set/update individual pieces of it.
 +
 +The \fIpart\fP argument should identify the particular URL part (see list
 +below) to set or change, with \fIcontent\fP pointing to a null-terminated
 +string with the new contents for that URL part. The contents should be in the
 +form and encoding they'd use in a URL: URL encoded.
 +
 +Setting a part to a NULL pointer will effectively remove that part's contents
 +from the CURLU handle.
 +
 +The \fIflags\fP argument is a bitmask with independent features.
 +.SH PARTS
 +.IP CURLUPART_URL
 +Allows the full URL of the handle to be replaced. If the handle already is
 +populated with a URL, the new URL can be relative to the previous.
 +
 +When successfully setting a new URL, relative or absolute, the handle contents
 +will be replaced with the information of the newly set URL.
 +
 +Pass a pointer to a null-terminated string to the \fIurl\fP parameter. The
 +string must point to a correctly formatted "RFC 3986+" URL or be a NULL
 +pointer.
 +.IP CURLUPART_SCHEME
 +Scheme cannot be URL decoded on set.
 +.IP CURLUPART_USER
 +.IP CURLUPART_PASSWORD
 +.IP CURLUPART_OPTIONS
 +.IP CURLUPART_HOST
 +The host name. If it is IDNA the string must then be encoded as your locale
 +says or UTF-8 (when WinIDN is used). If it is a bracketed IPv6 numeric address
 +it may contain a zone id (or you can use CURLUPART_ZONEID).
 +.IP CURLUPART_ZONEID
 +If the host name is a numeric IPv6 address, this field can also be set.
 +.IP CURLUPART_PORT
 +Port cannot be URL encoded on set. The given port number is provided as a
 +string and the decimal number must be between 1 and 65535. Anything else will
 +return an error.
 +.IP CURLUPART_PATH
 +If a path is set in the URL without a leading slash, a slash will be inserted
 +automatically when this URL is read from the handle.
 +.IP CURLUPART_QUERY
 +The query part will also get spaces converted to pluses when asked to URL
 +encode on set with the CURLU_URLENCODE bit.
 +
 +If used together with the \fICURLU_APPENDQUERY\fP bit, the provided part will
 +be appended on the end of the existing query - and if the previous part didn't
 +end with an ampersand (&), an ampersand will be inserted before the new
 +appended part.
 +
 +When \fICURLU_APPENDQUERY\fP is used together with \fICURLU_URLENCODE\fP, the
 +first '=' symbol will not be URL encoded.
 +
 +The question mark in the URL is not part of the actual query contents.
 +.IP CURLUPART_FRAGMENT
 +The hash sign in the URL is not part of the actual fragment contents.
 +.SH FLAGS
 +The flags argument is zero, one or more bits set in a bitmask.
 +.IP CURLU_NON_SUPPORT_SCHEME
 +If set, allows \fIcurl_url_set(3)\fP to set a non-supported scheme.
 +.IP CURLU_URLENCODE
 +When set, \fIcurl_url_set(3)\fP URL encodes the part on entry, except for
 +scheme, port and URL.
 +
 +When setting the path component with URL encoding enabled, the slash character
 +will be skipped.
 +
 +The query part gets space-to-plus conversion before the URL conversion.
 +
 +This URL encoding is charset unaware and will convert the input on a
 +byte-by-byte manner.
 +.IP CURLU_DEFAULT_SCHEME
 +If set, will make libcurl allow the URL to be set without a scheme and then
 +sets that to the default scheme: HTTPS. Overrides the \fICURLU_GUESS_SCHEME\fP
 +option if both are set.
 +.IP CURLU_GUESS_SCHEME
 +If set, will make libcurl allow the URL to be set without a scheme and it
 +instead "guesses" which scheme that was intended based on the host name.  If
 +the outermost sub-domain name matches DICT, FTP, IMAP, LDAP, POP3 or SMTP then
 +that scheme will be used, otherwise it picks HTTP. Conflicts with the
 +\fICURLU_DEFAULT_SCHEME\fP option which takes precedence if both are set.
 +.IP CURLU_NO_AUTHORITY
 +If set, skips authority checks. The RFC allows individual schemes to omit the
 +host part (normally the only mandatory part of the authority), but libcurl
 +cannot know whether this is permitted for custom schemes. Specifying the flag
 +permits empty authority sections, similar to how file scheme is handled.
 +
 +.SH RETURN VALUE
 +Returns a CURLUcode error value, which is CURLUE_OK (0) if everything went
 +fine.
 +
 +A URL string passed on to \fIcurl_url_set(3)\fP for the \fBCURLUPART_URL\fP
 +part, must be shorter than 8000000 bytes otherwise it returns
 +\fBCURLUE_MALFORMED_INPUT\fP (added in 7.65.0).
 +
- If this function returns an error, no URL part is returned.
++If this function returns an error, no URL part is set.
 +.SH EXAMPLE
 +.nf
 +  CURLUcode rc;
 +  CURLU *url = curl_url();
 +  rc = curl_url_set(url, CURLUPART_URL, "https://example.com";, 0);
 +  if(!rc) {
 +    char *scheme;
 +    /* change it to an FTP URL */
 +    rc = curl_url_set(url, CURLUPART_SCHEME, "ftp", 0);
 +  }
 +  curl_url_cleanup(url);
 +.fi
 +.SH AVAILABILITY
 +Added in curl 7.62.0. CURLUPART_ZONEID was added in 7.65.0.
 +.SH "SEE ALSO"
 +.BR curl_url_cleanup "(3), " curl_url "(3), " curl_url_get "(3), "
 +.BR curl_url_dup "(3), "
diff --cc docs/libcurl/gnurl_version.3
index d08ef0bdc,000000000..5c4c28cb0
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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 2e8ed2956,000000000..15042dc42
mode 100644,000000..100644
--- a/docs/libcurl/gnurl_version_info.3
+++ b/docs/libcurl/gnurl_version_info.3
@@@ -1,216 -1,0 +1,220 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 */
 +
 +  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 CURLVERSION_SECOND or higher, the members below exist */
 +  const char *ares;         /* human readable string */
 +  int ares_num;             /* number */
 +
 +  /* when 'age' is CURLVERSION_THIRD or higher, the members below exist */
 +  const char *libidn;       /* human readable string */
 +
 +  /* 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 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 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 */
 +  /* when 'age' is CURLVERSION_EIGHTH or higher (>= 7.71.0), the members
 +     below exist */
 +  unsigned int zstd_ver_num; /* Numeric Zstd version
 +                                  (MAJOR << 24) | (MINOR << 12) | PATCH */
 +  const char *zstd_version; /* human readable string. */
 +} 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_ZSTD
 +supports HTTP zstd content encoding using zstd library (Added in 7.72.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_HSTS
++libcurl was built with support for HSTS (HTTP Strict Transport Security)
++(Added in 7.74.0)
 +.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). Legacy bit. Deprecated since 7.33.0.
 +.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_UNICODE
 +libcurl was built with Unicode support on Windows. This makes non-ASCII
 +characters work in filenames and options passed to libcurl. (Added in 7.72.0)
 +.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)
++libcurl was built with support for TLS-SRP (in one or more of the built-in TLS
++backends). (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-url.3
index bdf82ec15,000000000..5b375131e
mode 100644,000000..100644
--- a/docs/libcurl/libgnurl-url.3
+++ b/docs/libcurl/libgnurl-url.3
@@@ -1,137 -1,0 +1,137 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 libcurl 3 "10 Sep 2018" "libcurl" "libcurl url interface"
 +.SH NAME
 +libcurl-url \- URL interface overview
 +.SH DESCRIPTION
 +The URL interface provides a set of functions for parsing and generating URLs.
 +.SH INCLUDE
 +You still only include <gnurl/curl.h> in your code. Note that the URL API was
 +introduced in 7.62.0.
 +.SH CREATE
 +Create a handle that holds URL info and resources with \fIcurl_url(3)\fP:
 +
 +  CURLU *h = curl_url();
 +.SH CLEANUP
 +When done with it, clean it up with \fIcurl_url_cleanup(3)\fP:
 +
 +  curl_url_cleanup(h);
 +.SH DUPLICATE
 +When you need a copy of a handle, just duplicate it with 
\fIcurl_url_dup(3)\fP:
 +
 +  CURLU *nh = curl_url_dup(h);
 +.SH PARSING
 +By "setting" a URL to the handle with \fIcurl_url_set(3)\fP, the URL is parsed
 +and stored in the handle. If the URL is not syntactically correct it will
 +return an error instead.
 +
 +.nf
 +  rc = curl_url_set(h, CURLUPART_URL,
 +                    "https://example.com:449/foo/bar?name=moo";, 0);
 +.fi
 +
 +The zero in the fourth argument is a bitmask for changing specific features.
 +
 +If successful, this stores the URL in its individual parts within the handle.
 +.SH REDIRECT
 +When a handle already contains info about a URL, setting a relative URL will
 +make it "redirect" to adapt to it.
 +
 +  rc = curl_url_set(h, CURLUPART_URL, "../test?another", 0);
 +.SH "GET URL"
 +The `CURLU` handle represents a URL and you can easily extract that with
 +\fIcurl_url_get(3)\fP:
 +
 +  char *url;
 +  rc = curl_url_get(h, CURLUPART_URL, &url, 0);
 +  curl_free(url);
 +
 +The zero in the fourth argument is a bitmask for changing specific features.
 +.SH "GET PARTS"
 +When a URL has been parsed or parts have been set, you can extract those
 +pieces from the handle at any time.
 +
 +.nf
 +  rc = curl_url_get(h, CURLUPART_HOST, &host, 0);
 +  rc = curl_url_get(h, CURLUPART_SCHEME, &scheme, 0);
 +  rc = curl_url_get(h, CURLUPART_USER, &user, 0);
 +  rc = curl_url_get(h, CURLUPART_PASSWORD, &password, 0);
 +  rc = curl_url_get(h, CURLUPART_PORT, &port, 0);
 +  rc = curl_url_get(h, CURLUPART_PATH, &path, 0);
 +  rc = curl_url_get(h, CURLUPART_QUERY, &query, 0);
 +  rc = curl_url_get(h, CURLUPART_FRAGMENT, &fragment, 0);
 +.fi
 +
 +Extracted parts are not URL decoded unless the user also asks for it with the
 +CURLU_URLDECODE flag set in the fourth bitmask argument.
 +
 +Remember to free the returned string with \fIcurl_free(3)\fP when you're done
 +with it!
 +.SH "SET PARTS"
 +A user set individual URL parts, either after having parsed a full URL or
 +instead of parsing such.
 +
 +.nf
 +  rc = curl_url_set(urlp, CURLUPART_HOST, "www.example.com", 0);
 +  rc = curl_url_set(urlp, CURLUPART_SCHEME, "https", 0);
 +  rc = curl_url_set(urlp, CURLUPART_USER, "john", 0);
 +  rc = curl_url_set(urlp, CURLUPART_PASSWORD, "doe", 0);
 +  rc = curl_url_set(urlp, CURLUPART_PORT, "443", 0);
 +  rc = curl_url_set(urlp, CURLUPART_PATH, "/index.html", 0);
 +  rc = curl_url_set(urlp, CURLUPART_QUERY, "name=john", 0);
 +  rc = curl_url_set(urlp, CURLUPART_FRAGMENT, "anchor", 0);
 +.fi
 +
 +Set parts are not URL encoded unless the user asks for it with the
 +`CURLU_URLENCODE` flag.
 +.SH "APPENDQUERY"
 +An application can append a string to the right end of the query part with the
 +`CURLU_APPENDQUERY` flag to \fIcurl_url_set(3)\fP.
 +
 +Imagine a handle that holds the URL `https://example.com/?shoes=2`. An
 +application can then add the string `hat=1` to the query part like this:
 +
 +.nf
 +  rc = curl_url_set(urlp, CURLUPART_QUERY, "hat=1", CURLU_APPENDQUERY);
 +.fi
 +
 +It will even notice the lack of an ampersand (`&`) separator so it will inject
 +one too, and the handle's full URL will then equal
 +`https://example.com/?shoes=2&hat=1`.
 +
 +The appended string can of course also get URL encoded on add, and if asked to
 +URL encode, the encoding process will skip the '=' character. For example,
 +append `candy=N&N` to what we already have, and URL encode it to deal with the
 +ampersand in the data:
 +
 +.nf
 +  rc = curl_url_set(urlp, CURLUPART_QUERY, "candy=N&N",
 +                    CURLU_APPENDQUERY | CURLU_URLENCODE);
 +.fi
 +
 +Now the URL looks like
 +.nf
 +  https://example.com/?shoes=2&hat=1&candy=N%26N`
 +.fi
 +.SH "SEE ALSO"
 +.BR curl_url "(3), " curl_url_cleanup "(3), " curl_url_get "(3), "
 +.BR curl_url_dup "(3), " curl_url_set "(3), " CURLOPT_URL "(3), "
diff --cc docs/libcurl/libgnurl.m4
index c4f484813,000000000..036230c85
mode 100644,000000..100644
--- a/docs/libcurl/libgnurl.m4
+++ b/docs/libcurl/libgnurl.m4
@@@ -1,272 -1,0 +1,272 @@@
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2006 - 2020, David Shaw <dshaw@jabberwocky.com>
 +#
 +# 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.
++# are also available at https://curl.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 <dshaw@jabberwocky.com>   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_ACTIVESOCKET.3
index 3a3d54fa3,000000000..601e5d572
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_ACTIVESOCKET.3
+++ b/docs/libcurl/opts/GNURLINFO_ACTIVESOCKET.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ACTIVESOCKET 3 "12 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_ACTIVESOCKET \- get the active socket
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_ACTIVESOCKET,
 +                           curl_socket_t *socket);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_socket_t to receive the most recently active socket
 +used for the transfer connection by this curl session. If the socket is no
 +longer valid, \fICURL_SOCKET_BAD\fP is returned. When you are finished working
 +with the socket, you must call \fIcurl_easy_cleanup(3)\fP as usual on the easy
 +handle and let libcurl close the socket and cleanup other resources associated
 +with the handle. This option returns the active socket only after the transfer
 +is complete, and is typically used in combination with
 +\fICURLOPT_CONNECT_ONLY(3)\fP, which skips the transfer phase.
 +
 +\fICURLINFO_ACTIVESOCKET(3)\fP was added as a replacement for
 +\fICURLINFO_LASTSOCKET(3)\fP since that one isn't working on all platforms.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_socket_t sockfd;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Do not do the transfer - only connect to host */
 +  curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
 +  res = curl_easy_perform(curl);
 +
 +  /* Extract the socket from the curl handle */
 +  res = curl_easy_getinfo(curl, CURLINFO_ACTIVESOCKET, &sockfd);
 +
 +  if(res != CURLE_OK) {
 +    printf("Error: %s\\n", curl_easy_strerror(res));
 +    return 1;
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.45.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_LASTSOCKET "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_APPCONNECT_TIME.3
index 03ade4a3c,000000000..a99ecd555
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_APPCONNECT_TIME.3
+++ b/docs/libcurl/opts/GNURLINFO_APPCONNECT_TIME.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_APPCONNECT_TIME 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_APPCONNECT_TIME \- get the time until the SSL/SSH handshake is 
completed
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME, double 
*timep);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the time, in seconds, it took from the
 +start until the SSL/SSH connect/handshake to the remote host was completed.
 +This time is most often very near to the \fICURLINFO_PRETRANSFER_TIME(3)\fP
 +time, except for cases such as HTTP pipelining where the pretransfer time can
 +be delayed due to waits in line for the pipeline and more.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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 connect;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME, &connect);
 +    if(CURLE_OK == res) {
 +      printf("Time: %.1f", connect);
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.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), " 
CURLINFO_APPCONNECT_TIME_T "(3)"
diff --cc docs/libcurl/opts/GNURLINFO_APPCONNECT_TIME_T.3
index 1ae9e6c9e,000000000..b192efc57
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_APPCONNECT_TIME_T.3
+++ b/docs/libcurl/opts/GNURLINFO_APPCONNECT_TIME_T.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_APPCONNECT_TIME_T 3 "28 Apr 2018" "libcurl 7.61.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_APPCONNECT_TIME_T \- get the time until the SSL/SSH handshake is 
completed
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_APPCONNECT_TIME_T, 
curl_off_t *timep);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_off_t to receive the time, in microseconds,
 +it took from the
 +start until the SSL/SSH connect/handshake to the remote host was completed.
 +This time is most often very near to the \fICURLINFO_PRETRANSFER_TIME_T(3)\fP
 +time, except for cases such as HTTP pipelining where the pretransfer time can
 +be delayed due to waits in line for the pipeline and more.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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) {
 +  curl_off_t connect;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_APPCONNECT_TIME_T, &connect);
 +    if(CURLE_OK == res) {
 +      printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000,
 +             (long)(connect % 1000000));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.61.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), " 
CURLINFO_APPCONNECT_TIME "(3)"
diff --cc docs/libcurl/opts/GNURLINFO_CERTINFO.3
index d3782fd39,000000000..7be8a24fc
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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
 +a 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 dcd6fc0e5,000000000..c37d0530c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_CONDITION_UNMET.3
+++ b/docs/libcurl/opts/GNURLINFO_CONDITION_UNMET.3
@@@ -1,70 -1,0 +1,70 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 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. 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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_CONNECT_TIME.3
index 651850cde,000000000..e94626aa6
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_CONNECT_TIME.3
+++ b/docs/libcurl/opts/GNURLINFO_CONNECT_TIME.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CONNECT_TIME 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_CONNECT_TIME \- get the time until connect
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME, double 
*timep);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the total time in seconds from the start
 +until the connection to the remote host (or proxy) was completed.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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 connect;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME, &connect);
 +    if(CURLE_OK == res) {
 +      printf("Time: %.1f", connect);
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +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), " 
CURLINFO_CONNECT_TIME_T "(3)"
diff --cc docs/libcurl/opts/GNURLINFO_CONNECT_TIME_T.3
index 3479cc851,000000000..759f3a52a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_CONNECT_TIME_T.3
+++ b/docs/libcurl/opts/GNURLINFO_CONNECT_TIME_T.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CONNECT_TIME_T 3 "28 Apr 2018" "libcurl 7.61.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_CONNECT_TIME_T \- get the time until connect
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONNECT_TIME_T, curl_off_t 
*timep);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_off_t to receive the total time in microseconds
 +from the start until the connection to the remote host (or proxy) was 
completed.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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) {
 +  curl_off_t connect;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_CONNECT_TIME_T, &connect);
 +    if(CURLE_OK == res) {
 +      printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", connect / 1000000,
 +             (long)(connect % 1000000));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.61.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), " CURLINFO_CONNECT_TIME 
"(3)"
diff --cc docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_DOWNLOAD.3
index 639299337,000000000..8498f8fb6
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_DOWNLOAD.3
+++ b/docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_DOWNLOAD.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 3 "1 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_CONTENT_LENGTH_DOWNLOAD \- get content-length of download
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_DOWNLOAD,
 +                           double *content_length);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the content-length of the download. This
 +is the value read from the Content-Length: field. Since 7.19.4, this returns
 +-1 if the size isn't known.
 +
 +\fICURLINFO_CONTENT_LENGTH_DOWNLOAD_T(3)\fP is a newer replacement that 
returns a more
 +sensible variable type.
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* check the size */
 +    double cl;
 +    res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_DOWNLOAD, &cl);
 +    if(!res) {
 +      printf("Size: %.0f\\n", cl);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.6.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_CONTENT_LENGTH_UPLOAD "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3
index 74ca85049,000000000..99aad3842
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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.3
index cd668e9eb,000000000..56a914b7a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_UPLOAD.3
+++ b/docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_UPLOAD.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 3 "1 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_CONTENT_LENGTH_UPLOAD \- get the specified size of the upload
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_LENGTH_UPLOAD,
 +                           double *content_length);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the specified size of the upload.  Since
 +7.19.4, this returns -1 if the size isn't known.
 +
 +\fICURLINFO_CONTENT_LENGTH_UPLOAD_T(3)\fP is a newer replacement that returns 
a
 +more sensible variable type.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Perform the upload */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* check the size */
 +    double cl;
 +    res = curl_easy_getinfo(curl, CURLINFO_CONTENT_LENGTH_UPLOAD, &cl);
 +    if(!res) {
 +      printf("Size: %.0f\\n", cl);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.6.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_CONTENT_LENGTH_DOWNLOAD_T "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_CONTENT_LENGTH_UPLOAD_T.3
index f6c033fb8,000000000..334e7058a
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_CONTENT_TYPE.3
index a75a223fa,000000000..80fb69d56
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_CONTENT_TYPE.3
+++ b/docs/libcurl/opts/GNURLINFO_CONTENT_TYPE.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TYPE 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_CONTENT_TYPE \- get Content-Type
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_CONTENT_TYPE, char **ct);
 +.SH DESCRIPTION
 +Pass a pointer to a char pointer to receive the content-type of the downloaded
 +object. This is the value read from the Content-Type: field. If you get NULL,
 +it means that the server didn't send a valid Content-Type header or that the
 +protocol used doesn't support this.
 +
 +The \fBct\fP pointer will be NULL or pointing to private memory you MUST NOT
 +free it - it gets freed when you call \fIcurl_easy_cleanup(3)\fP on the
 +corresponding CURL handle.
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* extract the content-type */
 +    char *ct = NULL;
 +    res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
 +    if(!res && ct) {
 +      printf("Content-Type: %s\\n", ct);
 +    }
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.9.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_COOKIELIST.3
index e82ddb8a3,000000000..088392df7
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_EFFECTIVE_METHOD.3
index 57e45c26a,000000000..7b356c6dd
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_EFFECTIVE_METHOD.3
+++ b/docs/libcurl/opts/GNURLINFO_EFFECTIVE_METHOD.3
@@@ -1,68 -1,0 +1,68 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_EFFECTIVE_METHOD 3 "28 Aug 2015" "libcurl 7.72.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_EFFECTIVE_METHOD \- get the last used HTTP method
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_METHOD,
 +                           char **methodp);
 +.fi
 +.SH DESCRIPTION
 +Pass in a pointer to a char pointer and get the last used effective HTTP
 +method.
 +
 +In cases when you've asked libcurl to follow redirects, the method may very
 +well not be the same method the first request would use.
 +
 +The \fBmethodp\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
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "data");
 +  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    char *method = NULL;
 +    curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_METHOD, &method);
 +    if(method)
 +      printf("Redirected to method: %s\\n", method);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.72.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), "
diff --cc docs/libcurl/opts/GNURLINFO_EFFECTIVE_URL.3
index ce9ec45f5,000000000..484641b58
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_EFFECTIVE_URL.3
+++ b/docs/libcurl/opts/GNURLINFO_EFFECTIVE_URL.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_EFFECTIVE_URL 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_EFFECTIVE_URL \- get the last used URL
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_EFFECTIVE_URL, char **urlp);
 +.SH DESCRIPTION
 +Pass in a pointer to a char pointer and get the last used effective URL.
 +
 +In cases when you've asked libcurl to follow redirects, it may very well not
 +be the same value you set with \fICURLOPT_URL(3)\fP.
 +
 +The \fBurlp\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
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    char *url = NULL;
 +    curl_easy_getinfo(curl, CURLINFO_EFFECTIVE_URL, &url);
 +    if(url)
 +      printf("Redirect to: %s\\n", url);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.4
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_FILETIME.3
index b23b8afd2,000000000..c5c1d2ccf
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_FILETIME.3
+++ b/docs/libcurl/opts/GNURLINFO_FILETIME.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FILETIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_FILETIME \- get the remote time of the retrieved document
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME, long *timep);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the remote time of the retrieved document
 +(in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If you get
 +-1, it can be because of many reasons (it might be unknown, the server might
 +hide it or the server doesn't support the command that tells document time
 +etc) and the time of the document is unknown.
 +
 +You must tell libcurl to collect this information before the transfer is made,
 +by using the \fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or
 +you will unconditionally get a -1 back.
 +
 +Consider using \fICURLINFO_FILETIME_T(3)\fP to be able to extract dates beyond
 +the year 2038 on systems using 32 bit longs.
 +.SH PROTOCOLS
 +HTTP(S), FTP(S), SFTP
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  /* Ask for filetime */
 +  curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
 +    if((CURLE_OK == res) && (filetime >= 0)) {
 +      time_t file_time = (time_t)filetime;
 +      printf("filetime %s: %s", filename, ctime(&file_time));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.5
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_FILETIME_T.3
index 6ffd1a168,000000000..9cb2e209c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_FILETIME_T.3
+++ b/docs/libcurl/opts/GNURLINFO_FILETIME_T.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FILETIME 3 "25 Jan 2018" "libcurl 7.59.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_FILETIME_T \- get the remote time of the retrieved document
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FILETIME_T, curl_off_t 
*timep);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_off_t to receive the remote time of the retrieved
 +document (in number of seconds since 1 jan 1970 in the GMT/UTC time zone). If
 +you get -1, it can be because of many reasons (it might be unknown, the server
 +might hide it or the server doesn't support the command that tells document
 +time etc) and the time of the document is unknown.
 +
 +You must ask libcurl to collect this information before the transfer is made,
 +by using the \fICURLOPT_FILETIME(3)\fP option to \fIcurl_easy_setopt(3)\fP or
 +you will unconditionally get a -1 back.
 +
 +This option is an alternative to \fICURLINFO_FILETIME(3)\fP to allow systems
 +with 32 bit long variables to extract dates outside of the 32bit timestamp
 +range.
 +.SH PROTOCOLS
 +HTTP(S), FTP(S), SFTP
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  /* Ask for filetime */
 +  curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    curl_off_t filetime;
 +    res = curl_easy_getinfo(curl, CURLINFO_FILETIME_T, &filetime);
 +    if((CURLE_OK == res) && (filetime >= 0)) {
 +      time_t file_time = (time_t)filetime;
 +      printf("filetime %s: %s", filename, ctime(&file_time));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.59.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), "
diff --cc docs/libcurl/opts/GNURLINFO_FTP_ENTRY_PATH.3
index ee74c2c39,000000000..6bcd0ad3e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_FTP_ENTRY_PATH.3
+++ b/docs/libcurl/opts/GNURLINFO_FTP_ENTRY_PATH.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FTP_ENTRY_PATH 3 "12 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_FTP_ENTRY_PATH \- get entry path in FTP server
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_FTP_ENTRY_PATH, char 
**path);
 +.SH DESCRIPTION
 +Pass a pointer to a char pointer to receive a pointer to a string holding the
 +path of the entry path. That is the initial path libcurl ended up in when
 +logging on to the remote FTP server. This stores a NULL as pointer if
 +something is wrong.
 +
 +The \fBpath\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
 +FTP(S) and SFTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com";);
 +
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* extract the entry path */
 +    char *ep = NULL;
 +    res = curl_easy_getinfo(curl, CURLINFO_FTP_ENTRY_PATH, &ep);
 +    if(!res && ep) {
 +      printf("Entry path was: %s\\n", ep);
 +    }
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.4. Works for SFTP since 7.21.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_HEADER_SIZE.3
index bc0418158,000000000..c9eb4ee3a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_HEADER_SIZE.3
+++ b/docs/libcurl/opts/GNURLINFO_HEADER_SIZE.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HEADER_SIZE 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_HEADER_SIZE \- get size of retrieved headers
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HEADER_SIZE, long *sizep);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the total size of all the headers
 +received. Measured in number of bytes.
 +
 +The total includes the size of any received headers suppressed by
 +\fICURLOPT_SUPPRESS_CONNECT_HEADERS(3)\fP.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    long size;
 +    res = curl_easy_getinfo(curl, CURLINFO_HEADER_SIZE, &size);
 +    if(!res)
 +      printf("Header size: %ld bytes\\n", size);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +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_REQUEST_SIZE "(3), "
 +.BR CURLINFO_SIZE_DOWNLOAD "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_HTTPAUTH_AVAIL.3
index 5d83d00ea,000000000..0cc2adacb
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_HTTPAUTH_AVAIL.3
+++ b/docs/libcurl/opts/GNURLINFO_HTTPAUTH_AVAIL.3
@@@ -1,70 -1,0 +1,70 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTPAUTH_AVAIL 3 "12 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_HTTPAUTH_AVAIL \- get available HTTP authentication methods
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTPAUTH_AVAIL, long 
*authp);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive a bitmask indicating the authentication
 +method(s) available according to the previous response. The meaning of the
 +bits is explained in the \fICURLOPT_HTTPAUTH(3)\fP option for
 +\fIcurl_easy_setopt(3)\fP.
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* extract the available authentication types */
 +    long auth;
 +    res = curl_easy_getinfo(curl, CURLINFO_HTTPAUTH_AVAIL, &auth);
 +    if(!res) {
 +      if(!auth)
 +        printf("No auth available, perhaps no 401?\\n");
 +      else {
 +        printf("%s%s%s%s\\n",
 +               auth & CURLAUTH_BASIC ? "Basic ":"",
 +               auth & CURLAUTH_DIGEST ? "Digest ":"",
 +               auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"",
 +               auth % CURLAUTH_NTLM ? "NTLM ":"");
 +      }
 +    }
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added RFC2617 in 7.10.8
 +Added RFC7616 in 7.57.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), "
diff --cc docs/libcurl/opts/GNURLINFO_HTTP_CONNECTCODE.3
index 356ac2a88,000000000..3e47f2079
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_HTTP_CONNECTCODE.3
+++ b/docs/libcurl/opts/GNURLINFO_HTTP_CONNECTCODE.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTP_CONNECTCODE 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_HTTP_CONNECTCODE \- get the CONNECT response code
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_CONNECTCODE, long *p);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the last received HTTP proxy response code
 +to a CONNECT request. The returned value will be zero if no such response code
 +was available.
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* typically CONNECT is used to do HTTPS over HTTP proxies */
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1";);
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    long code;
 +    res = curl_easy_getinfo(curl, CURLINFO_HTTP_CONNECTCODE, &code);
 +    if(!res && code)
 +      printf("The CONNECT response code: %03ld\\n", code);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.10.7
 +.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_HTTP_VERSION.3
index caa43c725,000000000..f8f319888
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_HTTP_VERSION.3
+++ b/docs/libcurl/opts/GNURLINFO_HTTP_VERSION.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTP_VERSION 3 "11 May 2016" "libcurl 7.50.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_HTTP_VERSION \- get the http version used in the connection
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_HTTP_VERSION, 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 CURL_HTTP_VERSION_1_0,
 +CURL_HTTP_VERSION_1_1, CURL_HTTP_VERSION_2_0, CURL_HTTP_VERSION_3 or 0 if the
 +version can't be determined.
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    long http_version;
 +    curl_easy_getinfo(curl, CURLINFO_HTTP_VERSION, &http_version);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.50.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_LASTSOCKET.3
index f3e717220,000000000..70e44afef
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_LASTSOCKET.3
+++ b/docs/libcurl/opts/GNURLINFO_LASTSOCKET.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_LASTSOCKET 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_LASTSOCKET \- get the last socket used
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LASTSOCKET, long *socket);
 +.SH DESCRIPTION
 +Deprecated since 7.45.0. Use \fICURLINFO_ACTIVESOCKET(3)\fP instead.
 +
 +Pass a pointer to a long to receive the last socket used by this curl
 +session. If the socket is no longer valid, -1 is returned. When you finish
 +working with the socket, you must call curl_easy_cleanup() as usual and let
 +libcurl close the socket and cleanup other resources associated with the
 +handle. This is typically used in combination with
 +\fICURLOPT_CONNECT_ONLY(3)\fP.
 +
 +NOTE: this API is deprecated since it is not working on win64 where the SOCKET
 +type is 64 bits large while its 'long' is 32 bits. Use the
 +\fICURLINFO_ACTIVESOCKET(3)\fP instead, if possible.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  long sockfd; /* doesn't work on win64! */
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Do not do the transfer - only connect to host */
 +  curl_easy_setopt(curl, CURLOPT_CONNECT_ONLY, 1L);
 +  res = curl_easy_perform(curl);
 +
 +  /* Extract the socket from the curl handle */
 +  res = curl_easy_getinfo(curl, CURLINFO_LASTSOCKET, &sockfd);
 +
 +  if(res != CURLE_OK) {
 +    printf("Error: %s\\n", curl_easy_strerror(res));
 +    return 1;
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.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), "
 +.BR CURLINFO_ACTIVESOCKET "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_LOCAL_IP.3
index a2fe9b736,000000000..78ccf85f7
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_LOCAL_IP.3
+++ b/docs/libcurl/opts/GNURLINFO_LOCAL_IP.3
@@@ -1,68 -1,0 +1,68 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_LOCAL_IP 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_LOCAL_IP \- get local IP address of last connection
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_IP, char **ip);
 +.SH DESCRIPTION
 +Pass a pointer to a char pointer to receive the pointer to a null-terminated
 +string holding the IP address of the local end of most recent connection done
 +with this \fBcurl\fP handle. This string may be IPv6 when that is
 +enabled. Note that you get a pointer to a memory area that will be re-used at
 +next request so you need to copy the string if you want to keep the
 +information.
 +
 +The \fBip\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
 +{
 +  char *ip;
 +
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Perform the request, res will get the return code */
 +  res = curl_easy_perform(curl);
 +  /* Check for errors */
 +  if((res == CURLE_OK) &&
 +     !curl_easy_getinfo(curl, CURLINFO_LOCAL_IP, &ip) && ip) {
 +    printf("Local IP: %s\\n", ip);
 +  }
 +
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.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 curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
 +.BR CURLINFO_PRIMARY_IP "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_LOCAL_PORT.3
index 9b10fd3ff,000000000..f197d3800
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_LOCAL_PORT.3
+++ b/docs/libcurl/opts/GNURLINFO_LOCAL_PORT.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2015, 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_LOCAL_PORT 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_LOCAL_PORT \- get the latest local port number
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_LOCAL_PORT, long *portp);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the local port number of the most recent
 +connection done with this \fBcurl\fP handle.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +{
 +  CURL *curl;
 +  CURLcode res;
 +
 +  curl = curl_easy_init();
 +  if(curl) {
-     curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/";);
++    curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +    res = curl_easy_perform(curl);
 +
 +    if(CURLE_OK == res) {
 +      long port;
 +      res = curl_easy_getinfo(curl, CURLINFO_LOCAL_PORT, &port);
 +
 +      if(CURLE_OK == res) {
 +        printf("We used local port: %ld\\n", port);
 +      }
 +    }
 +    curl_easy_cleanup(curl);
 +  }
 +  return 0;
 +}
 +.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 curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
 +.BR CURLINFO_PRIMARY_PORT "(3), " CURLINFO_LOCAL_IP "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_NAMELOOKUP_TIME.3
index 52d374d1f,000000000..e3b0d1e4e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_NAMELOOKUP_TIME.3
+++ b/docs/libcurl/opts/GNURLINFO_NAMELOOKUP_TIME.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_NAMELOOKUP_TIME 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_NAMELOOKUP_TIME \- get the name lookup time
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME, double 
*timep);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the total time in seconds from the start
 +until the name resolving was completed.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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 namelookup;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME, &namelookup);
 +    if(CURLE_OK == res) {
 +      printf("Time: %.1f", namelookup);
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +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), " 
CURLINFO_NAMELOOKUP_TIME_T "(3)"
diff --cc docs/libcurl/opts/GNURLINFO_NAMELOOKUP_TIME_T.3
index 542df9736,000000000..14b473737
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_NAMELOOKUP_TIME_T.3
+++ b/docs/libcurl/opts/GNURLINFO_NAMELOOKUP_TIME_T.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_NAMELOOKUP_TIME_T 3 "28 Apr 2018" "libcurl 7.61.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_NAMELOOKUP_TIME_T \- get the name lookup time in microseconds
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NAMELOOKUP_TIME_T, 
curl_off_t *timep);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_off_t to receive the total time in microseconds
 +from the start until the name resolving was completed.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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) {
 +  curl_off_t namelookup;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_NAMELOOKUP_TIME_T, &namelookup);
 +    if(CURLE_OK == res) {
 +      printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", namelookup / 1000000,
 +             (long)(namelookup % 1000000));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.61.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), " 
CURLINFO_NAMELOOKUP_TIME "(3)"
diff --cc docs/libcurl/opts/GNURLINFO_NUM_CONNECTS.3
index 982f02241,000000000..d87c08ef5
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_NUM_CONNECTS.3
+++ b/docs/libcurl/opts/GNURLINFO_NUM_CONNECTS.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_NUM_CONNECTS 3 "12 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_NUM_CONNECTS \- get number of created connections
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_NUM_CONNECTS, long *nump);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive how many new connections libcurl had to
 +create to achieve the previous transfer (only the successful connects are
 +counted).  Combined with \fICURLINFO_REDIRECT_COUNT(3)\fP you are able to know
 +how many times libcurl successfully reused existing connection(s) or not.  See
 +the connection options of \fIcurl_easy_setopt(3)\fP to see how libcurl tries
 +to make persistent connections to save time.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    long connects;
 +    res = curl_easy_getinfo(curl, CURLINFO_NUM_CONNECTS, &connects);
 +    if(res)
 +      printf("It needed %d connects\\n", connects);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.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 curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_OS_ERRNO.3
index 2e987b1ae,000000000..8e9d1f587
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_PRETRANSFER_TIME.3
index 515293439,000000000..b0a1d6fb9
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_PRETRANSFER_TIME.3
+++ b/docs/libcurl/opts/GNURLINFO_PRETRANSFER_TIME.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PRETRANSFER_TIME 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_PRETRANSFER_TIME \- get the time until the file transfer start
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME, double 
*timep);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the time, in seconds, 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. It does \fInot\fP involve the sending of the protocol-
 +specific request that triggers a transfer.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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 pretransfer;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME, &pretransfer);
 +    if(CURLE_OK == res) {
 +      printf("Time: %.1f", pretransfer);
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +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), " 
CURLINFO_PRETRANSFER_TIME_T "(3)"
diff --cc docs/libcurl/opts/GNURLINFO_PRETRANSFER_TIME_T.3
index 1cccdef70,000000000..a00ed8395
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_PRETRANSFER_TIME_T.3
+++ b/docs/libcurl/opts/GNURLINFO_PRETRANSFER_TIME_T.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PRETRANSFER_TIME_T 3 "28 Apr 2018" "libcurl 7.61.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_PRETRANSFER_TIME_T \- get the time until the file transfer start
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRETRANSFER_TIME_T, 
curl_off_t *timep);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_off_t to receive the time, in microseconds,
 +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. It does \fInot\fP involve the sending of the protocol-
 +specific request that triggers a transfer.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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) {
 +  curl_off_t pretransfer;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_PRETRANSFER_TIME_T, &pretransfer);
 +    if(CURLE_OK == res) {
 +      printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", pretransfer / 1000000,
 +             (long)(pretransfer % 1000000));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.61.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), " 
CURLINFO_PRETRANSFER_TIME "(3)"
diff --cc docs/libcurl/opts/GNURLINFO_PRIMARY_IP.3
index 3100c2086,000000000..8466e70eb
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_PRIMARY_IP.3
+++ b/docs/libcurl/opts/GNURLINFO_PRIMARY_IP.3
@@@ -1,67 -1,0 +1,67 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2015, 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PRIMARY_IP 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_PRIMARY_IP \- get IP address of last connection
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_IP, char **ip);
 +.SH DESCRIPTION
 +Pass a pointer to a char pointer to receive the pointer to a null-terminated
 +string holding the IP address of the most recent connection done with this
 +\fBcurl\fP handle. This string may be IPv6 when that is enabled. Note that you
 +get a pointer to a memory area that will be re-used at next request so you
 +need to copy the string if you want to keep the information.
 +
 +The \fBip\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 network based ones
 +.SH EXAMPLE
 +.nf
 +{
 +  char *ip;
 +
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Perform the request, res will get the return code */
 +  res = curl_easy_perform(curl);
 +  /* Check for errors */
 +  if((res == CURLE_OK) &&
 +     !curl_easy_getinfo(curl, CURLINFO_PRIMARY_IP, &ip) && ip) {
 +    printf("IP: %s\\n", ip);
 +  }
 +
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.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_PRIMARY_PORT "(3), " CURLINFO_LOCAL_IP "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_PRIMARY_PORT.3
index 44658e4c7,000000000..5a37b23d1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_PRIMARY_PORT.3
+++ b/docs/libcurl/opts/GNURLINFO_PRIMARY_PORT.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PRIMARY_PORT 3 "12 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_PRIMARY_PORT \- get the latest destination port number
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIMARY_PORT, long *portp);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the destination port of the most recent
 +connection done with this \fBcurl\fP 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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    long port;
 +    res = curl_easy_getinfo(curl, CURLINFO_PRIMARY_PORT, &port);
 +    if(!res)
 +      printf("Connected to remote port: %ld\\n", port);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.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 curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_PRIVATE.3
index 027ae245e,000000000..a0006e20c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_PRIVATE.3
+++ b/docs/libcurl/opts/GNURLINFO_PRIVATE.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PRIVATE 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_PRIVATE \- get the private pointer
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PRIVATE, char **private);
 +.SH DESCRIPTION
 +Pass a pointer to a char pointer to receive the pointer to the private data
 +associated with the curl handle (set with the \fICURLOPT_PRIVATE(3)\fP).
 +Please note that for internal reasons, the value is returned as a char
 +pointer, although effectively being a 'void *'.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  void *pointer = 0x2345454;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/foo.bin";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin";);
 +
 +  /* set the private pointer */
 +  curl_easy_setopt(curl, CURLOPT_PRIVATE, pointer);
 +  ret = curl_easy_perform(curl);
 +
 +  /* extract the private pointer again */
 +  ret = curl_easy_getinfo(curl, CURLINFO_PRIVATE, &pointer);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.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 curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
 +.BR CURLOPT_PRIVATE "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_PROTOCOL.3
index ff6546379,000000000..e8430e5e4
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, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_PROXYAUTH_AVAIL.3
index 5a5064e09,000000000..437d45b46
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_PROXYAUTH_AVAIL.3
+++ b/docs/libcurl/opts/GNURLINFO_PROXYAUTH_AVAIL.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PROXYAUTH_AVAIL 3 "12 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_PROXYAUTH_AVAIL \- get available HTTP proxy authentication methods
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXYAUTH_AVAIL, long 
*authp);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive a bitmask indicating the authentication
 +method(s) available according to the previous response. The meaning of the
 +bits is explained in the \fICURLOPT_PROXYAUTH(3)\fP option for
 +\fIcurl_easy_setopt(3)\fP.
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://127.0.0.1:80";);
 +
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* extract the available proxy authentication types */
 +    long auth;
 +    res = curl_easy_getinfo(curl, CURLINFO_PROXYAUTH_AVAIL, &auth);
 +    if(!res) {
 +      if(!auth)
 +        printf("No proxy auth available, perhaps no 407?\\n");
 +      else {
 +        printf("%s%s%s%s\\n",
 +               auth & CURLAUTH_BASIC ? "Basic ":"",
 +               auth & CURLAUTH_DIGEST ? "Digest ":"",
 +               auth & CURLAUTH_NEGOTIATE ? "Negotiate ":"",
 +               auth % CURLAUTH_NTLM ? "NTLM ":"");
 +      }
 +    }
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added RFC2617 in 7.10.8
 +Added RFC7616 in 7.57.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), "
diff --cc docs/libcurl/opts/GNURLINFO_PROXY_SSL_VERIFYRESULT.3
index 48d166c60,000000000..79da9ecb4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_PROXY_SSL_VERIFYRESULT.3
+++ b/docs/libcurl/opts/GNURLINFO_PROXY_SSL_VERIFYRESULT.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PROXY_SSL_VERIFYRESULT 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_PROXY_SSL_VERIFYRESULT \- get the result of the proxy certificate 
verification
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_PROXY_SSL_VERIFYRESULT, 
long *result);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the result of the certificate verification
 +that was requested (using the \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP
 +option. This is only used for HTTPS proxies.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  long verifyresult;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443";);
 +  res = curl_easy_perform(curl);
 +  curl_easy_getinfo(curl, CURLINFO_PROXY_SSL_VERIFYRESULT, &verifyresult);
 +  printf("The peer verification said %s\\n", verifyresult?
 +         "fine":"BAAAD");
 +  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 curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
 +.BR CURLINFO_SSL_VERIFYRESULT "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_REDIRECT_COUNT.3
index 9cdce3897,000000000..0a52d2016
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_REDIRECT_COUNT.3
+++ b/docs/libcurl/opts/GNURLINFO_REDIRECT_COUNT.3
@@@ -1,55 -1,0 +1,55 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_COUNT 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_REDIRECT_COUNT \- get the number of redirects
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_COUNT, long 
*countp);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the total number of redirections that were
 +actually followed.
 +.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    long redirects;
 +    curl_easy_getinfo(curl, CURLINFO_REDIRECT_COUNT, &redirects);
 +  }
 +  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), "
diff --cc docs/libcurl/opts/GNURLINFO_REDIRECT_TIME.3
index 26f3f5117,000000000..d26a346a3
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_REDIRECT_TIME_T.3
index 093bbae1f,000000000..168f5d180
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_REDIRECT_TIME_T.3
+++ b/docs/libcurl/opts/GNURLINFO_REDIRECT_TIME_T.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_T 3 "28 Apr 2018" "libcurl 7.61.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_REDIRECT_TIME_T \- get the time for all redirection steps
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_TIME_T, curl_off_t 
*timep);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_off_t to receive the total time, in microseconds,
 +it took for
 +all redirection steps include name lookup, connect, pretransfer and transfer
 +before final transaction was started. \fICURLINFO_REDIRECT_TIME_T\fP 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) {
 +  curl_off_t 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_T, &redirect);
 +    if(CURLE_OK == res) {
 +      printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", redirect / 1000000,
 +             (long)(redirect % 1000000));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.61.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), " CURLINFO_REDIRECT_TIME 
"(3)"
diff --cc docs/libcurl/opts/GNURLINFO_REDIRECT_URL.3
index 6ba66d726,000000000..9bf35eb30
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_REDIRECT_URL.3
+++ b/docs/libcurl/opts/GNURLINFO_REDIRECT_URL.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_URL 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_REDIRECT_URL \- get the URL a redirect would go to
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REDIRECT_URL, char **urlp);
 +.SH DESCRIPTION
 +Pass a pointer to a char pointer to receive the URL a redirect \fIwould\fP
 +take you to if you would enable \fICURLOPT_FOLLOWLOCATION(3)\fP. This can come
 +very handy if you think using the built-in libcurl redirect logic isn't good
 +enough for you but you would still prefer to avoid implementing all the magic
 +of figuring out the new URL.
 +
 +This URL is also set if the \fICURLOPT_MAXREDIRS(3)\fP limit prevented a
 +redirect to happen (since 7.54.1).
 +.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    char *url = NULL;
 +    curl_easy_getinfo(curl, CURLINFO_REDIRECT_URL, &url);
 +    if(url)
 +      printf("Redirect to: %s\\n", url);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.18.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_REQUEST_SIZE.3
index 33606b0dd,000000000..2f85ffba5
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_REQUEST_SIZE.3
+++ b/docs/libcurl/opts/GNURLINFO_REQUEST_SIZE.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_REQUEST_SIZE 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_REQUEST_SIZE \- get size of sent request
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_REQUEST_SIZE, long *sizep);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the total size of the issued
 +requests. This is so far only for HTTP requests. Note that this may be more
 +than one request if \fICURLOPT_FOLLOWLOCATION(3)\fP is enabled.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    long req;
 +    res = curl_easy_getinfo(curl, CURLINFO_REQUEST_SIZE, &req);
 +    if(!res)
 +      printf("Request size: %ld bytes\\n", req);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +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_HEADER_SIZE "(3), "
 +.BR CURLINFO_SIZE_DOWNLOAD "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_RESPONSE_CODE.3
index 9632fd837,000000000..e9ded3515
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 785c6b4df,000000000..eede14931
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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
++HTTP server suggests 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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_RTSP_CLIENT_CSEQ.3
index 2efeb618a,000000000..1f163187c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_RTSP_CLIENT_CSEQ.3
+++ b/docs/libcurl/opts/GNURLINFO_RTSP_CLIENT_CSEQ.3
@@@ -1,54 -1,0 +1,54 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_RTSP_CLIENT_CSEQ 3 "1 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_RTSP_CLIENT_CSEQ \- get the next RTSP client CSeq
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CLIENT_CSEQ, long 
*cseq);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the next CSeq that will be used by the
 +application.
 +.SH PROTOCOLS
 +RTSP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    long cseq;
 +    curl_easy_getinfo(curl, CURLINFO_RTSP_CLIENT_CSEQ, &cseq);
 +  }
 +  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 curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_RTSP_CSEQ_RECV.3
index added9c70,000000000..1ff4fd09f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_RTSP_CSEQ_RECV.3
+++ b/docs/libcurl/opts/GNURLINFO_RTSP_CSEQ_RECV.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_RTSP_CSEQ_RECV 3 "12 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_RTSP_CSEQ_RECV \- get the recently received CSeq
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_CSEQ_RECV, long *cseq);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the most recently received CSeq from the
 +server. If your application encounters a \fICURLE_RTSP_CSEQ_ERROR\fP then you
 +may wish to troubleshoot and/or fix the CSeq mismatch by peeking at this
 +value.
 +.SH PROTOCOLS
 +RTSP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    long cseq;
 +    curl_easy_getinfo(curl, CURLINFO_RTSP_CSEQ_RECV, &cseq);
 +  }
 +  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 curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_RTSP_SERVER_CSEQ.3
index 88abb0709,000000000..82b1a6b59
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_RTSP_SERVER_CSEQ.3
+++ b/docs/libcurl/opts/GNURLINFO_RTSP_SERVER_CSEQ.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_RTSP_SERVER_CSEQ 3 "1 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_RTSP_SERVER_CSEQ \- get the next RTSP server CSeq
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SERVER_CSEQ, long 
*cseq);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the next CSeq that will be expected by the
 +application.
 +
 +Llistening for server initiated requests is currently unimplemented!
 +
 +Applications wishing to resume an RTSP session on another connection should
 +retrieve this info before closing the active connection.
 +.SH PROTOCOLS
 +RTSP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    long cseq;
 +    curl_easy_getinfo(curl, CURLINFO_RTSP_SERVER_CSEQ, &cseq);
 +  }
 +  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 curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_RTSP_SESSION_ID.3
index c2a2df18e,000000000..dc66fee4c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_RTSP_SESSION_ID.3
+++ b/docs/libcurl/opts/GNURLINFO_RTSP_SESSION_ID.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_RTSP_SESSION_ID 3 "12 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_RTSP_SESSION_ID \- get RTSP session ID
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_RTSP_SESSION_ID, char **id);
 +.SH DESCRIPTION
 +Pass a pointer to a char pointer to receive a pointer to a string holding the
 +most recent RTSP Session ID.
 +
 +Applications wishing to resume an RTSP session on another connection should
 +retrieve this info before closing the active connection.
 +
 +The \fBid\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
 +RTSP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  curl_easy_setopt(curl, CURLOPT_URL, "rtsp://rtsp.example.com");
 +  res = curl_easy_perform(curl);
 +  if(res == CURLE_OK) {
 +    char *id;
 +    curl_easy_getinfo(curl, CURLINFO_RTSP_SESSION_ID, &id);
 +  }
 +  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 curl_easy_getinfo "(3), " curl_easy_setopt "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_SCHEME.3
index 13f0a023a,000000000..8c983d04d
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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.3
index f3c224fd6,000000000..d849103e3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SIZE_DOWNLOAD.3
+++ b/docs/libcurl/opts/GNURLINFO_SIZE_DOWNLOAD.3
@@@ -1,67 -1,0 +1,67 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_SIZE_DOWNLOAD \- get the number of downloaded bytes
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_DOWNLOAD, double *dlp);
 +.SH DESCRIPTION
 +Pass a pointer to a double 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.
 +
 +\fICURLINFO_SIZE_DOWNLOAD_T(3)\fP is a newer replacement that returns a more
 +sensible variable type.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    /* check the size */
 +    double dl;
 +    res = curl_easy_getinfo(curl, CURLINFO_SIZE_DOWNLOAD, &dl);
 +    if(!res) {
 +      printf("Downloaded %.0f bytes\\n", cl);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +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_SIZE_DOWNLOAD_T "(3), "
 +.BR CURLINFO_SIZE_UPLOAD_T "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_SIZE_DOWNLOAD_T.3
index bee15f477,000000000..ac17a10ec
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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.3
index 3915385ac,000000000..80e2cced5
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SIZE_UPLOAD.3
+++ b/docs/libcurl/opts/GNURLINFO_SIZE_UPLOAD.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_SIZE_UPLOAD \- get the number of uploaded bytes
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SIZE_UPLOAD, double 
*uploadp);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the total amount of bytes that were
 +uploaded.
 +
 +\fICURLINFO_SIZE_UPLOAD_T(3)\fP is a newer replacement that returns a more
 +sensible variable type.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    double ul;
 +    res = curl_easy_getinfo(curl, CURLINFO_SIZE_UPLOAD, &ul);
 +    if(!res) {
 +      printf("Uploaded %.0f bytes\\n", ul);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +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_SIZE_DOWNLOAD_T "(3), " CURLINFO_SIZE_UPLOAD_T "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_SIZE_UPLOAD_T.3
index d042d7d7e,000000000..727a01013
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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.3
index b30e1c183,000000000..93c5238d8
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SPEED_DOWNLOAD.3
+++ b/docs/libcurl/opts/GNURLINFO_SPEED_DOWNLOAD.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_SPEED_DOWNLOAD \- get download speed
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_DOWNLOAD, double 
*speed);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the average download speed that curl
 +measured for the complete download. Measured in bytes/second.
 +
 +\fICURLINFO_SPEED_DOWNLOAD_T(3)\fP is a newer replacement that returns a more
 +sensible variable type.
 +.SH PROTOCOLS
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    double speed;
 +    res = curl_easy_getinfo(curl, CURLINFO_SPEED_DOWNLOAD, &speed);
 +    if(!res) {
 +      printf("Download speed %.0f bytes/sec\\n", ul);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +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_SPEED_UPLOAD "(3), "
 +.BR CURLINFO_SIZE_UPLOAD_T "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_SPEED_DOWNLOAD_T.3
index 2c574b44e,000000000..f963d9029
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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.3
index 5ab3d92fe,000000000..775091e96
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SPEED_UPLOAD.3
+++ b/docs/libcurl/opts/GNURLINFO_SPEED_UPLOAD.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_SPEED_UPLOAD \- get upload speed
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SPEED_UPLOAD, double 
*speed);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the average upload speed that curl
 +measured for the complete upload. Measured in bytes/second.
 +
 +\fICURLINFO_SPEED_UPLOAD_T(3)\fP is a newer replacement that returns a more
 +sensible variable type.
 +.SH PROTOCOLS
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Perform the request */
 +  res = curl_easy_perform(curl);
 +
 +  if(!res) {
 +    double speed;
 +    res = curl_easy_getinfo(curl, CURLINFO_SPEED_UPLOAD, &speed);
 +    if(!res) {
 +      printf("Upload speed %.0f bytes/sec\\n", ul);
 +    }
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in
 +.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 "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_SPEED_UPLOAD_T.3
index 7959222d3,000000000..c8ada230a
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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/GNURLINFO_SSL_ENGINES.3
index 9a0120bdf,000000000..640cc0ebc
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SSL_ENGINES.3
+++ b/docs/libcurl/opts/GNURLINFO_SSL_ENGINES.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSL_ENGINES 3 "1 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_SSL_ENGINES \- get an slist of OpenSSL crypto-engines
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_ENGINES,
 +                           struct curl_slist **engine_list);
 +.SH DESCRIPTION
 +Pass the address of a 'struct curl_slist *' to receive a linked-list of
 +OpenSSL crypto-engines supported. Note that engines are normally implemented
 +in separate dynamic libraries. Hence not all the returned engines may be
 +available at run-time. \fBNOTE:\fP you must call \fIcurl_slist_free_all(3)\fP
 +on the list pointer once you're done with it, as libcurl will not free the
 +data for you.
 +.SH PROTOCOLS
 +All TLS based ones.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  struct curl_slist *engines;
 +  res = curl_easy_getinfo(curl, CURLINFO_SSL_ENGINES, &engines);
 +  if((res == CURLE_OK) && engines) {
 +    /* we have a list, free it when done using it */
 +    curl_slist_free_all(engines);
 +  }
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.12.3. Available in OpenSSL builds with "engine" support.
 +.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_SSL_VERIFYRESULT.3
index 5b4d64341,000000000..a71efe758
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_SSL_VERIFYRESULT.3
+++ b/docs/libcurl/opts/GNURLINFO_SSL_VERIFYRESULT.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSL_VERIFYRESULT 3 "1 Sep 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_SSL_VERIFYRESULT \- get the result of the certificate verification
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_SSL_VERIFYRESULT, long 
*result);
 +.SH DESCRIPTION
 +Pass a pointer to a long to receive the result of the server SSL certificate
 +verification that was requested (using the \fICURLOPT_SSL_VERIFYPEER(3)\fP
 +option).
 +
 +0 is a positive result. Non-zero is an error.
 +.SH PROTOCOLS
 +All using TLS
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  long verifyresult;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  res = curl_easy_perform(curl);
 +  curl_easy_getinfo(curl, CURLINFO_SSL_VERIFYRESULT, &verifyresult);
 +  printf("The peer verification said %s\\n", verifyresult?
 +         "BAAAD":"fine");
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.5. Only set by the OpenSSL/libressl/boringssl, NSS and GnuTLS 
backends.
 +.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_STARTTRANSFER_TIME.3
index 6ac4707c8,000000000..0335846f9
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_STARTTRANSFER_TIME.3
+++ b/docs/libcurl/opts/GNURLINFO_STARTTRANSFER_TIME.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_STARTTRANSFER_TIME 3 "28 Aug 2015" "libcurl 7.44.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_STARTTRANSFER_TIME \- get the time until the first byte is received
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME, double 
*timep);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the time, in seconds, it took from the
 +start until the first byte is received by libcurl. This includes
 +\fICURLINFO_PRETRANSFER_TIME(3)\fP and also the time the server needs to
 +calculate the result.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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 start;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME, &start);
 +    if(CURLE_OK == res) {
 +      printf("Time: %.1f", start);
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.9.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), " 
CURLINFO_STARTTRANSFER_TIME_T "(3)"
diff --cc docs/libcurl/opts/GNURLINFO_STARTTRANSFER_TIME_T.3
index db71fd8e2,000000000..da8e17e9e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_STARTTRANSFER_TIME_T.3
+++ b/docs/libcurl/opts/GNURLINFO_STARTTRANSFER_TIME_T.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_STARTTRANSFER_TIME_T 3 "28 Apr 2018" "libcurl 7.61.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_STARTTRANSFER_TIME_T \- get the time until the first byte is received
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_STARTTRANSFER_TIME_T, 
curl_off_t *timep);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_off_t to receive the time, in microseconds,
 +it took from the
 +start until the first byte is received by libcurl. This includes
 +\fICURLINFO_PRETRANSFER_TIME_T(3)\fP and also the time the server needs to
 +calculate the result.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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) {
 +  curl_off_t start;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_STARTTRANSFER_TIME_T, &start);
 +    if(CURLE_OK == res) {
 +      printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", start / 1000000,
 +             (long)(start % 1000000));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.61.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), " 
CURLINFO_STARTTRANSFER_TIME "(3)"
diff --cc docs/libcurl/opts/GNURLINFO_TLS_SESSION.3
index 293fb0217,000000000..0ad56e4ab
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_TLS_SESSION.3
+++ b/docs/libcurl/opts/GNURLINFO_TLS_SESSION.3
@@@ -1,70 -1,0 +1,70 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TLS_SESSION 3 "12 Sep 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_TLS_SESSION \- get TLS session info
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION,
 +                           struct curl_tlssessioninfo **session);
 +.SH DESCRIPTION
 +\fBThis option has been superseded\fP by \fICURLINFO_TLS_SSL_PTR(3)\fP which
 +was added in 7.48.0. The only reason you would use this option instead is if
 +you could be using a version of libcurl earlier than 7.48.0.
 +
 +This option is exactly the same as \fICURLINFO_TLS_SSL_PTR(3)\fP except in the
 +case of OpenSSL. If the session \fIbackend\fP is CURLSSLBACKEND_OPENSSL the
 +session \fIinternals\fP pointer varies depending on the option:
 +
 +CURLINFO_TLS_SESSION OpenSSL session \fIinternals\fP is SSL_CTX *.
 +
 +CURLINFO_TLS_SSL_PTR OpenSSL session \fIinternals\fP is SSL *.
 +
 +You can obtain an SSL_CTX pointer from an SSL pointer using OpenSSL function
 +SSL_get_SSL_CTX. Therefore unless you need compatibility with older versions 
of
 +libcurl use \fICURLINFO_TLS_SSL_PTR(3)\fP. Refer to that document for more
 +information.
 +.SH PROTOCOLS
 +All TLS-based
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode res;
 +  struct curl_tlssessioninfo *tls;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  res = curl_easy_perform(curl);
 +  curl_easy_getinfo(curl, CURLINFO_TLS_SESSION, &tls);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.34.0, and supported OpenSSL, GnuTLS, NSS and gskit only up until
 +7.48.0 was released.
 +.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_TLS_SSL_PTR "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_TLS_SSL_PTR.3
index c4674e75b,000000000..99129fb77
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_TLS_SSL_PTR.3
+++ b/docs/libcurl/opts/GNURLINFO_TLS_SSL_PTR.3
@@@ -1,168 -1,0 +1,168 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TLS_SSL_PTR 3 "23 Feb 2016" "libcurl 7.48.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_TLS_SESSION, CURLINFO_TLS_SSL_PTR \- get TLS session info
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SSL_PTR,
 +                           struct curl_tlssessioninfo **session);
 +
 +/* if you need compatibility with libcurl < 7.48.0 use
 +   CURLINFO_TLS_SESSION instead: */
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TLS_SESSION,
 +                           struct curl_tlssessioninfo **session);
 +.SH DESCRIPTION
 +Pass a pointer to a 'struct curl_tlssessioninfo *'.  The pointer will be
 +initialized to refer to a 'struct curl_tlssessioninfo *' that will contain an
 +enum indicating the SSL library used for the handshake and a pointer to the
 +respective internal TLS session structure of this underlying SSL library.
 +
 +This option may be useful for example to extract certificate information in a
 +format convenient for further processing, such as manual validation. Refer to
 +the \fBLIMITATIONS\fP section.
 +
 +.nf
 +struct curl_tlssessioninfo {
 +  curl_sslbackend backend;
 +  void *internals;
 +};
 +.fi
 +
 +The \fIbackend\fP struct member is one of the defines in the CURLSSLBACKEND_*
 +series: CURLSSLBACKEND_NONE (when built without TLS support),
 +CURLSSLBACKEND_WOLFSSL, CURLSSLBACKEND_SECURETRANSPORT, CURLSSLBACKEND_GNUTLS,
 +CURLSSLBACKEND_GSKIT, CURLSSLBACKEND_MBEDTLS, CURLSSLBACKEND_NSS,
 +CURLSSLBACKEND_OPENSSL, CURLSSLBACKEND_SCHANNEL or
 +CURLSSLBACKEND_MESALINK. (Note that the OpenSSL forks are all reported as just
 +OpenSSL here.)
 +
 +The \fIinternals\fP struct member will point to a TLS library specific pointer
 +for the active ("in use") SSL connection, with the following underlying types:
 +.RS
 +.IP GnuTLS
 +gnutls_session_t
 +.IP gskit
 +gsk_handle
 +.IP NSS
 +PRFileDesc *
 +.IP OpenSSL
 +CURLINFO_TLS_SESSION: SSL_CTX *
 +
 +CURLINFO_TLS_SSL_PTR: SSL *
 +.RE
 +Since 7.48.0 the \fIinternals\fP member can point to these other SSL backends
 +as well:
 +.RS
 +.IP mbedTLS
 +mbedtls_ssl_context *
 +.IP "Secure Channel"
 +CtxtHandle *
 +.IP "Secure Transport"
 +SSLContext *
 +.IP "wolfSSL"
 +SSL *
 +.IP "MesaLink"
 +SSL *
 +.RE
 +
 +If the \fIinternals\fP pointer is NULL then either the SSL backend is not
 +supported, an SSL session has not yet been established or the connection is no
 +longer associated with the easy handle (eg curl_easy_perform has returned).
 +.SH LIMITATIONS
 +This option has some limitations that could make it unsafe when it comes to
 +the manual verification of certificates.
 +
 +This option only retrieves the first in-use SSL session pointer for your easy
 +handle, however your easy handle may have more than one in-use SSL session if
 +using FTP over SSL. That is because the FTP protocol has a control channel and
 +a data channel and one or both may be over SSL. Currently there is no way to
 +retrieve a second in-use SSL session associated with an easy handle.
 +
 +This option has not been thoroughly tested with plaintext protocols that can
 +be upgraded/downgraded to/from SSL: FTP, SMTP, POP3, IMAP when used with
 +\fICURLOPT_USE_SSL(3)\fP. Though you will be able to retrieve the SSL pointer,
 +it's possible that before you can do that data (including auth) may have
 +already been sent over a connection after it was upgraded.
 +
 +Renegotiation. If unsafe renegotiation or renegotiation in a way that the
 +certificate is allowed to change is allowed by your SSL library this may occur
 +and the certificate may change, and data may continue to be sent or received
 +after renegotiation but before you are able to get the (possibly) changed SSL
 +pointer, with the (possibly) changed certificate information.
 +
 +If you are using OpenSSL or wolfSSL then \fICURLOPT_SSL_CTX_FUNCTION(3)\fP can
 +be used to set a certificate verification callback in the CTX. That is safer
 +than using this option to poll for certificate changes and doesn't suffer from
 +any of the problems above. There is currently no way in libcurl to set a
 +verification callback for the other SSL backends.
 +
 +How are you using this option? Are you affected by any of these limitations?
 +Please let us know by making a comment at
 +https://github.com/curl/curl/issues/685
 +.SH PROTOCOLS
 +All TLS-based
 +.SH EXAMPLE
 +.nf
 +#include <gnurl/curl.h>
 +#include <openssl/ssl.h>
 +
 +CURL *curl;
 +static size_t wf(void *ptr, size_t size, size_t nmemb, void *stream)
 +{
 +  const struct curl_tlssessioninfo *info = NULL;
 +  CURLcode res = curl_easy_getinfo(curl, CURLINFO_TLS_SSL_PTR, &info);
 +  if(info && !res) {
 +    if(CURLSSLBACKEND_OPENSSL == info->backend) {
 +       printf("OpenSSL ver. %s\\n", SSL_get_version((SSL*)info->internals));
 +    }
 +  }
 +  return size * nmemb;
 +}
 +
 +int main(int argc, char** argv)
 +{
 +  CURLcode res;
 +  curl = curl_easy_init();
 +  if(curl) {
 +    curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, wf);
 +    res = curl_easy_perform(curl);
 +    curl_easy_cleanup(curl);
 +  }
 +  return res;
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.48.0.
 +
 +This option supersedes \fICURLINFO_TLS_SESSION(3)\fP which was added in 
7.34.0.
 +This option is exactly the same as that option except in the case of OpenSSL.
 +.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_TLS_SESSION "(3), "
diff --cc docs/libcurl/opts/GNURLINFO_TOTAL_TIME.3
index bab982cdc,000000000..54d334b2a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_TOTAL_TIME.3
+++ b/docs/libcurl/opts/GNURLINFO_TOTAL_TIME.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TOTAL_TIME 3 "28 Aug 2015" "libcurl 7.44.0" "curl_easy_getinfo 
options"
 +.SH NAME
 +CURLINFO_TOTAL_TIME \- get total time of previous transfer
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME, double *timep);
 +.SH DESCRIPTION
 +Pass a pointer to a double to receive the total time in seconds for the
 +previous transfer, including name resolving, TCP connect etc. The double
 +represents the time in seconds, including fractions.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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 total;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME, &total);
 +    if(CURLE_OK == res) {
 +      printf("Time: %.1f", total);
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +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), " CURLINFO_TOTAL_TIME_T 
"(3)"
diff --cc docs/libcurl/opts/GNURLINFO_TOTAL_TIME_T.3
index 70cd7e567,000000000..330cd34ca
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLINFO_TOTAL_TIME_T.3
+++ b/docs/libcurl/opts/GNURLINFO_TOTAL_TIME_T.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 2018 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TOTAL_TIME_T 3 "28 Apr 2018" "libcurl 7.61.0" 
"curl_easy_getinfo options"
 +.SH NAME
 +CURLINFO_TOTAL_TIME_T \- get total time of previous transfer in microseconds
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_getinfo(CURL *handle, CURLINFO_TOTAL_TIME_T, curl_off_t 
*timep);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_off_t to receive the total time in microseconds
 +for the previous transfer, including name resolving, TCP connect etc.
 +The curl_off_t represents the time in microseconds.
 +
 +When a redirect is followed, the time from each request is added together.
 +
 +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) {
 +  curl_off_t total;
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_TOTAL_TIME_T, &total);
 +    if(CURLE_OK == res) {
 +      printf("Time: %" CURL_FORMAT_CURL_OFF_T ".%06ld", total / 1000000,
 +             (long)(total % 1000000));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.61.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), " CURLINFO_TOTAL_TIME 
"(3)"
diff --cc docs/libcurl/opts/GNURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
index 4da4fed01,000000000..e30fd84e3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
+++ b/docs/libcurl/opts/GNURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3
@@@ -1,54 -1,0 +1,54 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CHUNK_LENGTH_PENALTY_SIZE 3 "4 Nov 2014" "libcurl 7.39.0" 
"curl_multi_setopt options"
 +.SH NAME
 +CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE \- chunk length threshold for pipelining
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, 
CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, long size);
 +.SH DESCRIPTION
 +No function since pipelining was removed in 7.62.0.
 +
 +Pass a long with a \fBsize\fP in bytes. If a pipelined connection is currently
 +processing a chunked (Transfer-encoding: chunked) request with a current chunk
 +length larger than \fICURLMOPT_CHUNK_LENGTH_PENALTY_SIZE(3)\fP, that pipeline
 +will not be considered for additional requests, even if it is shorter than
 +\fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
 +.SH DEFAULT
 +The default value is 0, which means that the penalization is inactive.
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURLM *m = curl_multi_init();
 +long maxchunk = 10000;
 +curl_multi_setopt(m, CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, maxchunk);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.30.0
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE "(3), "
 +.BR CURLMOPT_MAX_PIPELINE_LENGTH "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
index 884cb1d72,000000000..3c9201c6d
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
+++ b/docs/libcurl/opts/GNURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3
@@@ -1,53 -1,0 +1,53 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CONTENT_LENGTH_PENALTY_SIZE 3 "4 Nov 2014" "libcurl 7.39.0" 
"curl_multi_setopt options"
 +.SH NAME
 +CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE \- size threshold for pipelining penalty
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, 
CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, long size);
 +.SH DESCRIPTION
 +No function since pipelining was removed in 7.62.0.
 +
 +Pass a long with a \fBsize\fP in bytes. If a pipelined connection is currently
 +processing a request with a Content-Length larger than this
 +\fICURLMOPT_CONTENT_LENGTH_PENALTY_SIZE(3)\fP, that pipeline will then not be
 +considered for additional requests, even if it is shorter than
 +\fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
 +.SH DEFAULT
 +The default value is 0, which means that the size penalization is inactive.
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURLM *m = curl_multi_init();
 +long maxlength = 10000;
 +curl_multi_setopt(m, CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, maxlength);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.30.0
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_MAXCONNECTS.3
index 942918aca,000000000..14cc849fa
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAX_CONCURRENT_STREAMS.3
index 3e59209ad,000000000..ced56abfd
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_MAX_CONCURRENT_STREAMS.3
+++ b/docs/libcurl/opts/GNURLMOPT_MAX_CONCURRENT_STREAMS.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.Dd November 06, 2019
 +.Dt GNURLMOPT_MAX_CONCURRENT_STREAMS 3
 +.Os
 +.Sh NAME
 +.Nm CURLMOPT_MAX_CONCURRENT_STREAMS ,
 +.Nm curl_multi_setopt
 +.Nd set max concurrent streams for http2
 +.Sh LIBRARY
 +.Lb libgnurl
 +.Sh SYNOPSIS
 +.In gnurl/curl.h
 +.Ft CURLMcode
 +.Fn curl_multi_setopt "CURLM *handle" "CURLMOPT_MAX_CONCURRENT_STREAMS" "long 
max"
 +.Sh DESCRIPTION
 +Pass a long indicating the
 +.Fa max .
 +The set number will be used as the
 +maximum number of concurrent streams for a connections that libcurl should
 +support on connections done using HTTP/2.
 +Valid values range from 1 to 2147483647 (2^31 - 1) and defaults to 100.  The
 +value passed here would be honoured based on other system resources
 +properties.
 +.Sh DEFAULT
 +100
 +.Sh PROTOCOLS
 +All
 +.Sh EXAMPLES
 +.Bd -literal -offset indent
 +CURLM *m = curl_multi_init();
 +/* max concurrent streams 200 */
 +curl_multi_setopt(m, CURLMOPT_MAX_CONCURRENT_STREAMS, 200L);
 +.Ed
 +.Sh HISTORY
 +.Nm
 +first appeared in in curl 7.67.0.
 +.Sh RETURN VALUES
 +Returns
 +.Va CURLM_OK
 +if the option is supported, and
 +.Va CURLM_UNKNOWN_OPTION
 +if not.
 +.Sh SEE ALSO
 +.Xr GNURLOPT_MAXCONNECTS 3 ,
 +.Xr GNURLMOPT_MAXCONNECTS 3
diff --cc docs/libcurl/opts/GNURLMOPT_MAX_HOST_CONNECTIONS.3
index 13455c71b,000000000..d2b9290c7
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_MAX_HOST_CONNECTIONS.3
+++ b/docs/libcurl/opts/GNURLMOPT_MAX_HOST_CONNECTIONS.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAX_HOST_CONNECTIONS 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_multi_setopt options"
 +.SH NAME
 +CURLMOPT_MAX_HOST_CONNECTIONS \- set max number of connections to a single 
host
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_HOST_CONNECTIONS, 
long max);
 +.SH DESCRIPTION
 +Pass a long to indicate \fBmax\fP. The set number will be used as the maximum
 +amount of simultaneously open connections to a single host (a host being the
 +same as a host name + port number pair). For each new session to a host,
 +libcurl will open a new connection up to the limit set by
 +\fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP. When the limit is reached, the
 +sessions will be pending until a connection becomes available. If
 +\fICURLMOPT_PIPELINING(3)\fP is enabled, libcurl will try to pipeline if the
 +host is capable of it.
 +
 +The default \fBmax\fP value is 0, unlimited.  However, for backwards
 +compatibility, setting it to 0 when \fICURLMOPT_PIPELINING(3)\fP is 1 will not
 +be treated as unlimited. Instead it will open only 1 connection and try to
 +pipeline on it.
 +
 +This set limit is also used for proxy connections, and then the proxy is
 +considered to be the host for which this limit counts.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURLM *m = curl_multi_init();
 +/* do no more than 2 connections per host */
 +curl_multi_setopt(m, CURLMOPT_MAX_HOST_CONNECTIONS, 2L);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.30.0
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_MAXCONNECTS "(3), " CURLMOPT_MAX_TOTAL_CONNECTIONS "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_MAX_PIPELINE_LENGTH.3
index 63a856a3b,000000000..de0d7095f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_MAX_PIPELINE_LENGTH.3
+++ b/docs/libcurl/opts/GNURLMOPT_MAX_PIPELINE_LENGTH.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAX_PIPELINE_LENGTH 3 "4 Nov 2014" "libcurl 7.39.0" 
"curl_multi_setopt options"
 +.SH NAME
 +CURLMOPT_MAX_PIPELINE_LENGTH \- maximum number of requests in a pipeline
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_PIPELINE_LENGTH, long 
max);
 +.SH DESCRIPTION
 +No function since pipelining was removed in 7.62.0.
 +
 +Pass a long. The set \fBmax\fP number will be used as the maximum amount of
 +outstanding requests in an HTTP/1.1 pipelined connection. This option is only
 +used for HTTP/1.1 pipelining, not for HTTP/2 multiplexing.
 +
 +When this limit is reached, libcurl will use another connection to the same
 +host (see \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP), or queue the request until
 +one of the pipelines to the host is ready to accept a request.  Thus, the
 +total number of requests in-flight is \fICURLMOPT_MAX_HOST_CONNECTIONS(3)\fP *
 +\fICURLMOPT_MAX_PIPELINE_LENGTH(3)\fP.
 +.SH DEFAULT
 +5
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURLM *m = curl_multi_init();
 +/* set a more conservative pipe length */
 +curl_multi_setopt(m, CURLMOPT_MAX_PIPELINE_LENGTH, 3L);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.30.0
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_MAX_TOTAL_CONNECTIONS.3
index 733ba0293,000000000..45733cd6f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_MAX_TOTAL_CONNECTIONS.3
+++ b/docs/libcurl/opts/GNURLMOPT_MAX_TOTAL_CONNECTIONS.3
@@@ -1,54 -1,0 +1,54 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAX_TOTAL_CONNECTIONS 3 "4 Nov 2014" "libcurl 7.39.0" 
"curl_multi_setopt options"
 +.SH NAME
 +CURLMOPT_MAX_TOTAL_CONNECTIONS \- max simultaneously open connections
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_MAX_TOTAL_CONNECTIONS, 
long amount);
 +.SH DESCRIPTION
 +Pass a long for the \fBamount\fP. The set number will be used as the maximum
 +number of simultaneously open connections in total using this multi
 +handle. For each new session, libcurl will open a new connection up to the
 +limit set by \fICURLMOPT_MAX_TOTAL_CONNECTIONS(3)\fP. When the limit is
 +reached, the sessions will be pending until there are available
 +connections. If \fICURLMOPT_PIPELINING(3)\fP is enabled, libcurl will try to
 +pipeline or use multiplexing if the host is capable of it.
 +.SH DEFAULT
 +The default value is 0, which means that there is no limit. It is then simply
 +controlled by the number of easy handles added.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURLM *m = curl_multi_init();
 +/* never do more than 15 connections */
 +curl_multi_setopt(m, CURLMOPT_MAX_TOTAL_CONNECTIONS, 15L);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.30.0
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_MAXCONNECTS "(3), " CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_PIPELINING.3
index 95d0aad05,000000000..3e71a23e4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_PIPELINING.3
+++ b/docs/libcurl/opts/GNURLMOPT_PIPELINING.3
@@@ -1,89 -1,0 +1,89 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PIPELINING 3 "17 Jun 2014" "libcurl 7.37.0" "curl_multi_setopt 
options"
 +.SH NAME
 +CURLMOPT_PIPELINING \- enable HTTP pipelining and multiplexing
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING, long bitmask);
 +.SH DESCRIPTION
 +Pass in the \fBbitmask\fP parameter to instruct libcurl to enable HTTP
 +pipelining and/or HTTP/2 multiplexing for this multi handle.
 +
 +When enabled, libcurl will attempt to use those protocol features when doing
 +parallel requests to the same hosts.
 +
 +For pipelining, this means that if you add a second request that can use an
 +already existing connection, the second request will be \&"piped" on the same
 +connection rather than being executed in parallel.
 +
 +For multiplexing, this means that follow-up requests can re-use an existing
 +connection and send the new request multiplexed over that at the same time as
 +other transfers are already using that single connection.
 +
 +There are several other related options that are interesting to tweak and
 +adjust to alter how libcurl spreads out requests on different connections or
 +not etc.
 +
 +Before 7.43.0, this option was set to 1 and 0 to enable and disable HTTP/1.1
 +pipelining.
 +
 +Starting in 7.43.0, \fBbitmask\fP's second bit also has a meaning, and you can
 +ask for pipelining and multiplexing independently of each other by toggling
 +the correct bits.
 +.IP CURLPIPE_NOTHING (0)
 +Default, which means doing no attempts at pipelining or multiplexing.
 +.IP CURLPIPE_HTTP1 (1)
 +If this bit is set, libcurl will try to pipeline HTTP/1.1 requests on
 +connections that are already established and in use to hosts.
 +
 +This bit is deprecated and has no effect since version 7.62.0.
 +.IP CURLPIPE_MULTIPLEX (2)
 +If this bit is set, libcurl will try to multiplex the new transfer over an
 +existing connection if possible. This requires HTTP/2.
 +.SH DEFAULT
 +Since 7.62.0, \fBCURLPIPE_MULTIPLEX\fP is enabled by default.
 +
 +Before that, default was \fBCURLPIPE_NOTHING\fP.
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURLM *m = curl_multi_init();
 +/* try HTTP/2 multiplexing */
 +curl_multi_setopt(m, CURLMOPT_PIPELINING, CURLPIPE_MULTIPLEX);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.0. Multiplex support bit added in 7.43.0. HTTP/1 Pipelining
 +support was disabled in 7.62.0.
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_MAX_PIPELINE_LENGTH "(3), "
 +.BR CURLMOPT_PIPELINING_SITE_BL "(3), "
 +.BR CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE "(3), "
 +.BR CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE "(3), "
 +.BR CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
 +.BR CURLMOPT_MAXCONNECTS "(3), "
 +.BR CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_PIPELINING_SERVER_BL.3
index 46bce5f63,000000000..47c142854
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_PIPELINING_SERVER_BL.3
+++ b/docs/libcurl/opts/GNURLMOPT_PIPELINING_SERVER_BL.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PIPELINING_SERVER_BL 3 "4 Nov 2014" "libcurl 7.39.0" 
"curl_multi_setopt options"
 +.SH NAME
 +CURLMOPT_PIPELINING_SERVER_BL \- pipelining server block list
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SERVER_BL, 
char **servers);
 +.SH DESCRIPTION
 +No function since pipelining was removed in 7.62.0.
 +
 +Pass a \fBservers\fP array of char *, ending with a NULL entry. This is a list
 +of server types prefixes (in the Server: HTTP header) that are blocked from
 +pipelining, i.e server types that are known to not support HTTP
 +pipelining. The array is copied by libcurl.
 +
 +Note that the comparison matches if the Server: header begins with the string
 +in the block list, i.e "Server: Ninja 1.2.3" and "Server: Ninja 1.4.0" can
 +both be blocked by having "Ninja" in the list.
 +
 +Pass a NULL pointer to clear the block list.
 +.SH DEFAULT
 +The default value is NULL, which means that there is no block list.
 +.SH PROTOCOLS
 +.SH EXAMPLE
 +.nf
 +  char *server_block_list[] =
 +  {
 +    "Microsoft-IIS/6.0",
 +    "nginx/0.8.54",
 +    NULL
 +  };
 +
 +  curl_multi_setopt(m, CURLMOPT_PIPELINING_SERVER_BL, server_block_list);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.30.0
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_PIPELINING_SITE_BL "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_PIPELINING_SITE_BL.3
index ab42861e3,000000000..5856d43a1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_PIPELINING_SITE_BL.3
+++ b/docs/libcurl/opts/GNURLMOPT_PIPELINING_SITE_BL.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PIPELINING_SITE_BL 3 "4 Nov 2014" "libcurl 7.39.0" 
"curl_multi_setopt options"
 +.SH NAME
 +CURLMOPT_PIPELINING_SITE_BL \- pipelining host block list
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PIPELINING_SITE_BL, char 
**hosts);
 +.SH DESCRIPTION
 +No function since pipelining was removed in 7.62.0.
 +
 +Pass a \fBhosts\fP array of char *, ending with a NULL entry. This is a list
 +of sites that are blocked from pipelining, i.e sites that are known to not
 +support HTTP pipelining. The array is copied by libcurl.
 +
 +Pass a NULL pointer to clear the block list.
 +.SH DEFAULT
 +The default value is NULL, which means that there is no block list.
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +  char *site_block_list[] =
 +  {
 +    "www.haxx.se",
 +    "www.example.com:1234",
 +    NULL
 +  };
 +
 +  curl_multi_setopt(m, CURLMOPT_PIPELINING_SITE_BL, site_block_list);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.30.0
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_PIPELINING_SERVER_BL "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_PUSHDATA.3
index 82ec928ae,000000000..5f6586a5c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_PUSHDATA.3
+++ b/docs/libcurl/opts/GNURLMOPT_PUSHDATA.3
@@@ -1,79 -1,0 +1,79 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PUSHDATA 3 "1 Jun 2015" "libcurl 7.44.0" "curl_multi_setopt 
options"
 +.SH NAME
 +CURLMOPT_PUSHDATA \- pointer to pass to push callback
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_PUSHDATA, void *pointer);
 +.fi
 +.SH DESCRIPTION
 +Set \fIpointer\fP to pass as the last argument to the
 +\fICURLMOPT_PUSHFUNCTION(3)\fP callback. The pointer will not be touched or
 +used by libcurl itself, only passed on to the callback function.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP(S)
 +.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_PUSHFUNCTION "(3), " CURLMOPT_PIPELINING "(3), "
 +.BR CURLOPT_PIPEWAIT "(3), "
 +.BR RFC 7540
diff --cc docs/libcurl/opts/GNURLMOPT_PUSHFUNCTION.3
index b9d5efcdc,000000000..5c15f9973
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_PUSHFUNCTION.3
+++ b/docs/libcurl/opts/GNURLMOPT_PUSHFUNCTION.3
@@@ -1,136 -1,0 +1,136 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 "CURL_PUSH_ERROROUT (2)"
 +Returning this will reject the pushed stream and return an error back on the
 +parent stream making it get closed with an error. (Added in curl 7.72.0)
 +.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/GNURLMOPT_SOCKETDATA.3
index 10bff8bd7,000000000..2f1a9a1cc
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_SOCKETDATA.3
+++ b/docs/libcurl/opts/GNURLMOPT_SOCKETDATA.3
@@@ -1,76 -1,0 +1,76 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SOCKETDATA 3 "3 Nov 2014" "libcurl 7.39.0" "curl_multi_setopt 
options"
 +.SH NAME
 +CURLMOPT_SOCKETDATA \- custom pointer passed to the socket callback
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETDATA, void 
*pointer);
 +.SH DESCRIPTION
 +A data \fIpointer\fP to pass to the socket callback set with the
 +\fICURLMOPT_SOCKETFUNCTION(3)\fP option.
 +
 +This pointer will not be touched by libcurl but will only be passed in to the
 +socket callbacks's \fBuserp\fP argument.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
 +{
 +  GlobalInfo *g = (GlobalInfo*) cbp;
 +  SockInfo *fdp = (SockInfo*) sockp;
 +
 +  if(what == CURL_POLL_REMOVE) {
 +    remsock(fdp);
 +  }
 +  else {
 +    if(!fdp) {
 +      addsock(s, e, what, g);
 +    }
 +    else {
 +      setsock(fdp, s, e, what, g);
 +    }
 +  }
 +  return 0;
 +}
 +
 +main()
 +{
 +  GlobalInfo setup;
 +  /* ... use socket callback and custom pointer */
 +  curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, sock_cb);
 +  curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, &setup);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.4
 +.SH RETURN VALUE
 +Returns CURLM_OK.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_SOCKETFUNCTION "(3), " curl_multi_socket_action "(3), "
 +.BR CURLMOPT_TIMERFUNCTION "(3) "
diff --cc docs/libcurl/opts/GNURLMOPT_SOCKETFUNCTION.3
index cd7b49dce,000000000..dd70220b4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_SOCKETFUNCTION.3
+++ b/docs/libcurl/opts/GNURLMOPT_SOCKETFUNCTION.3
@@@ -1,110 -1,0 +1,110 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SOCKETFUNCTION 3 "3 Nov 2016" "libcurl 7.39.0" 
"curl_multi_setopt options"
 +.SH NAME
 +CURLMOPT_SOCKETFUNCTION \- callback informed about what to wait for
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +int socket_callback(CURL *easy,      /* easy handle */
 +                    curl_socket_t s, /* socket */
 +                    int what,        /* describes the socket */
 +                    void *userp,     /* private callback pointer */
 +                    void *socketp);  /* private socket pointer */
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_SOCKETFUNCTION, 
socket_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +When the \fIcurl_multi_socket_action(3)\fP function is called, it informs the
 +application about updates in the socket (file descriptor) status by doing
 +none, one, or multiple calls to the \fBsocket_callback\fP. The callback
 +function gets status updates with changes since the previous time the callback
 +was called. If the given callback pointer is set to NULL, no callback will be
 +called.
 +.SH "CALLBACK ARGUMENTS"
 +\fIeasy\fP identifies the specific transfer for which this update is related.
 +
 +\fIs\fP is the specific socket this function invocation concerns. If the
 +\fBwhat\fP argument is not CURL_POLL_REMOVE then it holds information about
 +what activity on this socket the application is supposed to
 +monitor. Subsequent calls to this callback might update the \fBwhat\fP bits
 +for a socket that is already monitored.
 +
 +\fBuserp\fP is set with \fICURLMOPT_SOCKETDATA(3)\fP.
 +
 +\fBsocketp\fP is set with \fIcurl_multi_assign(3)\fP or will be NULL.
 +
 +The \fBwhat\fP parameter informs the callback on the status of the given
 +socket. It can hold one of these values:
 +.IP CURL_POLL_IN
 +Wait for incoming data. For the socket to become readable.
 +.IP CURL_POLL_OUT
 +Wait for outgoing data. For the socket to become writable.
 +.IP CURL_POLL_INOUT
 +Wait for incoming and outgoing data. For the socket to become readable or
 +writable.
 +.IP CURL_POLL_REMOVE
 +The specified socket/file descriptor is no longer used by libcurl.
 +.SH DEFAULT
 +NULL (no callback)
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +static int sock_cb(CURL *e, curl_socket_t s, int what, void *cbp, void *sockp)
 +{
 +  GlobalInfo *g = (GlobalInfo*) cbp;
 +  SockInfo *fdp = (SockInfo*) sockp;
 +
 +  if(what == CURL_POLL_REMOVE) {
 +    remsock(fdp);
 +  }
 +  else {
 +    if(!fdp) {
 +      addsock(s, e, what, g);
 +    }
 +    else {
 +      setsock(fdp, s, e, what, g);
 +    }
 +  }
 +  return 0;
 +}
 +
 +main()
 +{
 +  GlobalInfo setup;
 +  /* ... use socket callback and custom pointer */
 +  curl_multi_setopt(multi, CURLMOPT_SOCKETFUNCTION, sock_cb);
 +  curl_multi_setopt(multi, CURLMOPT_SOCKETDATA, &setup);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.4
 +.SH RETURN VALUE
 +Returns CURLM_OK.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_SOCKETDATA "(3), " curl_multi_socket_action "(3), "
 +.BR CURLMOPT_TIMERFUNCTION "(3) "
diff --cc docs/libcurl/opts/GNURLMOPT_TIMERDATA.3
index 29ad19160,000000000..0e54ed23c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_TIMERDATA.3
+++ b/docs/libcurl/opts/GNURLMOPT_TIMERDATA.3
@@@ -1,82 -1,0 +1,82 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TIMERDATA 3 "17 Jun 2014" "libcurl 7.37.0" "curl_multi_setopt 
options"
 +.SH NAME
 +CURLMOPT_TIMERDATA \- custom pointer to pass to timer callback
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERDATA, void *pointer);
 +.SH DESCRIPTION
 +A data \fBpointer\fP to pass to the timer callback set with the
 +\fICURLMOPT_TIMERFUNCTION(3)\fP option.
 +
 +This pointer will not be touched by libcurl but will only be passed in to the
 +timer callbacks's \fBuserp\fP argument.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +static gboolean timeout_cb(gpointer user_data)
 +{
 +  int running;
 +  if(user_data) {
 +    g_free(user_data);
 +    curl_multi_setopt(curl_handle, CURLMOPT_TIMERDATA, NULL);
 +  }
 +  curl_multi_socket_action(multi, CURL_SOCKET_TIMEOUT, 0, &running);
 +  return G_SOURCE_REMOVE;
 +}
 +
 +static int timerfunc(CURLM *multi, long timeout_ms, void *userp)
 +{
 +  guint *id = userp;
 +
 +  if(id)
 +    g_source_remove(*id);
 +
 +  /* -1 means we should just delete our timer. */
 +  if(timeout_ms == -1) {
 +    g_free(id);
 +    id = NULL;
 +  }
 +  else {
 +    if(!id)
 +      id = g_new(guint, 1);
 +    *id = g_timeout_add(timeout_ms, timeout_cb, id);
 +  }
 +  curl_multi_setopt(multi, CURLMOPT_TIMERDATA, id);
 +  return 0;
 +}
 +
 +curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.0
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_TIMERFUNCTION "(3), " CURLMOPT_SOCKETFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLMOPT_TIMERFUNCTION.3
index 1e2d64862,000000000..46d5b5157
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLMOPT_TIMERFUNCTION.3
+++ b/docs/libcurl/opts/GNURLMOPT_TIMERFUNCTION.3
@@@ -1,107 -1,0 +1,107 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TIMERFUNCTION 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_multi_setopt options"
 +.SH NAME
 +CURLMOPT_TIMERFUNCTION \- set callback to receive timeout values
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +int timer_callback(CURLM *multi,    /* multi handle */
 +                   long timeout_ms, /* timeout in number of ms */
 +                   void *userp);    /* private callback pointer */
 +
 +CURLMcode curl_multi_setopt(CURLM *handle, CURLMOPT_TIMERFUNCTION, 
timer_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +Certain features, such as timeouts and retries, require you to call libcurl
 +even when there is no activity on the file descriptors.
 +
 +Your callback function \fBtimer_callback\fP should install a non-repeating
 +timer with an interval of \fBtimeout_ms\fP. When time that timer fires, call
 +either \fIcurl_multi_socket_action(3)\fP or \fIcurl_multi_perform(3)\fP,
 +depending on which interface you use.
 +
 +A \fBtimeout_ms\fP value of -1 passed to this callback means you should delete
 +the timer. All other values are valid expire times in number of milliseconds.
 +
 +The \fBtimer_callback\fP will only be called when the timeout expire time is
 +changed.
 +
 +The \fBuserp\fP pointer is set with \fICURLMOPT_TIMERDATA(3)\fP.
 +
 +The timer callback should return 0 on success, and -1 on error. This callback
 +can be used instead of, or in addition to, \fIcurl_multi_timeout(3)\fP.
 +
 +\fBWARNING:\fP even if it feels tempting, avoid calling libcurl directly from
 +within the callback itself when the \fBtimeout_ms\fP value is zero, since it
 +risks triggering an unpleasant recursive behavior that immediately calls
 +another call to the callback with a zero timeout...
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +static gboolean timeout_cb(gpointer user_data)
 +{
 +  int running;
 +  if(user_data) {
 +    g_free(user_data);
 +    curl_multi_setopt(curl_handle, CURLMOPT_TIMERDATA, NULL);
 +  }
 +  curl_multi_socket_action(multi, CURL_SOCKET_TIMEOUT, 0, &running);
 +  return G_SOURCE_REMOVE;
 +}
 +
 +static int timerfunc(CURLM *multi, long timeout_ms, void *userp)
 +{
 +  guint *id = userp;
 +
 +  if(id)
 +    g_source_remove(*id);
 +
 +  /* -1 means we should just delete our timer. */
 +  if(timeout_ms == -1) {
 +    g_free(id);
 +    id = NULL;
 +  }
 +  else {
 +    if(!id)
 +      id = g_new(guint, 1);
 +    *id = g_timeout_add(timeout_ms, timeout_cb, id);
 +  }
 +  curl_multi_setopt(multi, CURLMOPT_TIMERDATA, id);
 +  return 0;
 +}
 +
 +curl_multi_setopt(multi, CURLMOPT_TIMERFUNCTION, timerfunc);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.0
 +.SH RETURN VALUE
 +Returns CURLM_OK if the option is supported, and CURLM_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLMOPT_TIMERDATA "(3), " CURLMOPT_SOCKETFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_ABSTRACT_UNIX_SOCKET.3
index fbb25c4f6,000000000..ccb644a16
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_ABSTRACT_UNIX_SOCKET.3
+++ b/docs/libcurl/opts/GNURLOPT_ABSTRACT_UNIX_SOCKET.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ABSTRACT_UNIX_SOCKET 3 "08 Jan 2017" "libcurl 7.53.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_ABSTRACT_UNIX_SOCKET \- set an abstract Unix domain socket
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ABSTRACT_UNIX_SOCKET, char 
*path);
 +.SH DESCRIPTION
 +Enables the use of an abstract Unix domain socket instead of establishing a 
TCP
 +connection to a host. The parameter should be a char * to a null-terminated 
string
 +holding the path of the socket. The path will be set to \fIpath\fP prefixed 
by a
 +NULL byte (this is the convention for abstract sockets, however it should be 
stressed
 +that the path passed to this function should not contain a leading NULL).
 +
 +On non-supporting platforms, the abstract address will be interpreted as an 
empty
 +string and fail gracefully, generating a run-time error.
 +
 +This option shares the same semantics as
 +.BR CURLOPT_UNIX_SOCKET_PATH "(3)
 +in which documentation more details can be found. Internally, these two 
options share
 +the same storage and therefore only one of them can be set per handle.
 +
 +.SH DEFAULT
 +Default is NULL.
 +.SH EXAMPLE
 +.nf
 +    curl_easy_setopt(curl_handle, CURLOPT_ABSTRACT_UNIX_SOCKET, 
"/tmp/foo.sock");
 +    curl_easy_setopt(curl_handle, CURLOPT_URL, "http://localhost/";);
 +.fi
 +
 +.SH AVAILABILITY
 +Since 7.53.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_UNIX_SOCKET_PATH "(3), " unix "(7), "
diff --cc docs/libcurl/opts/GNURLOPT_ACCEPTTIMEOUT_MS.3
index d74e14960,000000000..2c1e09df4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_ACCEPTTIMEOUT_MS.3
+++ b/docs/libcurl/opts/GNURLOPT_ACCEPTTIMEOUT_MS.3
@@@ -1,54 -1,0 +1,54 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ACCEPTTIMEOUT_MS 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_ACCEPTTIMEOUT_MS \- timeout waiting for FTP server to connect back
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPTTIMEOUT_MS, long ms);
 +.SH DESCRIPTION
 +Pass a long telling libcurl the maximum number of milliseconds to wait for a
 +server to connect back to libcurl when an active FTP connection is used.
 +.SH DEFAULT
 +60000 milliseconds
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/path/file";);
 +
 +  /* wait no more than 5 seconds for FTP server responses */
 +  curl_easy_setopt(curl, CURLOPT_ACCEPTTIMEOUT_MS, 5000L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.24.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), "
diff --cc docs/libcurl/opts/GNURLOPT_ACCEPT_ENCODING.3
index 2586b013d,000000000..f2be9198d
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_ACCEPT_ENCODING.3
+++ b/docs/libcurl/opts/GNURLOPT_ACCEPT_ENCODING.3
@@@ -1,106 -1,0 +1,106 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ACCEPT_ENCODING 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_ACCEPT_ENCODING \- enables automatic decompression of HTTP downloads
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ACCEPT_ENCODING, char *enc);
 +.SH DESCRIPTION
 +Pass a char * argument specifying what encoding you'd like.
 +
 +Sets the contents of the Accept-Encoding: header sent in an HTTP request, and
 +enables decoding of a response when a Content-Encoding: header is received.
 +
 +libcurl potentially supports several different compressed encodings depending
 +on what support that has been built-in.
 +
 +To aid applications not having to bother about what specific algorithms this
 +particular libcurl build supports, libcurl allows a zero-length string to be
 +set ("") to ask for an Accept-Encoding: header to be used that contains all
 +built-in supported encodings.
 +
 +Alternatively, you can specify exactly the encoding or list of encodings you
 +want in the response. Four encodings are supported: \fIidentity\fP, meaning
 +non-compressed, \fIdeflate\fP which requests the server to compress its
 +response using the zlib algorithm, \fIgzip\fP which requests the gzip
 +algorithm, (since curl 7.57.0) \fIbr\fP which is brotli and (since curl
 +7.72.0) \fIzstd\fP which is zstd.  Provide them in the string as a
 +comma-separated list of accepted encodings, like:
 +
 +  "br, gzip, deflate".
 +
 +Set \fICURLOPT_ACCEPT_ENCODING(3)\fP to NULL to explicitly disable it, which
 +makes libcurl not send an Accept-Encoding: header and not decompress received
 +contents automatically.
 +
 +You can also opt to just include the Accept-Encoding: header in your request
 +with \fICURLOPT_HTTPHEADER(3)\fP but then there will be no automatic
 +decompressing when receiving data.
 +
 +This is a request, not an order; the server may or may not do it.  This option
 +must be set (to any non-NULL value) or else any unsolicited encoding done by
 +the server is ignored.
 +
 +Servers might respond with Content-Encoding even without getting a
 +Accept-Encoding: in the request. Servers might respond with a different
 +Content-Encoding than what was asked for in the request.
 +
 +The Content-Length: servers send for a compressed response is supposed to
 +indicate the length of the compressed content so when auto decoding is enabled
 +it may not match the sum of bytes reported by the write callbacks (although,
 +sending the length of the non-compressed content is a common server mistake).
 +
 +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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* enable all supported built-in compressions */
 +  curl_easy_setopt(curl, CURLOPT_ACCEPT_ENCODING, "");
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option was called CURLOPT_ENCODING before 7.21.6
 +
 +The specific libcurl you're using must have been built with zlib to be able to
 +decompress gzip and deflate responses, with the brotli library to
 +decompress brotli responses and with the zstd library to decompress zstd
 +responses.
 +.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_TRANSFER_ENCODING "(3), " CURLOPT_HTTPHEADER "(3), "
 +.BR CURLOPT_HTTP_CONTENT_DECODING "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_ADDRESS_SCOPE.3
index 75467fe20,000000000..706a24e4e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_ADDRESS_SCOPE.3
+++ b/docs/libcurl/opts/GNURLOPT_ADDRESS_SCOPE.3
@@@ -1,55 -1,0 +1,55 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ADDRESS_SCOPE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_ADDRESS_SCOPE \- set scope id for IPv6 addresses
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ADDRESS_SCOPE, long scope);
 +.SH DESCRIPTION
 +Pass a long specifying the scope id value to use when connecting to IPv6 
addresses.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +All, when using IPv6
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  long my_scope_id;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  my_scope_id = if_nametoindex("eth0");
 +  curl_easy_setopt(curl, CURLOPT_ADDRESS_SCOPE, my_scope_id);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative value.
 +.SH "SEE ALSO"
 +.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_ALTSVC.3
index d1d44629e,000000000..9ba1e7ef0
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_ALTSVC.3
+++ b/docs/libcurl/opts/GNURLOPT_ALTSVC.3
@@@ -1,63 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ALTSVC 3 "5 Feb 2019" "libcurl 7.64.1" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_ALTSVC \- set alt-svc cache file name
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC, char *filename);
 +.fi
- .SH EXPERIMENTAL
- Warning: this feature is early code and is marked as experimental. It can only
- be enabled by explicitly telling configure with \fB--enable-alt-svc\fP. You 
are
- advised to not ship this in production before the experimental label is
- removed.
 +.SH DESCRIPTION
 +Pass in a pointer to a \fIfilename\fP to instruct libcurl to use that file as
 +the Alt-Svc cache to read existing cache contents from and possibly also write
 +it back to a after a transfer, unless \fBCURLALTSVC_READONLYFILE\fP is set in
 +\fICURLOPT_ALTSVC_CTRL(3)\fP.
 +
 +Specify a blank file name ("") to make libcurl not load from a file at all.
 +.SH DEFAULT
 +NULL. The alt-svc cache is not read nor written to file.
 +.SH PROTOCOLS
 +HTTPS
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, CURLALTSVC_H1);
 +  curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt");
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.64.1
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_ALTSVC_CTRL "(3), " CURLOPT_CONNECT_TO "(3), " CURLOPT_RESOLVE 
"(3), "
 +.BR CURLOPT_COOKIEFILE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_ALTSVC_CTRL.3
index 287da646e,000000000..6dc10bbc1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_ALTSVC_CTRL.3
+++ b/docs/libcurl/opts/GNURLOPT_ALTSVC_CTRL.3
@@@ -1,92 -1,0 +1,82 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ALTSVC_CTRL 3 "5 Feb 2019" "libcurl 7.64.1" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_ALTSVC_CTRL \- control alt-svc behavior
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
- #define CURLALTSVC_IMMEDIATELY  (1<<0)
 +#define CURLALTSVC_READONLYFILE (1<<2)
 +#define CURLALTSVC_H1           (1<<3)
 +#define CURLALTSVC_H2           (1<<4)
 +#define CURLALTSVC_H3           (1<<5)
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ALTSVC_CTRL, long bitmask);
 +.fi
- .SH EXPERIMENTAL
- Warning: this feature is early code and is marked as experimental. It can only
- be enabled by explicitly telling configure with \fB--enable-alt-svc\fP. You 
are
- advised to not ship this in production before the experimental label is
- removed.
 +.SH DESCRIPTION
 +Populate the long \fIbitmask\fP with the correct set of features to instruct
 +libcurl how to handle Alt-Svc for the transfers using this handle.
 +
 +libcurl will only accept Alt-Svc headers over a secure transport, meaning
 +HTTPS. It will also only complete a request to an alternative origin if that
 +origin is properly hosted over HTTPS. These requirements are there to make
 +sure both the source and the destination are legitimate.
 +
 +Setting any bit will enable the alt-svc engine.
- .IP "CURLALTSVC_IMMEDIATELY"
- If an Alt-Svc: header is received, this instructs libcurl to switch to one of
- those alternatives asap rather than to save it and use for the next
- request. (Not currently supported).
 +.IP "CURLALTSVC_READONLYFILE"
 +Do not write the alt-svc cache back to the file specified with
 +\fICURLOPT_ALTSVC(3)\fP even if it gets updated. By default a file specified
 +with that option will be read and written to as deemed necessary.
 +.IP "CURLALTSVC_H1"
 +Accept alternative services offered over HTTP/1.1.
 +.IP "CURLALTSVC_H2"
 +Accept alternative services offered over HTTP/2. This will only be used if
 +libcurl was also built to actually support HTTP/2, otherwise this bit will be
 +ignored.
 +.IP "CURLALTSVC_H3"
 +Accept alternative services offered over HTTP/3. This will only be used if
 +libcurl was also built to actually support HTTP/3, otherwise this bit will be
 +ignored.
 +.SH DEFAULT
 +Alt-Svc handling is disabled by default. If \fICURLOPT_ALTSVC(3)\fP is set,
 +\fICURLOPT_ALTSVC_CTRL(3)\fP has a default value corresponding to
 +CURLALTSVC_H1 | CURLALTSVC_H2 | CURLALTSVC_H3 - the HTTP/2 and HTTP/3 bits are
 +only set if libcurl was built with support for those versions.
 +.SH PROTOCOLS
 +HTTPS
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_ALTSVC_CTRL, CURLALTSVC_H1);
 +  curl_easy_setopt(curl, CURLOPT_ALTSVC, "altsvc-cache.txt");
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.64.1
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_ALTSVC "(3), " CURLOPT_CONNECT_TO "(3), " CURLOPT_RESOLVE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_APPEND.3
index 69e293191,000000000..65eee1ea1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_APPEND.3
+++ b/docs/libcurl/opts/GNURLOPT_APPEND.3
@@@ -1,55 -1,0 +1,55 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_APPEND 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_APPEND \- enable appending to the remote file
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_APPEND, long append);
 +.SH DESCRIPTION
 +A long parameter set to 1 tells the library to append to the remote file
 +instead of overwrite it. This is only useful when uploading to an FTP site.
 +.SH DEFAULT
 +0 (disabled)
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/to/newfile";);
 +  curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
 +  curl_easy_setopt(curl, CURLOPT_APPEND, 1L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option was known as CURLOPT_FTPAPPEND up to 7.16.4
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_DIRLISTONLY "(3), " CURLOPT_RESUME_FROM "(3), "
 +.BR CURLOPT_UPLOAD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_AUTOREFERER.3
index 9f0f2f527,000000000..77ab5ec1f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_AUTOREFERER.3
+++ b/docs/libcurl/opts/GNURLOPT_AUTOREFERER.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_AUTOREFERER 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_AUTOREFERER \- automatically update the referer header
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_AUTOREFERER, long autorefer);
 +.SH DESCRIPTION
 +Pass a parameter set to 1 to enable this. When enabled, libcurl will
 +automatically set the Referer: header field in HTTP requests where it follows
 +a Location: redirect.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +HTTP
 +.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_URL, "https://example.com/foo.bin";);
 +
 +  /* follow redirects */
 +  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 +
 +  /* set Referer: automatically when following redirects */
 +  curl_easy_setopt(curl, CURLOPT_AUTOREFERER, 1L);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(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_REFERER "(3), " CURLOPT_FOLLOWLOCATION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_BUFFERSIZE.3
index 1607d02de,000000000..240fd5d02
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_BUFFERSIZE.3
+++ b/docs/libcurl/opts/GNURLOPT_BUFFERSIZE.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_BUFFERSIZE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_BUFFERSIZE \- set preferred receive buffer size
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_BUFFERSIZE, long size);
 +.SH DESCRIPTION
 +Pass a long specifying your preferred \fIsize\fP (in bytes) for the receive
 +buffer in libcurl.  The main point of this would be that the write callback
 +gets called more often and with smaller chunks. Secondly, for some protocols,
 +there's a benefit of having a larger buffer for performance.
 +
 +This is just treated as a request, not an order. You cannot be guaranteed to
 +actually get the given size.
 +
 +This buffer size is by default \fICURL_MAX_WRITE_SIZE\fP (16kB). The maximum
 +buffer size allowed to be set is \fICURL_MAX_READ_SIZE\fP (512kB). The minimum
 +buffer size allowed to be set is 1024.
 +.SH DEFAULT
 +CURL_MAX_WRITE_SIZE (16kB)
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/foo.bin";);
 +
 +  /* ask libcurl to allocate a larger receive buffer */
 +  curl_easy_setopt(curl, CURLOPT_BUFFERSIZE, 120000L);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.10.  Growing the buffer was added in 7.53.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_MAX_RECV_SPEED_LARGE "(3), " CURLOPT_WRITEFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CAINFO.3
index 83a86a643,000000000..44ae70232
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CAINFO.3
+++ b/docs/libcurl/opts/GNURLOPT_CAINFO.3
@@@ -1,83 -1,0 +1,83 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CAINFO 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_CAINFO \- path to Certificate Authority (CA) bundle
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAINFO, char *path);
 +.SH DESCRIPTION
 +Pass a char * to a null-terminated string naming a file holding one or more
 +certificates to verify the peer with.
 +
 +If \fICURLOPT_SSL_VERIFYPEER(3)\fP is zero and you avoid verifying the
 +server's certificate, \fICURLOPT_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.
 +Starting with curl-7.55.0, if both \fICURLOPT_CAINFO(3)\fP and
 +\fICURLOPT_CAPATH(3)\fP are unset, NSS-linked libcurl tries to load
 +libnssckbi.so, which contains a more comprehensive set of trust information
 +than supported by nss-pem, because libnssckbi.so also includes information
 +about distrusted certificates.
 +
 +(iOS and macOS) When curl uses Secure Transport this option is supported. If
 +the option is not set, then curl will use the certificates in the system and
 +user Keychain to verify the peer.
 +
 +(Schannel) This option is supported for Schannel in Windows 7 or later but we
 +recommend not using it until Windows 8 since it works better starting then.
 +If the option is not set, then curl will use the certificates in the Windows'
 +store of root certificates (the default for Schannel).
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +Built-in system specific. When curl is built with Secure Transport or
 +Schannel, this option is not set by 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_CAINFO, "/etc/certs/cabundle.pem");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +For the SSL engines that don't support certificate files the CURLOPT_CAINFO
 +option is ignored. Schannel support added in libcurl 7.60.
 +.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_CAPATH "(3), "
 +.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CAPATH.3
index 17ff2fb47,000000000..bf089b109
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CAPATH.3
+++ b/docs/libcurl/opts/GNURLOPT_CAPATH.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CAPATH 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_CAPATH \- specify directory holding CA certificates
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CAPATH, char *capath);
 +.SH DESCRIPTION
 +Pass a char * to a null-terminated string naming a directory holding multiple
 +CA certificates to verify the peer with. If libcurl is built against OpenSSL,
 +the certificate directory must be prepared using the openssl c_rehash utility.
 +This makes sense only when used in combination with the
 +\fICURLOPT_SSL_VERIFYPEER(3)\fP option.
 +
 +The \fICURLOPT_CAPATH(3)\fP function apparently does not work in Windows due
 +to some limitation in openssl.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_CAPATH, "/etc/cert-dir");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option is supported by the OpenSSL, GnuTLS and mbedTLS (since 7.56.0)
 +backends. The NSS backend provides the option only for backward compatibility.
 +.SH RETURN VALUE
 +CURLE_OK if supported; or an error such as:
 +
 +CURLE_NOT_BUILT_IN - Not supported by the SSL backend
 +
 +CURLE_UNKNOWN_OPTION
 +
 +CURLE_OUT_OF_MEMORY
 +.SH "SEE ALSO"
 +.BR CURLOPT_CAINFO "(3), "
 +.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CERTINFO.3
index 0aba17e7c,000000000..a3d074616
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CERTINFO.3
+++ b/docs/libcurl/opts/GNURLOPT_CERTINFO.3
@@@ -1,78 -1,0 +1,78 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CERTINFO 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_CERTINFO \- request SSL certificate information
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CERTINFO, long certinfo);
 +.SH DESCRIPTION
 +Pass a long set to 1 to enable libcurl's certificate chain info gatherer. With
 +this enabled, libcurl will extract lots of information and data about the
 +certificates in the certificate chain used in the SSL connection. This data
 +may then be retrieved after a transfer using \fIcurl_easy_getinfo(3)\fP and
 +its option \fICURLINFO_CERTINFO(3)\fP.
 +.SH DEFAULT
 +0
 +.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 supported by the OpenSSL, GnuTLS, Schannel, NSS and GSKit
 +backends.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CAINFO "(3), " CURLOPT_SSL_VERIFYPEER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CHUNK_BGN_FUNCTION.3
index a4ca84936,000000000..6f14562ea
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CHUNK_BGN_FUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_CHUNK_BGN_FUNCTION.3
@@@ -1,141 -1,0 +1,141 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_BGN_FUNCTION 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CHUNK_BGN_FUNCTION \- callback before a transfer with FTP 
wildcardmatch
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +struct curl_fileinfo {
 +  char *filename;
 +  curlfiletype filetype;
 +  time_t time;   /* always zero! */
 +  unsigned int perm;
 +  int uid;
 +  int gid;
 +  curl_off_t size;
 +  long int hardlinks;
 +
 +  struct {
 +    /* If some of these fields is not NULL, it is a pointer to b_data. */
 +    char *time;
 +    char *perm;
 +    char *user;
 +    char *group;
 +    char *target; /* pointer to the target filename of a symlink */
 +  } strings;
 +
 +  unsigned int flags;
 +
 +  /* used internally */
 +  char *b_data;
 +  size_t b_size;
 +  size_t b_used;
 +};
 +
 +long chunk_bgn_callback(const void *transfer_info, void *ptr,
 +                        int remains);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_BGN_FUNCTION,
 +                          chunk_bgn_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This callback function gets called by libcurl before a part of the stream is
 +going to be transferred (if the transfer supports chunks).
 +
 +The \fItransfer_info\fP pointer will point to a struct curl_fileinfo with
 +details about the file that is about to get transferred.
 +
 +This callback makes sense only when using the \fICURLOPT_WILDCARDMATCH(3)\fP
 +option for now.
 +
 +The target of transfer_info parameter is a "feature depended" structure. For
 +the FTP wildcard download, the target is curl_fileinfo structure (see
 +\fIgnurl/curl.h\fP).  The parameter \fIptr\fP is a pointer given by
 +\fICURLOPT_CHUNK_DATA(3)\fP. The parameter remains contains number of chunks
 +remaining per the transfer. If the feature is not available, the parameter has
 +zero value.
 +
 +Return \fICURL_CHUNK_BGN_FUNC_OK\fP if everything is fine,
 +\fICURL_CHUNK_BGN_FUNC_SKIP\fP if you want to skip the concrete chunk or
 +\fICURL_CHUNK_BGN_FUNC_FAIL\fP to tell libcurl to stop if some error occurred.
 +.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
 +This was 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_END_FUNCTION "(3), " CURLOPT_WILDCARDMATCH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CHUNK_DATA.3
index 04572f405,000000000..3fdc26bf0
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CHUNK_END_FUNCTION.3
index d99d53e2e,000000000..69322bf68
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CHUNK_END_FUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_CHUNK_END_FUNCTION.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_END_FUNCTION 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CHUNK_END_FUNCTION \- callback after a transfer with FTP wildcardmatch
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +long chunk_end_callback(void *ptr);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CHUNK_END_FUNCTION,
 +                          chunk_end_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This function gets called by libcurl as soon as a part of the stream has been
 +transferred (or skipped).
 +
 +Return \fICURL_CHUNK_END_FUNC_OK\fP if everything is fine or
 +\fBCURL_CHUNK_END_FUNC_FAIL\fP to tell the lib to stop if some error occurred.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +static long file_is_downloaded(struct callback_data *data)
 +{
 +  if(data->output) {
 +    fclose(data->output);
 +    data->output = 0x0;
 +  }
 +  return CURL_CHUNK_END_FUNC_OK;
 +}
 +
 +int main()
 +{
 +  /* data for callback */
 +  struct callback_data callback_info;
 +  curl_easy_setopt(curl, CURLOPT_CHUNK_END_FUNCTION, file_is_downloaded);
 +  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_WILDCARDMATCH "(3), " CURLOPT_CHUNK_BGN_FUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CLOSESOCKETDATA.3
index dd9e69594,000000000..7772996d6
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 f7d8d45b4,000000000..41b0fdd97
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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.3
index 60ee364f7,000000000..ca8d6f00c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CONNECTTIMEOUT.3
+++ b/docs/libcurl/opts/GNURLOPT_CONNECTTIMEOUT.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CONNECTTIMEOUT \- timeout for the connect phase
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECTTIMEOUT, long timeout);
 +.SH DESCRIPTION
 +Pass a long. It should contain the maximum time in seconds 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(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
 +300
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* complete connection within 10 seconds */
 +  curl_easy_setopt(curl, CURLOPT_CONNECTTIMEOUT, 10L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK. Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative
 +value or a value that when converted to milliseconds is too large.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CONNECTTIMEOUT_MS "(3), "
 +.BR CURLOPT_TIMEOUT "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CONNECTTIMEOUT_MS.3
index da836e0c8,000000000..d8a0ac58e
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_ONLY.3
index 6e7962760,000000000..9ee9654e2
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CONNECT_ONLY.3
+++ b/docs/libcurl/opts/GNURLOPT_CONNECT_ONLY.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ONLY 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_CONNECT_ONLY \- stop when connected to target server
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONNECT_ONLY, long only);
 +.SH DESCRIPTION
 +Pass a long. If the parameter equals 1, it tells the library to perform all
 +the required proxy authentication and connection setup, but no data transfer,
 +and then return.
 +
 +The option can be used to simply test a connection to a server, but is more
 +useful when used with the \fICURLINFO_ACTIVESOCKET(3)\fP option to
 +\fIcurl_easy_getinfo(3)\fP as the library can set up the connection and then
 +the application can obtain the most recently used socket for special data
 +transfers.
 +
 +Transfers marked connect only will not reuse any existing connections and
 +connections marked connect only will not be allowed to get reused.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +HTTP, SMTP, POP3 and IMAP
 +.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_CONNECT_ONLY, 1L);
 +  ret = curl_easy_perform(curl);
 +  if(ret == CURLE_OK) {
 +    /* only connected! */
 +  }
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.2
 +.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_HTTPPROXYTUNNEL  "(3), "
 +.BR curl_easy_recv "(3), " curl_easy_send "(3) "
diff --cc docs/libcurl/opts/GNURLOPT_CONNECT_TO.3
index a54121001,000000000..63532347a
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_setopt(curl, CURLOPT_URL, "https://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_CONV_FROM_NETWORK_FUNCTION.3
index 783395aec,000000000..dd1f32ad7
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CONV_FROM_NETWORK_FUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_CONV_FROM_NETWORK_FUNCTION.3
@@@ -1,101 -1,0 +1,101 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CONV_FROM_NETWORK_FUNCTION 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CONV_FROM_NETWORK_FUNCTION \- convert data from network to host 
encoding
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode conv_callback(char *ptr, size_t length);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
 +                          conv_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP will return the
 +CURL_VERSION_CONV feature bit set if this option is provided.
 +
 +The data to be converted is in a buffer pointed to by the \fIptr\fP parameter.
 +The amount of data to convert is indicated by the \fIlength\fP parameter.  The
 +converted data overlays the input data in the buffer pointed to by the ptr
 +parameter. \fICURLE_OK\fP must be returned upon successful conversion.  A
 +CURLcode return value defined by curl.h, such as \fICURLE_CONV_FAILED\fP,
 +should be returned if an error was encountered.
 +
 +\fBCURLOPT_CONV_FROM_NETWORK_FUNCTION\fP converts to host encoding from the
 +network encoding.  It is used when commands or ASCII data are received over
 +the network.
 +
 +If you set a callback pointer to NULL, or don't set it at all, the built-in
 +libcurl iconv functions will be used.  If HAVE_ICONV was not defined when
 +libcurl was built, and no callback has been established, conversion will
 +return the CURLE_CONV_REQD error code.
 +
 +If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined.
 +For example:
 +
 + \&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
 +
 +The iconv code in libcurl will default the network and UTF8 codeset names as
 +follows:
 +
 + \&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
 +
 + \&#define CURL_ICONV_CODESET_FOR_UTF8   "UTF-8"
 +
 +You will need to override these definitions if they are different on your
 +system.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +FTP, SMTP, IMAP, POP3
 +.SH EXAMPLE
 +.nf
 +static CURLcode my_conv_from_ascii_to_ebcdic(char *buffer, size_t length)
 +{
 +  char *tempptrin, *tempptrout;
 +  size_t bytes = length;
 +  int rc;
 +  tempptrin = tempptrout = buffer;
 +  rc = platform_a2e(&tempptrin, &bytes, &tempptrout, &bytes);
 +  if(rc == PLATFORM_CONV_OK) {
 +    return CURLE_OK;
 +  }
 +  else {
 +    return CURLE_CONV_FAILED;
 +  }
 +}
 +
 +/* use platform-specific functions for codeset conversions */
 +curl_easy_setopt(curl, CURLOPT_CONV_FROM_NETWORK_FUNCTION,
 +                 my_conv_from_ascii_to_ebcdic);
 +.fi
 +.SH AVAILABILITY
 +Available only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was 
built.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CONV_TO_NETWORK_FUNCTION "(3), " CURLOPT_CONV_FROM_UTF8_FUNCTION 
"(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CONV_FROM_UTF8_FUNCTION.3
index 42c0a976a,000000000..64ce846b5
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CONV_FROM_UTF8_FUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_CONV_FROM_UTF8_FUNCTION.3
@@@ -1,99 -1,0 +1,99 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CONV_FROM_UTF8_FUNCTION 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CONV_FROM_UTF8_FUNCTION \- convert data from UTF8 to host encoding
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode conv_callback(char *ptr, size_t length);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_FROM_UTF8_FUNCTION,
 +                          conv_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP will return the
 +CURL_VERSION_CONV feature bit set if this option is provided.
 +
 +The data to be converted is in a buffer pointed to by the \fIptr\fP parameter.
 +The amount of data to convert is indicated by the \fIlength\fP parameter.  The
 +converted data overlays the input data in the buffer pointed to by the ptr
 +parameter. \fICURLE_OK\fP must be returned upon successful conversion.  A
 +CURLcode return value defined by curl.h, such as \fICURLE_CONV_FAILED\fP,
 +should be returned if an error was encountered.
 +
 +\fBCURLOPT_CONV_FROM_UTF8_FUNCTION\fP converts to host encoding from UTF8
 +encoding. It is required only for SSL processing.
 +
 +If you set a callback pointer to NULL, or don't set it at all, the built-in
 +libcurl iconv functions will be used.  If HAVE_ICONV was not defined when
 +libcurl was built, and no callback has been established, conversion will
 +return the CURLE_CONV_REQD error code.
 +
 +If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined.
 +For example:
 +
 + \&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
 +
 +The iconv code in libcurl will default the network and UTF8 codeset names as
 +follows:
 +
 + \&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
 +
 + \&#define CURL_ICONV_CODESET_FOR_UTF8   "UTF-8"
 +
 +You will need to override these definitions if they are different on your
 +system.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +TLS-based protocols.
 +.SH EXAMPLE
 +.nf
 +static CURLcode my_conv_from_utf8_to_ebcdic(char *buffer, size_t length)
 +{
 +  char *tempptrin, *tempptrout;
 +  size_t bytes = length;
 +  int rc;
 +  tempptrin = tempptrout = buffer;
 +  rc = platform_u2e(&tempptrin, &bytes, &tempptrout, &bytes);
 +  if(rc == PLATFORM_CONV_OK) {
 +    return CURLE_OK;
 +  }
 +  else {
 +    return CURLE_CONV_FAILED;
 +  }
 +}
 +
 +curl_easy_setopt(curl, CURLOPT_CONV_FROM_UTF8_FUNCTION,
 +                 my_conv_from_utf8_to_ebcdic);
 +.fi
 +.SH AVAILABILITY
 +Available only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was 
built.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CONV_TO_NETWORK_FUNCTION "(3), " 
CURLOPT_CONV_FROM_NETWORK_FUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CONV_TO_NETWORK_FUNCTION.3
index b2a0629b4,000000000..5e81d8f41
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CONV_TO_NETWORK_FUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_CONV_TO_NETWORK_FUNCTION.3
@@@ -1,100 -1,0 +1,100 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CONV_TO_NETWORK_FUNCTION 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CONV_TO_NETWORK_FUNCTION \- convert data to network from host encoding
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode conv_callback(char *ptr, size_t length);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CONV_TO_NETWORK_FUNCTION,
 +                          conv_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +Applies to non-ASCII platforms. \fIcurl_version_info(3)\fP will return the
 +CURL_VERSION_CONV feature bit set if this option is provided.
 +
 +The data to be converted is in a buffer pointed to by the \fIptr\fP parameter.
 +The amount of data to convert is indicated by the \fIlength\fP parameter.  The
 +converted data overlays the input data in the buffer pointed to by the ptr
 +parameter. \fICURLE_OK\fP must be returned upon successful conversion.  A
 +CURLcode return value defined by curl.h, such as \fICURLE_CONV_FAILED\fP,
 +should be returned if an error was encountered.
 +
 +\fBCURLOPT_CONV_TO_NETWORK_FUNCTION\fP converts from host encoding to the
 +network encoding.  It is used when commands or ASCII data are sent over the
 +network.
 +
 +If you set a callback pointer to NULL, or don't set it at all, the built-in
 +libcurl iconv functions will be used.  If HAVE_ICONV was not defined when
 +libcurl was built, and no callback has been established, conversion will
 +return the CURLE_CONV_REQD error code.
 +
 +If HAVE_ICONV is defined, CURL_ICONV_CODESET_OF_HOST must also be defined.
 +For example:
 +
 + \&#define CURL_ICONV_CODESET_OF_HOST "IBM-1047"
 +
 +The iconv code in libcurl will default the network and UTF8 codeset names as
 +follows:
 +
 + \&#define CURL_ICONV_CODESET_OF_NETWORK "ISO8859-1"
 +
 + \&#define CURL_ICONV_CODESET_FOR_UTF8   "UTF-8"
 +
 +You will need to override these definitions if they are different on your
 +system.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +FTP, SMTP, IMAP, POP3
 +.SH EXAMPLE
 +.nf
 +static CURLcode my_conv_from_ebcdic_to_ascii(char *buffer, size_t length)
 +{
 +  char *tempptrin, *tempptrout;
 +  size_t bytes = length;
 +  int rc;
 +  tempptrin = tempptrout = buffer;
 +  rc = platform_e2a(&tempptrin, &bytes, &tempptrout, &bytes);
 +  if(rc == PLATFORM_CONV_OK) {
 +    return CURLE_OK;
 +  }
 +  else {
 +    return CURLE_CONV_FAILED;
 +  }
 +}
 +
 +curl_easy_setopt(curl, CURLOPT_CONV_TO_NETWORK_FUNCTION,
 +                 my_conv_from_ebcdic_to_ascii);
 +.fi
 +.SH AVAILABILITY
 +Available only if \fBCURL_DOES_CONVERSIONS\fP was defined when libcurl was 
built.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CONV_FROM_NETWORK_FUNCTION "(3), " 
CURLOPT_CONV_FROM_UTF8_FUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_COOKIE.3
index 3a2a1967e,000000000..49937b430
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_URL, "https://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_COOKIEFILE.3
index 50298e550,000000000..369037b91
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_COOKIEFILE.3
+++ b/docs/libcurl/opts/GNURLOPT_COOKIEFILE.3
@@@ -1,87 -1,0 +1,87 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_COOKIEFILE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_COOKIEFILE \- file name to read cookies from
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEFILE, char *filename);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. It should point to
 +the file name of your file holding cookie data to read. The cookie data can be
 +in either the old Netscape / Mozilla cookie data format or just regular HTTP
 +headers (Set-Cookie style) dumped to a file.
 +
 +It also enables the cookie engine, making libcurl parse and send cookies on
 +subsequent requests with this handle.
 +
 +Given an empty or non-existing file or by passing the empty string ("") to
 +this option, you can enable the cookie engine without reading any initial
 +cookies. If you tell libcurl the file name is "-" (just a single minus sign),
 +libcurl will instead read from stdin.
 +
 +This option only \fBreads\fP cookies. To make libcurl write cookies to file,
 +see \fICURLOPT_COOKIEJAR(3)\fP.
 +
 +Exercise caution if you are using this option and multiple transfers may 
occur.
 +If you use the Set-Cookie format and don't specify a domain then the cookie is
 +sent for any domain (even after redirects are followed) and cannot be modified
 +by a server-set cookie. If a server sets a cookie of the same name then both
 +will be sent on a future transfer to that server, likely not what you 
intended.
 +To address these issues set a domain in Set-Cookie (doing that will include
 +sub-domains) or use the Netscape format.
 +
 +If you use this option multiple times, you just add more files to read.
 +Subsequent files will add more cookies.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/foo.bin";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin";);
 +
 +  /* get cookies from an existing file */
 +  curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH "Cookie file format"
 +The cookie file format and general cookie concepts in curl are described in
 +the HTTP-COOKIES.md file, also hosted online here:
- https://curl.haxx.se/docs/http-cookies.html
++https://curl.se/docs/http-cookies.html
 +.SH AVAILABILITY
 +As long as HTTP is supported
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_COOKIE "(3), " CURLOPT_COOKIEJAR "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_COOKIEJAR.3
index 0a6f60ba0,000000000..849a09630
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_COOKIEJAR.3
+++ b/docs/libcurl/opts/GNURLOPT_COOKIEJAR.3
@@@ -1,78 -1,0 +1,78 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_COOKIEJAR 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_COOKIEJAR \- file name to store cookies to
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIEJAR, char *filename);
 +.SH DESCRIPTION
 +Pass a \fIfilename\fP as char *, null-terminated. This will make libcurl write
 +all internally known cookies to the specified file when
 +\fIcurl_easy_cleanup(3)\fP is called. If no cookies are known, no file will be
 +created. Specify "-" as filename to instead have the cookies written to
 +stdout. Using this option also enables cookies for this session, so if you for
 +example follow a location it will make matching cookies get sent accordingly.
 +
 +Note that libcurl doesn't read any cookies from the cookie jar. If you want to
 +read cookies from a file, use \fICURLOPT_COOKIEFILE(3)\fP.
 +
 +If the cookie jar file can't be created or written to (when the
 +\fIcurl_easy_cleanup(3)\fP is called), libcurl will not and cannot report an
 +error for this. Using \fICURLOPT_VERBOSE(3)\fP or
 +\fICURLOPT_DEBUGFUNCTION(3)\fP will get a warning to display, but that is the
 +only visible feedback you get about this possibly lethal situation.
 +
 +Since 7.43.0 cookies that were imported in the Set-Cookie format without a
 +domain name are not exported by this option.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/foo.bin";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin";);
 +
 +  /* export cookies to this file when closing the handle */
 +  curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "/tmp/cookies.txt");
 +
 +  ret = curl_easy_perform(curl);
 +
 +  /* close the handle, write the cookies! */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with HTTP
 +.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_COOKIEFILE "(3), " CURLOPT_COOKIE "(3), "
 +.BR CURLOPT_COOKIELIST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_COOKIELIST.3
index fe0c19380,000000000..45902351e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_COOKIELIST.3
+++ b/docs/libcurl/opts/GNURLOPT_COOKIELIST.3
@@@ -1,124 -1,0 +1,124 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_COOKIELIST 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_COOKIELIST \- add to or manipulate cookies held in memory
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIELIST,
 +                          char *cookie);
 +.SH DESCRIPTION
 +Pass a char * to a \fIcookie\fP string.
 +
 +Such a cookie can be either a single line in Netscape / Mozilla format or just
 +regular HTTP-style header (Set-Cookie: ...) format. This will also enable the
 +cookie engine. This adds that single cookie to the internal cookie store.
 +
 +Exercise caution if you are using this option and multiple transfers may 
occur.
 +If you use the Set-Cookie format and don't specify a domain then the cookie is
 +sent for any domain (even after redirects are followed) and cannot be modified
 +by a server-set cookie. If a server sets a cookie of the same name (or maybe
 +you've imported one) then both will be sent on a future transfer to that
 +server, likely not what you intended. To address these issues set a domain in
 +Set-Cookie (doing that will include sub-domains) or use the Netscape format as
 +shown in EXAMPLE.
 +
 +Additionally, there are commands available that perform actions if you pass in
 +these exact strings:
 +.IP ALL
 +erases all cookies held in memory
 +
 +.IP SESS
 +erases all session cookies held in memory
 +
 +.IP FLUSH
 +writes all known cookies to the file specified by \fICURLOPT_COOKIEJAR(3)\fP
 +
 +.IP RELOAD
 +loads all cookies from the files specified by \fICURLOPT_COOKIEFILE(3)\fP
 +
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +/* This example shows an inline import of a cookie in Netscape format.
 +You can set the cookie as HttpOnly to prevent XSS attacks by prepending
 +#HttpOnly_ to the hostname. That may be useful if the cookie will later
 +be imported by a browser.
 +*/
 +
 +#define SEP  "\\t"  /* Tab separates the fields */
 +
 +char *my_cookie =
 +  "example.com"    /* Hostname */
 +  SEP "FALSE"      /* Include subdomains */
 +  SEP "/"          /* Path */
 +  SEP "FALSE"      /* Secure */
 +  SEP "0"          /* Expiry in epoch time format. 0 == Session */
 +  SEP "foo"        /* Name */
 +  SEP "bar";       /* Value */
 +
 +/* my_cookie is imported immediately via CURLOPT_COOKIELIST.
 +*/
 +curl_easy_setopt(curl, CURLOPT_COOKIELIST, my_cookie);
 +
 +/* The list of cookies in cookies.txt will not be imported until right
 +before a transfer is performed. Cookies in the list that have the same
 +hostname, path and name as in my_cookie are skipped. That is because
 +libcurl has already imported my_cookie and it's considered a "live"
 +cookie. A live cookie won't be replaced by one read from a file.
 +*/
 +curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "cookies.txt");  /* import */
 +
 +/* Cookies are exported after curl_easy_cleanup is called. The server
 +may have added, deleted or modified cookies by then. The cookies that
 +were skipped on import are not exported.
 +*/
 +curl_easy_setopt(curl, CURLOPT_COOKIEJAR, "cookies.txt");  /* export */
 +
 +curl_easy_perform(curl);  /* cookies imported from cookies.txt */
 +
 +curl_easy_cleanup(curl);  /* cookies exported to cookies.txt */
 +.fi
 +.SH "Cookie file format"
 +The cookie file format and general cookie concepts in curl are described in
 +the HTTP-COOKIES.md file, also hosted online here:
- https://curl.haxx.se/docs/http-cookies.html
++https://curl.se/docs/http-cookies.html
 +.SH AVAILABILITY
 +ALL was added in 7.14.1
 +
 +SESS was added in 7.15.4
 +
 +FLUSH was added in 7.17.1
 +
 +RELOAD was added in 7.39.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_COOKIEFILE "(3), " CURLOPT_COOKIEJAR "(3), " CURLOPT_COOKIE "(3), 
"
 +.BR CURLINFO_COOKIELIST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_COOKIESESSION.3
index 5911c949d,000000000..8725f3691
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_COOKIESESSION.3
+++ b/docs/libcurl/opts/GNURLOPT_COOKIESESSION.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_COOKIESESSION 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_COOKIESESSION \- start a new cookie session
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_COOKIESESSION, long init);
 +.SH DESCRIPTION
 +Pass a long set to 1 to mark this as a new cookie "session". It will force
 +libcurl to ignore all cookies it is about to load that are "session cookies"
 +from the previous session. By default, libcurl always stores and loads all
 +cookies, independent if they are session cookies or not. Session cookies are
 +cookies without expiry date and they are meant to be alive and existing for
 +this "session" only.
 +
 +A "session" is usually defined in browser land for as long as you have your
 +browser up, more or less.
 +.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/foo.bin";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin";);
 +
 +  /* new "session", don't load session cookies */
 +  curl_easy_setopt(curl, CURLOPT_COOKIESESSION, 1L);
 +
 +  /* get the (non session) cookies from this file */
 +  curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "/tmp/cookies.txt");
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with HTTP
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_COOKIEFILE "(3), " CURLOPT_COOKIE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_COPYPOSTFIELDS.3
index 9a6940663,000000000..057354b44
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_CRLF.3
index 461a295df,000000000..1b030b941
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CRLF.3
+++ b/docs/libcurl/opts/GNURLOPT_CRLF.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CRLF 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CRLF \- enable/disable CRLF conversion
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLF, long conv);
 +.SH DESCRIPTION
 +Pass a long. If the value is set to 1 (one), libcurl converts Unix newlines to
 +CRLF newlines on transfers. Disable this option again by setting the value to
 +0 (zero).
 +
 +This is a legacy option of questionable use.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +All
 +.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_CRLF, 1L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +SMTP since 7.40.0, other protocols since they were introduced
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_CONV_FROM_NETWORK_FUNCTION "(3), " 
CURLOPT_CONV_TO_NETWORK_FUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CRLFILE.3
index bffc55b8a,000000000..49a56c53e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CRLFILE.3
+++ b/docs/libcurl/opts/GNURLOPT_CRLFILE.3
@@@ -1,75 -1,0 +1,75 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CRLFILE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_CRLFILE \- specify a Certificate Revocation List file
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CRLFILE, char *file);
 +.SH DESCRIPTION
 +Pass a char * to a null-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. Also note that
 +\fICURLOPT_CRLFILE(3)\fP will imply \fBCURLSSLOPT_NO_PARTIALCHAIN\fP (see
 +\fICURLOPT_SSL_OPTIONS(3)\fP) since curl 7.71.0 due to an OpenSSL bug.
 +
 +This option makes sense only when used in combination with the
 +\fICURLOPT_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
 +All TLS-based protocols
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_CRLFILE, "/etc/certs/crl.pem");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.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_SSL_VERIFYPEER "(3), " CURLOPT_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_PROXY_CRLFILE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CURLU.3
index 4721ed6ac,000000000..f673d003d
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_CURLU.3
+++ b/docs/libcurl/opts/GNURLOPT_CURLU.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CURLU 3 "28 Oct 2018" "libcurl 7.63.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_CURLU \- set URL with CURLU *
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_CURLU, void *pointer);
 +.SH DESCRIPTION
 +Pass in a pointer to the \fIURL\fP to work with. The parameter should be a
 +CURLU *. Setting \fICURLOPT_CURLU(3)\fP will explicitly override
 +\fICURLOPT_URL(3)\fP.
 +
 +\fICURLOPT_URL(3)\fP or \fICURLOPT_CURLU(3)\fP \fBmust\fP be set before a
 +transfer is started.
 +
 +libcurl will use this handle and its contents read-only and will not change
 +its contents. An application can very well update the contents of the URL
 +handle after a transfer is done and if the same handle is then used in a
 +subsequent request the updated contents will then be used.
 +.SH DEFAULT
 +The default value of this parameter is NULL.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *handle = curl_easy_init();
 +CURLU *urlp = curl_url();
 +int res = 0;
 +if(curl) {
 +
-   res = curl_url_set(urlp, CURLUPART_URL, "http://example.com";, 0);
++  res = curl_url_set(urlp, CURLUPART_URL, "https://example.com";, 0);
 +
 +  curl_easy_setopt(handle, CURLOPT_CURLU, urlp);
 +
 +  ret = curl_easy_perform(handle);
 +
 +  curl_url_cleanup(urlp);
 +  curl_easy_cleanup(handle);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.63.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), "
 +.BR curl_url "(3), " curl_url_get "(3), " curl_url_set "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_CUSTOMREQUEST.3
index 1bd5020c5,000000000..133ae9286
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 1435ee039,000000000..a4746f51c
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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
++https://curl.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 c470cdac1,000000000..c20a9ed8b
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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/";);
++    curl_easy_setopt(curl, CURLOPT_URL, "https://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 92f4fc253,000000000..760b180bf
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DIRLISTONLY.3
index 8ecb04fe2,000000000..81722df09
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DIRLISTONLY.3
+++ b/docs/libcurl/opts/GNURLOPT_DIRLISTONLY.3
@@@ -1,73 -1,0 +1,73 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DIRLISTONLY 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_DIRLISTONLY \- ask for names only in a directory listing
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DIRLISTONLY, long listonly);
 +.SH DESCRIPTION
 +For FTP and SFTP based URLs a parameter set to 1 tells the library to list the
 +names of files in a directory, rather than performing a full directory listing
 +that would normally include file sizes, dates etc.
 +
 +For POP3 a parameter of 1 tells the library to list the email message or
 +messages on the POP3 server. This can be used to change the default behaviour
 +of libcurl, when combined with a URL that contains a message ID, to perform a
 +"scan listing" which can then be used to determine the size of an email.
 +
 +Note: For FTP this causes a NLST command to be sent to the FTP server.  Beware
 +that some FTP servers list only files in their response to NLST; they might 
not
 +include subdirectories and symbolic links.
 +
 +Setting this option to 1 also implies a directory listing even if the URL
 +doesn't end with a slash, which otherwise is necessary.
 +
 +Do NOT use this option if you also use \fICURLOPT_WILDCARDMATCH(3)\fP as it
 +will effectively break that feature then.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +FTP, SFTP and POP3
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/dir/";);
 +
 +  /* list only */
 +  curl_easy_setopt(curl, CURLOPT_DIRLISTONLY, 1L);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option was known as CURLOPT_FTPLISTONLY up to 7.16.4. POP3 is supported
 +since 7.21.5.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CUSTOMREQUEST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DISALLOW_USERNAME_IN_URL.3
index a70e95d1a,000000000..46e1ffba4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DISALLOW_USERNAME_IN_URL.3
+++ b/docs/libcurl/opts/GNURLOPT_DISALLOW_USERNAME_IN_URL.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DISALLOW_USERNAME_IN_URL 3 "30 May 2018" "libcurl 7.61.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_DISALLOW_USERNAME_IN_URL \- disallow specifying username in the url
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DISALLOW_USERNAME_IN_URL, 
long disallow);
 +.SH DESCRIPTION
 +A long parameter set to 1 tells the library to not allow URLs that include a
 +username.
 +.SH DEFAULT
 +0 (disabled) - user names are allowed by default.
 +.SH PROTOCOLS
 +Several
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_DISALLOW_USERNAME_IN_URL, 1L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in libcurl 7.61.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +
 +curl_easy_perform() will return CURLE_LOGIN_DENIED if this option is enabled
 +and a URL containing a username is specified.
 +.SH "SEE ALSO"
 +.BR libcurl-security "(3), ", CURLOPT_PROTOCOLS "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_DNS_CACHE_TIMEOUT.3
index a05134089,000000000..9f41a67dd
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DNS_CACHE_TIMEOUT.3
+++ b/docs/libcurl/opts/GNURLOPT_DNS_CACHE_TIMEOUT.3
@@@ -1,73 -1,0 +1,73 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DNS_CACHE_TIMEOUT 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_DNS_CACHE_TIMEOUT \- set life-time for DNS cache entries
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_CACHE_TIMEOUT, long age);
 +.SH DESCRIPTION
 +Pass a long, this sets the timeout in seconds. Name resolves will be kept in
 +memory and used for this number of seconds. Set to zero to completely disable
 +caching, or set to -1 to make the cached entries remain forever. By default,
 +libcurl caches this info for 60 seconds.
 +
 +The name resolve functions of various libc implementations don't re-read name
 +server information unless explicitly told so (for example, by calling
 +\fIres_init(3)\fP). This may cause libcurl to keep using the older server even
 +if DHCP has updated the server info, and this may look like a DNS cache issue
 +to the casual libcurl-app user.
 +
 +Note that DNS entries have a "TTL" property but libcurl doesn't use that. This
 +DNS cache timeout is entirely speculative that a name will resolve to the same
 +address for a certain small amount of time into the future.
 +.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/foo.bin";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin";);
 +
 +  /* only reuse addresses for a very short time */
 +  curl_easy_setopt(curl, CURLOPT_DNS_CACHE_TIMEOUT, 2L);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  /* in this second request, the cache will not be used if more than
 +     two seconds have passed since the previous name resolve */
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_DNS_USE_GLOBAL_CACHE "(3), " CURLOPT_DNS_SERVERS "(3), "
 +.BR CURLOPT_RESOLVE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DNS_INTERFACE.3
index 9d3426326,000000000..5ab359014
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DNS_INTERFACE.3
+++ b/docs/libcurl/opts/GNURLOPT_DNS_INTERFACE.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DNS_INTERFACE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_DNS_INTERFACE \- set interface to speak DNS over
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_INTERFACE, char *ifname);
 +.SH DESCRIPTION
 +Pass a char * as parameter. Set the name of the network interface that the DNS
 +resolver should bind to. This must be an interface name (not an address). Set
 +this option to NULL to use the default setting (don't bind to a specific
 +interface).
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +.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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_DNS_INTERFACE, "eth0");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.33.0. This option also requires that libcurl was built with a
 +resolver backend that supports this operation. The c-ares backend is the only
 +such one.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not,
 +or CURLE_NOT_BUILT_IN if support was disabled at compile-time.
 +.SH "SEE ALSO"
 +.BR CURLOPT_DNS_SERVERS "(3), " CURLOPT_DNS_LOCAL_IP4 "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DNS_LOCAL_IP4.3
index df1578f9b,000000000..def010fee
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DNS_LOCAL_IP4.3
+++ b/docs/libcurl/opts/GNURLOPT_DNS_LOCAL_IP4.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DNS_LOCAL_IP4 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_DNS_LOCAL_IP4 \- IPv4 address to bind DNS resolves to
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP4, char *address);
 +.SH DESCRIPTION
 +Set the local IPv4 \fIaddress\fP that the resolver should bind to. The
 +argument should be of type char * and contain a single numerical IPv4 address
 +as a string.  Set this option to NULL to use the default setting (don't bind
 +to a specific IP address).
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_DNS_LOCAL_IP4, "192.168.0.14");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option requires that libcurl was built with a resolver backend that
 +supports this operation. The c-ares backend is the only such one.
 +
 +Added in 7.33.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not,
 +CURLE_NOT_BUILT_IN if support was disabled at compile-time, or
 +CURLE_BAD_FUNCTION_ARGUMENT when given a bad address.
 +.SH "SEE ALSO"
 +.BR CURLOPT_DNS_INTERFACE "(3), " CURLOPT_DNS_LOCAL_IP6 "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DNS_LOCAL_IP6.3
index 3e11d2a68,000000000..6bf9d6590
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DNS_LOCAL_IP6.3
+++ b/docs/libcurl/opts/GNURLOPT_DNS_LOCAL_IP6.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DNS_LOCAL_IP6 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_DNS_LOCAL_IP6 \- IPv6 address to bind DNS resolves to
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_LOCAL_IP6, char *address);
 +.SH DESCRIPTION
 +Set the local IPv6 \fIaddress\fP that the resolver should bind to. The
 +argument should be of type char * and contain a single IPv6 address as a
 +string.  Set this option to NULL to use the default setting (don't bind to a
 +specific IP address).
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_DNS_LOCAL_IP6, "fe80::a9ff:fe46:b619");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option requires that libcurl was built with a resolver backend that
 +supports this operation. The c-ares backend is the only such one.
 +
 +Added in 7.33.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not,
 +CURLE_NOT_BUILT_IN if support was disabled at compile-time, or
 +CURLE_BAD_FUNCTION_ARGUMENT when given a bad address.
 +.SH "SEE ALSO"
 +.BR CURLOPT_DNS_INTERFACE "(3), " CURLOPT_DNS_LOCAL_IP4 "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DNS_SERVERS.3
index 51cc3e7b3,000000000..4c21b40fd
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DNS_SERVERS.3
+++ b/docs/libcurl/opts/GNURLOPT_DNS_SERVERS.3
@@@ -1,67 -1,0 +1,67 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DNS_SERVERS 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_DNS_SERVERS \- set preferred DNS servers
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SERVERS, char *servers);
 +.SH DESCRIPTION
 +Pass a char * that is the list of DNS servers to be used instead of the system
 +default.  The format of the dns servers option is:
 +
 +host[:port][,host[:port]]...
 +
 +For example:
 +
 +192.168.1.100,192.168.1.101,3.4.5.6
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL - use system default
 +.SH PROTOCOLS
 +All
 +.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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_DNS_SERVERS, 
"192.168.1.100:53,192.168.1.101");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option requires that libcurl was built with a resolver backend that
 +supports this operation. The c-ares backend is the only such one.
 +
 +Added in 7.24.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not,
 +CURLE_NOT_BUILT_IN if support was disabled at compile-time,
 +CURLE_BAD_FUNCTION_ARGUMENT when given an invalid server list, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_DNS_LOCAL_IP4 "(3), " CURLOPT_DNS_CACHE_TIMEOUT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DNS_SHUFFLE_ADDRESSES.3
index c8528fe2a,000000000..f729ed397
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DNS_SHUFFLE_ADDRESSES.3
+++ b/docs/libcurl/opts/GNURLOPT_DNS_SHUFFLE_ADDRESSES.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DNS_SHUFFLE_ADDRESSES 3 "3 March 2018" "libcurl 7.60.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_DNS_SHUFFLE_ADDRESSES \- Shuffle addresses when a hostname returns 
more than one
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_SHUFFLE_ADDRESSES, long 
onoff);
 +.fi
 +.SH DESCRIPTION
 +When a name is resolved and more than one IP address is returned, shuffle the
 +order of all returned addresses so that they will be used in a random order.
 +This is similar to the ordering behavior of gethostbyname which is no longer
 +used on most platforms.
 +
 +Addresses will not be reshuffled if a name resolution is completed using the
 +DNS cache. \fICURLOPT_DNS_CACHE_TIMEOUT(3)\fP can be used together with this
 +option to reduce DNS cache timeout or disable caching entirely if frequent
 +reshuffling is needed.
 +
 +Since the addresses returned will be reordered randomly, their order will not
 +be in accordance with RFC 3484 or any other deterministic order that may be
 +generated by the system's name resolution implementation. This may have
 +performance impacts and may cause IPv4 to be used before IPv6 or vice versa.
 +.SH DEFAULT
 +0 (disabled)
 +.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_DNS_SHUFFLE_ADDRESSES, 1L);
 +
 +  curl_easy_perform(curl);
 +
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.60.0
 +.SH RETURN VALUE
 +CURLE_OK or an error such as CURLE_UNKNOWN_OPTION.
 +.SH "SEE ALSO"
 +.BR CURLOPT_DNS_CACHE_TIMEOUT "(3), " CURLOPT_IPRESOLVE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DNS_USE_GLOBAL_CACHE.3
index 6b81d42cd,000000000..25ce68d8e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DNS_USE_GLOBAL_CACHE.3
+++ b/docs/libcurl/opts/GNURLOPT_DNS_USE_GLOBAL_CACHE.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DNS_USE_GLOBAL_CACHE 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_DNS_USE_GLOBAL_CACHE \- enable/disable global DNS cache
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DNS_USE_GLOBAL_CACHE,
 +                          long enable);
 +.SH DESCRIPTION
- Has no function since 7.62.0. Do note use!
++Has no function since 7.62.0. Do not use!
 +
 +Pass a long. If the \fIenable\fP value is 1, it tells curl to use a global DNS
 +cache that will survive between easy handle creations and deletions. This is
 +not thread-safe and this will use a global variable.
 +
 +\fBWARNING:\fP this option is considered obsolete. Stop using it. Switch over
 +to using the share interface instead! See \fICURLOPT_SHARE(3)\fP and
 +\fIcurl_share_init(3)\fP.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* switch off the use of a global, thread unsafe, cache */
 +  curl_easy_setopt(curl, CURLOPT_DNS_USE_GLOBAL_CACHE, 0L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Deprecated since 7.62.0. Has no function.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SHARE "(3), " CURLOPT_DNS_CACHE_TIMEOUT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_DOH_URL.3
index 2af19959c,000000000..ffbddad1c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_DOH_URL.3
+++ b/docs/libcurl/opts/GNURLOPT_DOH_URL.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_DOH_URL 3 "18 Jun 2018" "libcurl 7.62.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_DOH_URL \- provide the DNS-over-HTTPS URL
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_DOH_URL, char *URL);
 +.SH DESCRIPTION
 +Pass in a pointer to a \fIURL\fP for the DOH server to use for name
 +resolving. The parameter should be a char * to a null-terminated string which
 +must be URL-encoded in the following format: "https://host:port/path";. It MUST
 +specify a HTTPS URL.
 +
 +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.
 +
 +curl sends POST requests to the given DNS-over-HTTPS URL.
 +
 +To find the DOH server itself, which might be specified using a name, libcurl
 +will use the default name lookup function. You can bootstrap that by providing
 +the address for the DOH server with \fICURLOPT_RESOLVE(3)\fP.
 +
 +Disable DOH use again by setting this option to NULL.
 +.SH DEFAULT
 +NULL - there is no default DOH URL. If this option isn't set, libcurl will use
 +the default name resolver.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_DOH_URL, "https://dns.example.com";);
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.62.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 DOH URL, curl will not detect a problem until it tries to resolve
 +a name with it.
 +.SH "SEE ALSO"
 +.BR CURLOPT_VERBOSE "(3), " CURLOPT_RESOLVE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_EGDSOCKET.3
index 466091c5c,000000000..d5cbf870e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_EGDSOCKET.3
+++ b/docs/libcurl/opts/GNURLOPT_EGDSOCKET.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_EGDSOCKET 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_EGDSOCKET \- set EGD socket path
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_EGDSOCKET, char *path);
 +.SH DESCRIPTION
 +Pass a char * to the null-terminated path name to the Entropy Gathering Daemon
 +socket. It will be used to seed the random engine for SSL.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_EGDSOCKET, "/var/egd.socket");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +If built TLS enabled. Only the OpenSSL and GnuTLS backends will use this.
 +.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_RANDOM_FILE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_ERRORBUFFER.3
index caf21ba21,000000000..b8a7523f7
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 ce0dbcf64,000000000..596f44c92
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 2e9662c0e,000000000..241f1f37f
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FILETIME.3
index fa74147fc,000000000..bdb5a1b7f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FILETIME.3
+++ b/docs/libcurl/opts/GNURLOPT_FILETIME.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FILETIME 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FILETIME \- get the modification time of the remote resource
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FILETIME, long gettime);
 +.SH DESCRIPTION
 +Pass a long. If it is 1, libcurl will attempt to get the modification time of
 +the remote document in this operation. This requires that the remote server
 +sends the time or replies to a time querying command. The
 +\fIcurl_easy_getinfo(3)\fP function with the \fICURLINFO_FILETIME(3)\fP
 +argument can be used after a transfer to extract the received time (if any).
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +HTTP, FTP, SFTP, FILE
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  /* Ask for filetime */
 +  curl_easy_setopt(curl, CURLOPT_FILETIME, 1L);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OK == res) {
 +    res = curl_easy_getinfo(curl, CURLINFO_FILETIME, &filetime);
 +    if((CURLE_OK == res) && (filetime >= 0)) {
 +      time_t file_time = (time_t)filetime;
 +      printf("filetime %s: %s", filename, ctime(&file_time));
 +    }
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always, for SFTP since 7.49.0
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR curl_easy_getinfo "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FNMATCH_DATA.3
index 37c5db51d,000000000..eb1b8bf48
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FNMATCH_DATA.3
+++ b/docs/libcurl/opts/GNURLOPT_FNMATCH_DATA.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FNMATCH_DATA 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FNMATCH_DATA \- custom pointer to fnmatch callback
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FNMATCH_DATA,
 +                          void *pointer);
 +.SH DESCRIPTION
 +Pass a pointer that will be untouched by libcurl and passed as the ptr
 +argument to the \fICURLOPT_FNMATCH_FUNCTION(3)\fP.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +static int my_fnmatch(void *clientp,
 +                      const char *pattern, const char *string)
 +{
 +  struct local_stuff *data = (struct local_stuff *)clientp;
 +  if(string_match(pattern, string))
 +    return CURL_FNMATCHFUNC_MATCH;
 +  else
 +    return CURL_FNMATCHFUNC_NOMATCH;
 +}
 +
 +{
 +  struct local_stuff local_data;
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.example.com/file*";);
 +  curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
 +  curl_easy_setopt(curl, CURLOPT_FNMATCH_FUNCTION, my_fnmatch);
 +  curl_easy_setopt(curl, CURLOPT_FNMATCH_DATA, &local_data);
 +}
 +.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_FNMATCH_FUNCTION "(3), " CURLOPT_WILDCARDMATCH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FNMATCH_FUNCTION.3
index 1783f8c3f,000000000..99f3d0a00
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FNMATCH_FUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_FNMATCH_FUNCTION.3
@@@ -1,74 -1,0 +1,74 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FNMATCH_FUNCTION 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_FNMATCH_FUNCTION \- wildcard matching function callback
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +int fnmatch_callback(void *ptr,
 +                     const char *pattern,
 +                     const char *string);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FNMATCH_FUNCTION,
 +                          fnmatch_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This callback is used for wildcard matching.
 +
 +Return \fICURL_FNMATCHFUNC_MATCH\fP if pattern matches the string,
 +\fICURL_FNMATCHFUNC_NOMATCH\fP if not or \fICURL_FNMATCHFUNC_FAIL\fP if an
 +error occurred.
 +.SH DEFAULT
 +NULL == an internal function for wildcard matching.
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +static int my_fnmatch(void *clientp,
 +                      const char *pattern, const char *string)
 +{
 +  struct local_stuff *data = (struct local_stuff *)clientp;
 +  if(string_match(pattern, string))
 +    return CURL_FNMATCHFUNC_MATCH;
 +  else
 +    return CURL_FNMATCHFUNC_NOMATCH;
 +}
 +
 +{
 +  struct local_stuff local_data;
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://ftp.example.com/file*";);
 +  curl_easy_setopt(curl, CURLOPT_WILDCARDMATCH, 1L);
 +  curl_easy_setopt(curl, CURLOPT_FNMATCH_FUNCTION, my_fnmatch);
 +  curl_easy_setopt(curl, CURLOPT_FNMATCH_DATA, &local_data);
 +}
 +.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_FNMATCH_DATA "(3), " CURLOPT_DEBUGFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FOLLOWLOCATION.3
index bc7d76ae5,000000000..0b2f60338
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FOLLOWLOCATION.3
+++ b/docs/libcurl/opts/GNURLOPT_FOLLOWLOCATION.3
@@@ -1,81 -1,0 +1,81 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FOLLOWLOCATION 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_FOLLOWLOCATION \- follow HTTP 3xx redirects
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FOLLOWLOCATION, long enable);
 +.SH DESCRIPTION
 +A long parameter set to 1 tells the library to follow any Location: header
 +that the server sends as part of an HTTP header in a 3xx response. The
 +Location: header can specify a relative or an absolute URL to follow.
 +
 +libcurl will issue another request for the new URL and follow new Location:
 +headers all the way until no more such headers are returned.
 +\fICURLOPT_MAXREDIRS(3)\fP can be used to limit the number of redirects
 +libcurl will follow.
 +
 +libcurl limits what protocols it automatically follows to. The accepted
 +protocols are set with \fICURLOPT_REDIR_PROTOCOLS(3)\fP. By default libcurl
 +will allow HTTP, HTTPS, FTP and FTPS on redirect (7.65.2). Older versions of
 +libcurl allowed all protocols on redirect except those disabled for security
 +reasons: Since 7.19.4 FILE and SCP are disabled, and since 7.40.0 SMB and SMBS
 +are also disabled.
 +
 +When following a Location:, the 3xx response code that redirected it also
 +dictates which request method it will use in the subsequent request: For 301,
 +302 and 303 responses libcurl will switch method from POST to GET unless
 +\fICURLOPT_POSTREDIR(3)\fP instructs libcurl otherwise. All other 3xx codes
 +will make libcurl send the same method again.
 +
 +For users who think the existing location following is too naive, too simple
 +or just lacks features, it is very easy to instead implement your own redirect
 +follow logic with the use of \fIcurl_easy_getinfo(3)\fP's
 +\fICURLINFO_REDIRECT_URL(3)\fP option instead of using
 +\fICURLOPT_FOLLOWLOCATION(3)\fP.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* example.com is redirected, so we tell libcurl to follow redirection */
 +  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 +
 +  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_REDIR_PROTOCOLS "(3), " CURLOPT_PROTOCOLS "(3), "
 +.BR CURLOPT_POSTREDIR "(3), "
 +.BR CURLINFO_REDIRECT_URL "(3), " CURLINFO_REDIRECT_COUNT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FORBID_REUSE.3
index 6135d29ed,000000000..4bc0c2715
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FORBID_REUSE.3
+++ b/docs/libcurl/opts/GNURLOPT_FORBID_REUSE.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FORBID_REUSE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FORBID_REUSE \- make connection get closed at once after use
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FORBID_REUSE, long close);
 +.SH DESCRIPTION
 +Pass a long. Set \fIclose\fP to 1 to make libcurl explicitly close the
 +connection when done with the transfer. Normally, libcurl keeps all
 +connections alive when done with one transfer in case a succeeding one follows
 +that can re-use them.  This option should be used with caution and only if you
 +understand what it does as it can seriously impact performance.
 +
 +Set to 0 to have libcurl keep the connection open for possible later re-use
 +(default behavior).
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +{
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_FORBID_REUSE, 1L);
 +  curl_easy_perform(curl);
 +
 +  /* this second transfer may not reuse the same connection */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_FRESH_CONNECT "(3), " CURLOPT_MAXCONNECTS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FRESH_CONNECT.3
index e84d7db8f,000000000..5aad37d3f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FRESH_CONNECT.3
+++ b/docs/libcurl/opts/GNURLOPT_FRESH_CONNECT.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FRESH_CONNECT 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FRESH_CONNECT \- force a new connection to be used
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FRESH_CONNECT, long fresh);
 +.SH DESCRIPTION
 +Pass a long. Set to 1 to make the next transfer use a new (fresh) connection
 +by force instead of trying to re-use an existing one.  This option should be
 +used with caution and only if you understand what it does as it may seriously
 +impact performance.
 +
 +Related functionality is \fICURLOPT_FORBID_REUSE(3)\fP which makes sure the
 +connection is closed after use so that it won't be re-used.
 +
 +Set \fIfresh\fP to 0 to have libcurl attempt re-using an existing connection
 +(default behavior).
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +{
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_FRESH_CONNECT, 1L);
 +  /* this transfer must use a new connection, not reuse an existing */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_FORBID_REUSE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTPPORT.3
index e217fcde4,000000000..e228d30e0
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTPPORT.3
+++ b/docs/libcurl/opts/GNURLOPT_FTPPORT.3
@@@ -1,83 -1,0 +1,83 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FTPPORT 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FTPPORT \- make FTP transfer active
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPPORT, char *spec);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. It specifies that the
 +FTP transfer will be made actively and the given string will be used to get
 +the IP address to use for the FTP PORT instruction.
 +
 +The PORT instruction tells the remote server to connect to our specified IP
 +address. The string may be a plain IP address, a host name, a network
 +interface name (under Unix) or just a '-' symbol to let the library use your
 +system's default IP address. Default FTP operations are passive, and thus
 +won't use PORT.
 +
 +The address can be followed by a ':' to specify a port, optionally followed by
 +a '-' to specify a port range.  If the port specified is 0, the operating
 +system will pick a free port.  If a range is provided and all ports in the
 +range are not available, libcurl will report CURLE_FTP_PORT_FAILED for the
 +handle.  Invalid port/range settings are ignored.  IPv6 addresses followed by
 +a port or portrange have to be in brackets.  IPv6 addresses without port/range
 +specifier can be in brackets.
 +
 +Examples with specified ports:
 +
 +.nf
 +  eth0:0
 +  192.168.1.2:32000-33000
 +  curl.se:32123
 +  [::1]:1234-4567
 +.fi
 +
 +You disable PORT again and go back to using the passive version by setting
 +this option to NULL.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +FTP
 +.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_FTPPORT, "-");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Port range support was added in 7.19.5
 +.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_FTP_USE_EPRT "(3), " CURLOPT_FTP_USE_EPSV "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTPSSLAUTH.3
index ee161143d,000000000..f625a714e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTPSSLAUTH.3
+++ b/docs/libcurl/opts/GNURLOPT_FTPSSLAUTH.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FTPSSLAUTH 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FTPSSLAUTH \- set order in which to attempt TLS vs SSL when using FTP
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTPSSLAUTH, long order);
 +.SH DESCRIPTION
 +Pass a long using one of the values from below, to alter how libcurl issues
 +\&"AUTH TLS" or "AUTH SSL" when FTP over SSL is activated. This is only
 +interesting if \fICURLOPT_USE_SSL(3)\fP is also set.
 +
 +Possible \fIorder\fP values:
 +.IP CURLFTPAUTH_DEFAULT
 +Allow libcurl to decide.
 +.IP CURLFTPAUTH_SSL
 +Try "AUTH SSL" first, and only if that fails try "AUTH TLS".
 +.IP CURLFTPAUTH_TLS
 +Try "AUTH TLS" first, and only if that fails try "AUTH SSL".
 +.SH DEFAULT
 +CURLFTPAUTH_DEFAULT
 +.SH PROTOCOLS
 +FTP
 +.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_USE_SSL, CURLUSESSL_TRY);
 +  /* funny server, ask for SSL before TLS */
 +  curl_easy_setopt(curl, CURLOPT_FTPSSLAUTH, CURLFTPAUTH_SSL);
 +  ret = curl_easy_perform(curl);
 +  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 CURLOPT_USE_SSL "(3), " CURLOPT_FTP_SSL_CCC "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTP_ACCOUNT.3
index d3b16a6ef,000000000..b05577ea0
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTP_ACCOUNT.3
+++ b/docs/libcurl/opts/GNURLOPT_FTP_ACCOUNT.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ACCOUNT 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FTP_ACCOUNT \- set account info for FTP
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ACCOUNT, char *account);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string (or NULL to disable). When an FTP
 +server asks for "account data" after user name and password has been provided,
 +this data is sent off using the ACCT command.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin";);
 +
 +  curl_easy_setopt(curl, CURLOPT_FTP_ACCOUNT, "human-resources");
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.13.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_USERNAME "(3), " CURLOPT_PASSWORD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTP_ALTERNATIVE_TO_USER.3
index b3f1addac,000000000..cef286aa0
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTP_ALTERNATIVE_TO_USER.3
+++ b/docs/libcurl/opts/GNURLOPT_FTP_ALTERNATIVE_TO_USER.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2014, 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ALTERNATIVE_TO_USER 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_FTP_ALTERNATIVE_TO_USER \- command to use instead of USER with FTP
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_ALTERNATIVE_TO_USER,
 +                          char *cmd);
 +.SH DESCRIPTION
 +Pass a char * as parameter, pointing to a string which will be used to
 +authenticate if the usual FTP "USER user" and "PASS password" negotiation
 +fails. This is currently only known to be required when connecting to
 +Tumbleweed's Secure Transport FTPS server using client certificates for
 +authentication.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin";);
 +
 +  curl_easy_setopt(curl, CURLOPT_FTP_ALTERNATIVE_TO_USER, "two users");
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.5
 +.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_FTP_SKIP_PASV_IP "(3), " CURLOPT_FTP_RESPONSE_TIMEOUT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTP_CREATE_MISSING_DIRS.3
index a112447f9,000000000..7215affd6
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTP_CREATE_MISSING_DIRS.3
+++ b/docs/libcurl/opts/GNURLOPT_FTP_CREATE_MISSING_DIRS.3
@@@ -1,81 -1,0 +1,81 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2014, 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CREATE_MISSING_DIRS 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_FTP_CREATE_MISSING_DIRS \- create missing dirs for FTP and SFTP
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +typedef enum {
 +  CURLFTP_CREATE_DIR_NONE,
 +  CURLFTP_CREATE_DIR,
 +  CURLFTP_CREATE_DIR_RETRY
 +} curl_ftpcreatedir;
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_CREATE_MISSING_DIRS,
 +                          long create);
 +.SH DESCRIPTION
 +Pass a long telling libcurl to \fIcreate\fP the dir. If the value is
 +\fICURLFTP_CREATE_DIR\fP (1), libcurl will attempt to create any remote
 +directory that it fails to "move" into.
 +
 +For FTP requests, that means a CWD command fails. CWD being the command that
 +changes working directory.
 +
 +For SFTP requests, libcurl will attempt to create the remote directory if it
 +can't obtain a handle to the target-location. The creation will fail if a file
 +of the same name as the directory to create already exists or lack of
 +permissions prevents creation.
 +
 +Setting \fIcreate\fP to \fICURLFTP_CREATE_DIR_RETRY\fP (2), tells libcurl to
 +retry the CWD command again if the subsequent MKD command fails. This is
 +especially useful if you're doing many simultaneous connections against the
 +same server and they all have this option enabled, as then CWD may first fail
 +but then another connection does MKD before this connection and thus MKD fails
 +but trying CWD works!
 +.SH DEFAULT
 +CURLFTP_CREATE_DIR_NONE (0)
 +.SH PROTOCOLS
 +FTP and SFTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, 
"ftp://example.com/non-existing/new.txt";);
 +  curl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS,
 +                         CURLFTP_CREATE_DIR_RETRY);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.10.7. SFTP support added in 7.16.3. The retry option was added in
 +7.19.4.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if the
 +create value is not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_FTP_FILEMETHOD "(3), " CURLOPT_FTP_USE_EPSV "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTP_FILEMETHOD.3
index 9c616e629,000000000..7df3fa9a6
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTP_FILEMETHOD.3
+++ b/docs/libcurl/opts/GNURLOPT_FTP_FILEMETHOD.3
@@@ -1,73 -1,0 +1,73 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FILEMETHOD 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_FTP_FILEMETHOD \- select directory traversing method for FTP
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_FILEMETHOD,
 +                          long method);
 +.SH DESCRIPTION
 +Pass a long telling libcurl which \fImethod\fP to use to reach a file on a
 +FTP(S) server.
 +
 +This option exists because some server implementations aren't compliant to
 +what the standards say should work.
 +
 +The argument should be one of the following alternatives:
 +.IP CURLFTPMETHOD_MULTICWD
 +libcurl does a single CWD operation for each path part in the given URL. For
 +deep hierarchies this means many commands. This is how RFC1738 says it should
 +be done. This is the default but the slowest behavior.
 +.IP CURLFTPMETHOD_NOCWD
 +libcurl does no CWD at all. libcurl will do SIZE, RETR, STOR etc and give a
 +full path to the server for all these commands. This is the fastest behavior.
 +.IP CURLFTPMETHOD_SINGLECWD
 +libcurl does one CWD with the full target directory and then operates on the
 +file \&"normally" (like in the multicwd case). This is somewhat more standards
 +compliant than 'nocwd' but without the full penalty of 'multicwd'.
 +.SH DEFAULT
 +CURLFTPMETHOD_MULTICWD
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/1/2/3/4/new.txt";);
 +  curl_easy_setopt(curl, CURLOPT_FTP_FILEMETHOD,
 +                         CURLFTPMETHOD_SINGLECWD);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.1
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_DIRLISTONLY "(3), " CURLOPT_FTP_SKIP_PASV_IP "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTP_RESPONSE_TIMEOUT.3
index b87e0b522,000000000..1ded77eb1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTP_RESPONSE_TIMEOUT.3
+++ b/docs/libcurl/opts/GNURLOPT_FTP_RESPONSE_TIMEOUT.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_RESPONSE_TIMEOUT 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_FTP_RESPONSE_TIMEOUT \- time allowed to wait for FTP response
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_RESPONSE_TIMEOUT, long 
timeout);
 +.SH DESCRIPTION
 +Pass a long.  Causes libcurl to set a \fItimeout\fP period (in seconds) on the
 +amount of time that the server is allowed to take in order to send a response
 +message for a command before the session is considered dead.  While libcurl is
 +waiting for a response, this value overrides \fICURLOPT_TIMEOUT(3)\fP. It is
 +recommended that if used in conjunction with \fICURLOPT_TIMEOUT(3)\fP, you set
 +\fICURLOPT_FTP_RESPONSE_TIMEOUT(3)\fP to a value smaller than
 +\fICURLOPT_TIMEOUT(3)\fP.
 +.SH DEFAULT
 +None
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/slow.txt";);
 +  /* wait no more than 23 seconds */
 +  curl_easy_setopt(curl, CURLOPT_FTP_RESPONSE_TIMEOUT, 23L);
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.10.8
 +.SH RETURN VALUE
 +Returns CURLE_OK if FTP is supported, and CURLE_UNKNOWN_OPTION if not. Returns
 +CURLE_BAD_FUNCTION_ARGUMENT if set to a negative value or a value that when
 +converted to milliseconds is too large.
 +.SH "SEE ALSO"
 +.BR CURLOPT_TIMEOUT "(3), " CURLOPT_CONNECTTIMEOUT "(3), "
 +.BR CURLOPT_LOW_SPEED_LIMIT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTP_SKIP_PASV_IP.3
index a8b8eeeef,000000000..08307d9d6
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTP_SKIP_PASV_IP.3
+++ b/docs/libcurl/opts/GNURLOPT_FTP_SKIP_PASV_IP.3
@@@ -1,63 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SKIP_PASV_IP 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_FTP_SKIP_PASV_IP \- ignore the IP address in the PASV response
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SKIP_PASV_IP, long skip);
 +.SH DESCRIPTION
 +Pass a long. If \fIskip\fP is set to 1, it instructs libcurl to not use the IP
 +address the server suggests in its 227-response to libcurl's PASV command when
 +libcurl connects the data connection. Instead libcurl will re-use the same IP
 +address it already uses for the control connection. But it will use the port
 +number from the 227-response.
 +
 +This option thus allows libcurl to work around broken server installations
- that due to NATs, firewalls or incompetence report the wrong IP address back.
++that due to NATs, firewalls or incompetence report the wrong IP address
++back. Setting the option also reduces the risk for various sorts of client
++abuse by malicious servers.
 +
 +This option has no effect if PORT, EPRT or EPSV is used instead of PASV.
 +.SH DEFAULT
- 0
++1 since 7.74.0, was 0 before then.
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/file.txt";);
 +
 +  /* please ignore the IP in the PASV response */
 +  curl_easy_setopt(curl, CURLOPT_FTP_SKIP_PASV_IP, 1L);
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.14.2
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_FTPPORT "(3), " CURLOPT_FTP_USE_EPRT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTP_SSL_CCC.3
index d1d243c18,000000000..d88abdf60
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTP_SSL_CCC.3
+++ b/docs/libcurl/opts/GNURLOPT_FTP_SSL_CCC.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSL_CCC 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FTP_SSL_CCC \- switch off SSL again with FTP after auth
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_SSL_CCC,
 +                          long how);
 +.SH DESCRIPTION
 +If enabled, this option makes libcurl use CCC (Clear Command Channel). It
 +shuts down the SSL/TLS layer after authenticating. The rest of the control
 +channel communication will be unencrypted. This allows NAT routers to follow
 +the FTP transaction. Pass a long using one of the values below
 +.IP CURLFTPSSL_CCC_NONE
 +Don't attempt to use CCC.
 +.IP CURLFTPSSL_CCC_PASSIVE
 +Do not initiate the shutdown, but wait for the server to do it. Do not send a
 +reply.
 +.IP CURLFTPSSL_CCC_ACTIVE
 +Initiate the shutdown and wait for a reply.
 +.SH DEFAULT
 +CURLFTPSSL_CCC_NONE
 +.SH PROTOCOLS
 +FTP
 +.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_USE_SSL, CURLUSESSL_CONTROL);
 +  /* go back to clear-text FTP after authenticating */
 +  curl_easy_setopt(curl, CURLOPT_FTP_SSL_CCC, CURLFTPSSL_CCC_ACTIVE);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.1
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_USE_SSL "(3), " CURLOPT_FTPSSLAUTH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTP_USE_EPRT.3
index 9c6cd6365,000000000..7b3f6cfde
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FTP_USE_EPSV.3
index 7bcdb6649,000000000..ff8e9620a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTP_USE_EPSV.3
+++ b/docs/libcurl/opts/GNURLOPT_FTP_USE_EPSV.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2014, 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_EPSV 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FTP_USE_EPSV \- enable/disable use of EPSV
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_EPSV, long epsv);
 +.SH DESCRIPTION
 +Pass \fIepsv\fP as a long. If the value is 1, it tells curl to use the EPSV
 +command when doing passive FTP downloads (which it does by default). Using
 +EPSV means that it will first attempt to use EPSV before using PASV, but if
 +you pass zero to this option, it will not try using EPSV, only plain PASV.
 +
 +If the server is an IPv6 host, this option will have no effect as of 7.12.3.
 +.SH DEFAULT
 +1
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, 
"ftp://example.com/old-server/file.txt";);
 +
 +  /* let's shut off this modern feature */
 +  curl_easy_setopt(curl, CURLOPT_FTP_USE_EPSV, 0L);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with FTP
 +.SH RETURN VALUE
 +Returns CURLE_OK if FTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_FTP_USE_EPRT "(3), " CURLOPT_FTPPORT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_FTP_USE_PRET.3
index ded3b1f70,000000000..b7b38c8c5
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_FTP_USE_PRET.3
+++ b/docs/libcurl/opts/GNURLOPT_FTP_USE_PRET.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PRET 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_FTP_USE_PRET \- enable the PRET command
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_FTP_USE_PRET, long enable);
 +.SH DESCRIPTION
 +Pass a long. If the value is 1, it tells curl to send a PRET command before
 +PASV (and EPSV). Certain FTP servers, mainly drftpd, require this non-standard
 +command for directory listings as well as up and downloads in PASV mode. Has
 +no effect when using the active FTP transfers mode.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, 
"ftp://example.com/old-server/file.txt";);
 +
 +  /* a drftpd server, do it! */
 +  curl_easy_setopt(curl, CURLOPT_FTP_USE_PRET, 1L);
 +
 +  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_FTP_USE_EPRT "(3), " CURLOPT_FTP_USE_EPSV "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_GSSAPI_DELEGATION.3
index 2ee67395d,000000000..91d16bacb
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_GSSAPI_DELEGATION.3
+++ b/docs/libcurl/opts/GNURLOPT_GSSAPI_DELEGATION.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_GSSAPI_DELEGATION 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_GSSAPI_DELEGATION \- set allowed GSS-API delegation
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_GSSAPI_DELEGATION, long 
level);
 +.SH DESCRIPTION
 +Set the long parameter \fIlevel\fP to \fBCURLGSSAPI_DELEGATION_FLAG\fP to
 +allow unconditional GSSAPI credential delegation. The delegation is disabled
 +by default since 7.21.7.  Set the parameter to
 +\fBCURLGSSAPI_DELEGATION_POLICY_FLAG\fP to delegate only if the OK-AS-DELEGATE
 +flag is set in the service ticket in case this feature is supported by the
 +GSS-API implementation and the definition of GSS_C_DELEG_POLICY_FLAG was
 +available at compile-time.
 +.SH DEFAULT
 +CURLGSSAPI_DELEGATION_NONE
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* delegate if okayed by policy */
 +  curl_easy_setopt(curl, CURLOPT_GSSAPI_DELEGATION,
 +                         CURLGSSAPI_DELEGATION_POLICY_FLAG);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +
 +.SH AVAILABILITY
 +Added in 7.22.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HTTPAUTH "(3), " CURLOPT_PROXYAUTH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3
index 9c8ed42f1,000000000..d6ee0cb57
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HAPROXYPROTOCOL.3
index 4d15b6479,000000000..4b9d7ebb5
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HAPROXYPROTOCOL.3
+++ b/docs/libcurl/opts/GNURLOPT_HAPROXYPROTOCOL.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HAPROXYPROTOCOL 3 "5 Feb 2018" "libcurl 7.60.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_HAPROXYPROTOCOL \- send HAProxy PROXY protocol v1 header
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HAPROXYPROTOCOL,
 +                          long haproxy_protocol);
 +.SH DESCRIPTION
 +A long parameter set to 1 tells the library to send an HAProxy PROXY
 +protocol v1 header at beginning of the connection. The default action is not 
to
 +send this header.
 +
 +This option is primarily useful when sending test requests to a service that
 +expects this header.
 +
 +Most applications do not need this option.
 +.SH DEFAULT
 +0, do not send any HAProxy PROXY protocol header
 +.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_HAPROXYPROTOCOL, 1L);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with HTTP. Added in 7.60.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not.
diff --cc docs/libcurl/opts/GNURLOPT_HEADER.3
index 325014871,000000000..3cb7df200
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HEADER.3
+++ b/docs/libcurl/opts/GNURLOPT_HEADER.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HEADER 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_HEADER \- pass headers to the data stream
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADER, long onoff);
 +.SH DESCRIPTION
 +Pass the long value \fIonoff\fP set to 1 to ask libcurl to include the headers
 +in the write callback (\fICURLOPT_WRITEFUNCTION(3)\fP). This option is
 +relevant for protocols that actually have headers or other meta-data (like
 +HTTP and FTP).
 +
 +When asking to get the headers passed to the same callback as the body, it is
 +not possible to accurately separate them again without detailed knowledge
 +about the protocol in use.
 +
 +Further: the \fICURLOPT_WRITEFUNCTION(3)\fP callback is limited to only ever
 +get a maximum of \fICURL_MAX_WRITE_SIZE\fP bytes passed to it (16KB), while a
 +header can be longer and the \fICURLOPT_HEADERFUNCTION(3)\fP supports getting
 +called with headers up to \fICURL_MAX_HTTP_HEADER\fP bytes big (100KB).
 +
 +It is often better to use \fICURLOPT_HEADERFUNCTION(3)\fP to get the header
 +data separately.
 +
 +While named confusingly similar, \fICURLOPT_HTTPHEADER(3)\fP is used to set
 +custom HTTP headers!
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  curl_easy_setopt(curl, CURLOPT_HEADER, 1L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH RETURN VALUE
 +Returns CURLE_OK.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HEADERFUNCTION "(3), "
 +.BR CURLOPT_HTTPHEADER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HEADERDATA.3
index 84c573498,000000000..fadf8c190
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HEADERDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_HEADERDATA.3
@@@ -1,78 -1,0 +1,78 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HEADERDATA 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_HEADERDATA \- pointer to pass to header callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADERDATA, void *pointer);
 +.SH DESCRIPTION
 +Pass a \fIpointer\fP to be used to write the header part of the received data
 +to.
 +
 +If \fICURLOPT_WRITEFUNCTION(3)\fP or \fICURLOPT_HEADERFUNCTION(3)\fP is used,
 +\fIpointer\fP will be passed in to the respective callback.
 +
 +If neither of those options are set, \fIpointer\fP must be a valid FILE * and
 +it will be used by a plain fwrite() to write headers to.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +struct my_info {
 +  int shoesize;
 +  char *secret;
 +};
 +
 +static size_t header_callback(char *buffer, size_t size,
 +                              size_t nitems, void *userdata)
 +{
 +  struct my_info *i = (struct my_info *)userdata;
 +
 +  /* now this callback can access the my_info struct */
 +
 +  return nitems * size;
 +}
 +
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct my_info my = { 10, "the cookies are in the cupboard" };
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
 +
 +  /* pass in custom data to the callback */
 +  curl_easy_setopt(curl, CURLOPT_HEADERDATA, &my);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_HEADERFUNCTION "(3), " CURLOPT_WRITEFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HEADERFUNCTION.3
index c62390b5d,000000000..bbd8a731e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HEADERFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_HEADERFUNCTION.3
@@@ -1,117 -1,0 +1,117 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HEADERFUNCTION 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_HEADERFUNCTION \- callback that receives header data
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +size_t header_callback(char *buffer,
 +                       size_t size,
 +                       size_t nitems,
 +                       void *userdata);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADERFUNCTION, 
header_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This function gets called by libcurl as soon as it has received header
 +data. The header callback will be called once for each header and only
 +complete header lines are passed on to the callback. Parsing headers is very
 +easy using this. \fIbuffer\fP points to the delivered data, and the size of
 +that data is \fInitems\fP; \fIsize\fP is always 1. Do not assume that the
 +header line is null-terminated!
 +
 +The pointer named \fIuserdata\fP is the one you set with the
 +\fICURLOPT_HEADERDATA(3)\fP option.
 +
 +This callback function must return the number of bytes actually taken care of.
 +If that amount differs from the amount passed in to your function, it'll 
signal
 +an error to the library. This will cause the transfer to get aborted and the
 +libcurl function in progress will return \fICURLE_WRITE_ERROR\fP.
 +
 +A complete HTTP header that is passed to this function can be up to
 +\fICURL_MAX_HTTP_HEADER\fP (100K) bytes and includes the final line 
terminator.
 +
 +If this option is not set, or if it is set to NULL, but
 +\fICURLOPT_HEADERDATA(3)\fP is set to anything but NULL, the function used to
 +accept response data will be used instead. That is, it will be the function
 +specified with \fICURLOPT_WRITEFUNCTION(3)\fP, or if it is not specified or
 +NULL - the default, stream-writing function.
 +
 +It's important to note that the callback will be invoked for the headers of
 +all responses received after initiating a request and not just the final
 +response. This includes all responses which occur during authentication
 +negotiation. If you need to operate on only the headers from the final
 +response, you will need to collect headers in the callback yourself and use
 +HTTP status lines, for example, to delimit response boundaries.
 +
 +For an HTTP transfer, the status line and the blank line preceding the 
response
 +body are both included as headers and passed to this function.
 +
 +When a server sends a chunked encoded transfer, it may contain a trailer. That
 +trailer is identical to an HTTP header and if such a trailer is received it is
 +passed to the application using this callback as well. There are several ways
 +to detect it being a trailer and not an ordinary header: 1) it comes after the
 +response-body. 2) it comes after the final header line (CR LF) 3) a Trailer:
 +header among the regular response-headers mention what header(s) to expect in
 +the trailer.
 +
 +For non-HTTP protocols like FTP, POP3, IMAP and SMTP this function will get
 +called with the server responses to the commands that libcurl sends.
 +.SH LIMITATIONS
 +libcurl does not unfold HTTP "folded headers" (deprecated since RFC 7230). A
 +folded header is a header that continues on a subsequent line and starts with
 +a whitespace. Such folds will be passed to the header callback as a separate
 +one, although strictly it is just a continuation of the previous line.
 +.SH DEFAULT
 +Nothing.
 +.SH PROTOCOLS
 +Used for all protocols with headers or meta-data concept: HTTP, FTP, POP3,
 +IMAP, SMTP and more.
 +.SH EXAMPLE
 +.nf
 +static size_t header_callback(char *buffer, size_t size,
 +                              size_t nitems, void *userdata)
 +{
 +  /* received header is nitems * size long in 'buffer' NOT ZERO TERMINATED */
 +  /* 'userdata' is set with CURLOPT_HEADERDATA */
 +  return nitems * size;
 +}
 +
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  curl_easy_setopt(curl, CURLOPT_HEADERFUNCTION, header_callback);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_HEADERDATA "(3), " CURLOPT_WRITEFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HEADEROPT.3
index 1171657fd,000000000..16d6521b3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HEADEROPT.3
+++ b/docs/libcurl/opts/GNURLOPT_HEADEROPT.3
@@@ -1,76 -1,0 +1,76 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HEADEROPT 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_HEADEROPT \- set how to send HTTP headers
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HEADEROPT, long bitmask);
 +.SH DESCRIPTION
 +Pass a long that is a bitmask of options of how to deal with headers. The two
 +mutually exclusive options are:
 +
 +\fBCURLHEADER_UNIFIED\fP - the headers specified in
 +\fICURLOPT_HTTPHEADER(3)\fP will be used in requests both to servers and
 +proxies. With this option enabled, \fICURLOPT_PROXYHEADER(3)\fP will not have
 +any effect.
 +
 +\fBCURLHEADER_SEPARATE\fP - makes \fICURLOPT_HTTPHEADER(3)\fP headers only get
 +sent to a server and not to a proxy. Proxy headers must be set with
 +\fICURLOPT_PROXYHEADER(3)\fP to get used. Note that if a non-CONNECT request
 +is sent to a proxy, libcurl will send both server headers and proxy
 +headers. When doing CONNECT, libcurl will send \fICURLOPT_PROXYHEADER(3)\fP
 +headers only to the proxy and then \fICURLOPT_HTTPHEADER(3)\fP headers only to
 +the server.
 +.SH DEFAULT
 +CURLHEADER_SEPARATE (changed in 7.42.1, used CURLHEADER_UNIFIED before then)
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  struct curl_slist *list;
 +  list = curl_slist_append(NULL, "Shoesize: 10");
 +  list = curl_slist_append(list, "Accept:");
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080";);
 +  curl_easy_setopt(curl, CURLOPT_HTTPHEADER, list);
 +
 +  /* HTTPS over a proxy makes a separate CONNECT to the proxy, so tell
 +     libcurl to not send the custom headers to the proxy. Keep them
 +     separate! */
 +  curl_easy_setopt(curl, CURLOPT_HEADEROPT, CURLHEADER_SEPARATE);
 +  ret = curl_easy_perform(curl);
 +  curl_slist_free_all(list);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.37.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HTTPHEADER "(3), " CURLOPT_PROXYHEADER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HTTP09_ALLOWED.3
index 8856c1a19,000000000..45c4e38c9
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HTTP09_ALLOWED.3
+++ b/docs/libcurl/opts/GNURLOPT_HTTP09_ALLOWED.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTP09_ALLOWED 3 "17 Dec 2018" "libcurl 7.64.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_HTTP09 \- allow HTTP/0.9 response
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP09_ALLOWED, long allowed);
 +.SH DESCRIPTION
 +Pass the long argument \fIallowed\fP set to 1L to allow HTTP/0.9 responses.
 +
 +A HTTP/0.9 response is a server response entirely without headers and only a
 +body. You can connect to lots of random TCP services and still get a response
 +that curl might consider to be HTTP/0.9!
 +.SH DEFAULT
 +curl allowed HTTP/0.9 responses by default before 7.66.0
 +
 +Since 7.66.0, libcurl requires this option set to 1L to allow HTTP/0.9
 +responses.
 +.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_HTTP09_ALLOWED, 1L);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Option added in 7.64.0, present along with HTTP.
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSLVERSION "(3), " CURLOPT_HTTP_VERSION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HTTP200ALIASES.3
index b0edad006,000000000..4de2797b2
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HTTP200ALIASES.3
+++ b/docs/libcurl/opts/GNURLOPT_HTTP200ALIASES.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTP200ALIASES 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_HTTP200ALIASES \- specify alternative matches for HTTP 200 OK
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP200ALIASES,
 +                          struct curl_slist *aliases);
 +.SH DESCRIPTION
 +Pass a pointer to a linked list of \fIaliases\fP to be treated as valid HTTP
 +200 responses.  Some servers respond with a custom header response line.  For
 +example, SHOUTcast servers respond with "ICY 200 OK". Also some very old
 +Icecast 1.3.x servers will respond like that for certain user agent headers or
 +in absence of such. By including this string in your list of aliases,
 +the response will be treated as a valid HTTP header line such as
 +"HTTP/1.0 200 OK".
 +
 +The linked list should be a fully valid list of struct curl_slist structs, and
 +be 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.
 +
 +The alias itself is not parsed for any version strings. The protocol is
 +assumed to match HTTP 1.0 when an alias match.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct curl_slist *list;
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  list = curl_slist_append(NULL, "ICY 200 OK");
 +  list = curl_slist_append(list, "WEIRDO 99 FINE");
 +
 +  curl_easy_setopt(curl, CURLOPT_HTTP200ALIASES, list);
 +  curl_easy_perform(curl);
 +  curl_slist_free_all(list); /* free the list again */
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.10.3
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HTTP_VERSION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HTTPAUTH.3
index 13b7c1f52,000000000..3c5b06d8c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HTTPAUTH.3
+++ b/docs/libcurl/opts/GNURLOPT_HTTPAUTH.3
@@@ -1,132 -1,0 +1,132 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTPAUTH 3 "2 Aug 2014" "libcurl 7.38.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_HTTPAUTH \- set HTTP server authentication methods to try
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPAUTH, long bitmask);
 +.SH DESCRIPTION
 +Pass a long as parameter, which is set to a bitmask, to tell libcurl which
 +authentication method(s) you want it to use speaking to the remote server.
 +
 +The available bits are listed below. If more than one bit is set, libcurl will
 +first query the site to see which authentication methods it supports and then
 +pick the best one you allow it to use. For some methods, this will induce an
 +extra network round-trip. Set the actual name and password with the
 +\fICURLOPT_USERPWD(3)\fP option or with the \fICURLOPT_USERNAME(3)\fP and the
 +\fICURLOPT_PASSWORD(3)\fP options.
 +
 +For authentication with a proxy, see \fICURLOPT_PROXYAUTH(3)\fP.
 +
 +.IP CURLAUTH_BASIC
 +HTTP Basic authentication. This is the default choice, and the only method
 +that is in wide-spread use and supported virtually everywhere. This sends
 +the user name and password over the network in plain text, easily captured by
 +others.
 +.IP CURLAUTH_DIGEST
 +HTTP Digest authentication.  Digest authentication is defined in RFC2617 and
 +is a more secure way to do authentication over public networks than the
 +regular old-fashioned Basic method.
 +.IP CURLAUTH_DIGEST_IE
 +HTTP Digest authentication with an IE flavor.  Digest authentication is
 +defined in RFC2617 and is a more secure way to do authentication over public
 +networks than the regular old-fashioned Basic method. The IE flavor is simply
 +that libcurl will use a special "quirk" that IE is known to have used before
 +version 7 and that some servers require the client to use.
 +.IP CURLAUTH_BEARER
 +HTTP Bearer token authentication, used primarily in OAuth 2.0 protocol.
 +
 +You can set the Bearer token to use with \fICURLOPT_XOAUTH2_BEARER(3)\fP.
 +.IP CURLAUTH_NEGOTIATE
 +HTTP Negotiate (SPNEGO) authentication. Negotiate authentication is defined
 +in RFC 4559 and is the most secure way to perform authentication over HTTP.
 +
 +You need to build libcurl with a suitable GSS-API library or SSPI on Windows
 +for this to work.
 +.IP CURLAUTH_NTLM
 +HTTP NTLM authentication. A proprietary protocol invented and used by
 +Microsoft. It uses a challenge-response and hash concept similar to Digest, to
 +prevent the password from being eavesdropped.
 +
 +You need to build libcurl with either OpenSSL, GnuTLS or NSS support for this
 +option to work, or build libcurl on Windows with SSPI support.
 +.IP CURLAUTH_NTLM_WB
 +NTLM delegating to winbind helper. Authentication is performed by a separate
 +binary application that is executed when needed. The name of the application
 +is specified at compile time but is typically /usr/bin/ntlm_auth
 +
 +Note that libcurl will fork when necessary to run the winbind application and
 +kill it when complete, calling waitpid() to await its exit when done. On POSIX
 +operating systems, killing the process will cause a SIGCHLD signal to be
 +raised (regardless of whether \fICURLOPT_NOSIGNAL(3)\fP is set), which must be
 +handled intelligently by the application. In particular, the application must
 +not unconditionally call wait() in its SIGCHLD signal handler to avoid being
 +subject to a race condition.  This behavior is subject to change in future
 +versions of libcurl.
 +.IP CURLAUTH_ANY
 +This is a convenience macro that sets all bits and thus makes libcurl pick any
 +it finds suitable. libcurl will automatically select the one it finds most
 +secure.
 +.IP CURLAUTH_ANYSAFE
 +This is a convenience macro that sets all bits except Basic and thus makes
 +libcurl pick any it finds suitable. libcurl will automatically select the one
 +it finds most secure.
 +.IP CURLAUTH_ONLY
 +This is a meta symbol. OR this value together with a single specific auth
 +value to force libcurl to probe for un-restricted auth and if not, only that
 +single auth algorithm is acceptable.
 +.SH DEFAULT
 +CURLAUTH_BASIC
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* allow whatever auth the server speaks */
 +  curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
 +  curl_easy_setopt(curl, CURLOPT_USERPWD, "james:bond");
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Option Added in 7.10.6.
 +
 +CURLAUTH_DIGEST_IE was added in 7.19.3
 +
 +CURLAUTH_ONLY was added in 7.21.3
 +
 +CURLAUTH_NTLM_WB was added in 7.22.0
 +
 +CURLAUTH_BEARER was added in 7.61.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_NOT_BUILT_IN if the bitmask specified no supported authentication
 +methods.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXYAUTH "(3), " CURLOPT_USERPWD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HTTPGET.3
index cb2006640,000000000..60146e448
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HTTPGET.3
+++ b/docs/libcurl/opts/GNURLOPT_HTTPGET.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTPGET 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_HTTPGET \- ask for an HTTP GET request
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPGET, long useget);
 +.SH DESCRIPTION
 +Pass a long. If \fIuseget\fP is 1, this forces the HTTP request to get back to
 +using GET. Usable if a POST, HEAD, PUT, etc has been used previously using the
 +same curl \fIhandle\fP.
 +
 +When setting \fICURLOPT_HTTPGET(3)\fP to 1, it will automatically set
 +\fICURLOPT_NOBODY(3)\fP to 0 and \fICURLOPT_UPLOAD(3)\fP to 0.
 +
 +Setting this option to zero has no effect. Applications need to explicitly
 +select which HTTP request method to use, they cannot deselect a method. To
 +reset a handle to default method, consider \fIcurl_easy_reset(3)\fP.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* use a GET to fetch this */
 +  curl_easy_setopt(curl, CURLOPT_HTTPGET, 1L);
 +
 +  /* 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_NOBODY "(3), " CURLOPT_UPLOAD "(3), " CURLOPT_POST "(3), "
 +.BR curl_easy_reset "(3) "
diff --cc docs/libcurl/opts/GNURLOPT_HTTPHEADER.3
index 017cb0a37,000000000..02a87fbb4
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_HTTPPOST.3
index 7001c7f0a,000000000..0a0f8f064
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HTTPPOST.3
+++ b/docs/libcurl/opts/GNURLOPT_HTTPPOST.3
@@@ -1,82 -1,0 +1,82 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTPPOST 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_HTTPPOST \- specify the multipart formpost content
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTPPOST,
 +                          struct curl_httppost *formpost);
 +.SH DESCRIPTION
 +Tells libcurl you want a multipart/formdata HTTP POST to be made and you
 +instruct what data to pass on to the server in the \fIformpost\fP argument.
 +Pass a pointer to a linked list of curl_httppost structs as parameter.  The
 +easiest way to create such a list, is to use \fIcurl_formadd(3)\fP as
 +documented. The data in this list must remain intact as long as the curl
 +transfer is alive and is using it.
 +
 +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.
 +
 +When setting \fICURLOPT_HTTPPOST(3)\fP, it will automatically set
 +\fICURLOPT_NOBODY(3)\fP to 0.
 +
 +This option is deprecated! Do not use it. Use \fICURLOPT_MIMEPOST(3)\fP
 +instead after having prepared mime data.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +/* Fill in the file upload field. This makes libcurl load data from
 +   the given file name when curl_easy_perform() is called. */
 +curl_formadd(&formpost,
 +             &lastptr,
 +             CURLFORM_COPYNAME, "sendfile",
 +             CURLFORM_FILE, "postit2.c",
 +             CURLFORM_END);
 +
 +/* Fill in the filename field */
 +curl_formadd(&formpost,
 +             &lastptr,
 +             CURLFORM_COPYNAME, "filename",
 +             CURLFORM_COPYCONTENTS, "postit2.c",
 +             CURLFORM_END);
 +
 +/* Fill in the submit field too, even if this is rarely needed */
 +curl_formadd(&formpost,
 +             &lastptr,
 +             CURLFORM_COPYNAME, "submit",
 +             CURLFORM_COPYCONTENTS, "send",
 +             CURLFORM_END);
 +.fi
 +.SH AVAILABILITY
 +As long as HTTP is enabled. Deprecated in 7.56.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_POSTFIELDS "(3), " CURLOPT_POST "(3), " CURLOPT_MIMEPOST "(3),"
 +.BR curl_formadd "(3), " curl_formfree "(3), " curl_mime_init "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_HTTPPROXYTUNNEL.3
index d4975406f,000000000..da5a18beb
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTP_CONTENT_DECODING.3
index 6a3f64779,000000000..386227140
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HTTP_CONTENT_DECODING.3
+++ b/docs/libcurl/opts/GNURLOPT_HTTP_CONTENT_DECODING.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTP_CONTENT_DECODING 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_HTTP_CONTENT_DECODING \- enable/disable HTTP content decoding
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_CONTENT_DECODING,
 +                          long enabled);
 +.SH DESCRIPTION
 +Pass a long to tell libcurl how to act on content decoding. If set to zero,
 +content decoding will be disabled. If set to 1 it is enabled. Libcurl has no
 +default content decoding but requires you to use
 +\fICURLOPT_ACCEPT_ENCODING(3)\fP for that.
 +.SH DEFAULT
 +1
 +.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_HTTP_CONTENT_DECODING, 0L);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.2
 +.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_ACCEPT_ENCODING "(3) "
diff --cc docs/libcurl/opts/GNURLOPT_HTTP_TRANSFER_DECODING.3
index 0ce86fd68,000000000..0983ecef4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HTTP_TRANSFER_DECODING.3
+++ b/docs/libcurl/opts/GNURLOPT_HTTP_TRANSFER_DECODING.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTP_TRANSFER_DECODING 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_HTTP_TRANSFER_DECODING \- enable/disable HTTP transfer decoding
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_TRANSFER_DECODING,
 +                         long enabled);
 +.SH DESCRIPTION
 +Pass a long to tell libcurl how to act on transfer decoding. If set to zero,
 +transfer decoding will be disabled, if set to 1 it is enabled
 +(default). libcurl does chunked transfer decoding by default unless this
 +option is set to zero.
 +.SH DEFAULT
 +1
 +.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_HTTP_TRANSFER_DECODING, 0L);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.2
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HTTP_CONTENT_DECODING "(3), " CURLOPT_ACCEPT_ENCODING "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_HTTP_VERSION.3
index 2782e69a2,000000000..38657f6ae
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_HTTP_VERSION.3
+++ b/docs/libcurl/opts/GNURLOPT_HTTP_VERSION.3
@@@ -1,93 -1,0 +1,93 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_HTTP_VERSION 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_HTTP_VERSION \- specify HTTP protocol version to use
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_HTTP_VERSION, long version);
 +.SH DESCRIPTION
 +Pass \fIversion\fP a long, set to one of the values described below. They ask
 +libcurl to use the specific HTTP versions.
 +
 +Note that the HTTP version is just a request. libcurl will still prioritize to
 +re-use an existing connection so it might then re-use a connection using a
 +HTTP version you haven't asked for.
 +
 +.IP CURL_HTTP_VERSION_NONE
 +We don't care about what version the library uses. libcurl will use whatever
 +it thinks fit.
 +.IP CURL_HTTP_VERSION_1_0
 +Enforce HTTP 1.0 requests.
 +.IP CURL_HTTP_VERSION_1_1
 +Enforce HTTP 1.1 requests.
 +.IP CURL_HTTP_VERSION_2_0
 +Attempt HTTP 2 requests. libcurl will fall back to HTTP 1.1 if HTTP 2 can't be
 +negotiated with the server. (Added in 7.33.0)
 +
 +The alias \fICURL_HTTP_VERSION_2\fP was added in 7.43.0 to better reflect the
 +actual protocol name.
 +.IP CURL_HTTP_VERSION_2TLS
 +Attempt HTTP 2 over TLS (HTTPS) only. libcurl will fall back to HTTP 1.1 if
 +HTTP 2 can't be negotiated with the HTTPS server. For clear text HTTP servers,
 +libcurl will use 1.1. (Added in 7.47.0)
 +.IP CURL_HTTP_VERSION_2_PRIOR_KNOWLEDGE
 +Issue non-TLS HTTP requests using HTTP/2 without HTTP/1.1 Upgrade. It requires
 +prior knowledge that the server supports HTTP/2 straight away. HTTPS requests
 +will still do HTTP/2 the standard way with negotiated protocol version in the
 +TLS handshake. (Added in 7.49.0)
 +.IP CURL_HTTP_VERSION_3
 +(Added in 7.66.0) Setting this value will make libcurl attempt to use HTTP/3
 +directly to server given in the URL. Note that this cannot gracefully
 +downgrade to earlier HTTP version if the server doesn't support HTTP/3.
 +
 +For more reliably upgrading to HTTP/3, set the preferred version to something
 +lower and let the server announce its HTTP/3 support via Alt-Svc:. See
 +\fICURLOPT_ALTSVC(3)\fP.
 +.SH DEFAULT
 +Since curl 7.62.0: CURL_HTTP_VERSION_2TLS
 +
 +Before that: CURL_HTTP_VERSION_1_1
 +.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_HTTP_VERSION, CURL_HTTP_VERSION_2TLS);
 +  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 supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSLVERSION "(3), " CURLOPT_HTTP200ALIASES "(3), "
 +.BR CURLOPT_HTTP09_ALLOWED "(3), " CURLOPT_ALTSVC "(3) "
diff --cc docs/libcurl/opts/GNURLOPT_IGNORE_CONTENT_LENGTH.3
index bee16681c,000000000..97d668684
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 197f9cd46,000000000..e01995237
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 8a5acfc04,000000000..d05592e93
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_INTERFACE.3
index e93351360,000000000..ba6cfca36
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_INTERFACE.3
+++ b/docs/libcurl/opts/GNURLOPT_INTERFACE.3
@@@ -1,72 -1,0 +1,72 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_INTERFACE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_INTERFACE \- source interface for outgoing traffic
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERFACE, char *interface);
 +.SH DESCRIPTION
 +Pass a char * as parameter. This sets the \fIinterface\fP name to use as
 +outgoing network interface. The name can be an interface name, an IP address,
 +or a host name.
 +
 +If the parameter starts with "if!" then it is treated as only as interface
 +name and no attempt will ever be named to do treat it as an IP address or to
 +do name resolution on it.  If the parameter starts with \&"host!" it is
 +treated as either an IP address or a hostname.  Hostnames are resolved
 +synchronously.  Using the if! format is highly recommended when using the
 +multi interfaces to avoid allowing the code to block.  If "if!" is specified
 +but the parameter does not match an existing interface, CURLE_INTERFACE_FAILED
 +is returned from the libcurl function used to perform the transfer.
 +
 +libcurl does not support using network interface names for this option on
 +Windows.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL, use whatever the TCP stack finds suitable
 +.SH PROTOCOLS
 +All
 +.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_URL, "https://example.com/foo.bin";);
 +
 +  curl_easy_setopt(curl, CURLOPT_INTERFACE, "eth0");
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +The "if!" and "host!" syntax was added in 7.24.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK on success or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SOCKOPTFUNCTION "(3), " CURLOPT_TCP_NODELAY "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_INTERLEAVEDATA.3
index 20fedbebd,000000000..53d151136
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_INTERLEAVEDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_INTERLEAVEDATA.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_INTERLEAVEDATA 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_INTERLEAVEDATA \- custom pointer passed to RTSP interleave callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_INTERLEAVEDATA, void 
*pointer);
 +.SH DESCRIPTION
 +This is the userdata \fIpointer\fP that will be passed to
 +\fICURLOPT_INTERLEAVEFUNCTION(3)\fP when interleaved RTP data is received. If
 +the interleave function callback is not set, this pointer is not used
 +anywhere.
 +.SH DEFAULT
 +NULL
 +.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_INTERLEAVEFUNCTION "(3), " CURLOPT_RTSP_REQUEST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_INTERLEAVEFUNCTION.3
index c2c267e7f,000000000..b3e5f292c
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_IOCTLDATA.3
index e450d86b5,000000000..10778affb
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_IOCTLDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_IOCTLDATA.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_IOCTLDATA 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_IOCTLDATA \- custom pointer passed to I/O callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IOCTLDATA, void *pointer);
 +.SH DESCRIPTION
 +Pass the \fIpointer\fP that will be untouched by libcurl and passed as the 3rd
 +argument in the ioctl callback set with \fICURLOPT_IOCTLFUNCTION(3)\fP.
 +.SH DEFAULT
 +By default, the value of this parameter is NULL.
 +.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_IOCTLFUNCTION "(3), " CURLOPT_SEEKFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_IOCTLFUNCTION.3
index f37f9c036,000000000..99bfd489a
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_IPRESOLVE.3
index fe7a0f90d,000000000..ef040ff71
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_IPRESOLVE.3
+++ b/docs/libcurl/opts/GNURLOPT_IPRESOLVE.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_IPRESOLVE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_IPRESOLVE \- specify which IP protocol version to use
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_IPRESOLVE, long resolve);
 +.SH DESCRIPTION
 +Allows an application to select what kind of IP addresses to use when
 +resolving host names. This is only interesting when using host names that
 +resolve addresses using more than one version of IP. The allowed values are:
 +.IP CURL_IPRESOLVE_WHATEVER
 +Default, resolves addresses to all IP versions that your system allows.
 +.IP CURL_IPRESOLVE_V4
 +Resolve to IPv4 addresses.
 +.IP CURL_IPRESOLVE_V6
 +Resolve to IPv6 addresses.
 +.SH DEFAULT
 +CURL_IPRESOLVE_WHATEVER
 +.SH PROTOCOLS
 +All
 +.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_URL, "https://example.com/foo.bin";);
 +
 +  /* resolve host name using IPv6-names only */
 +  curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V6);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_HTTP_VERSION "(3), " CURLOPT_SSLVERSION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_ISSUERCERT.3
index 30f0c756a,000000000..70ed96ef8
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_ISSUERCERT.3
+++ b/docs/libcurl/opts/GNURLOPT_ISSUERCERT.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2014, 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ISSUERCERT 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_ISSUERCERT \- issuer SSL certificate filename
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ISSUERCERT, char *file);
 +.SH DESCRIPTION
 +Pass a char * to a null-terminated string naming a \fIfile\fP holding a CA
 +certificate in PEM format. If the option is set, an additional check against
 +the peer certificate is performed to verify the issuer is indeed the one
 +associated with the certificate provided by the option. This additional check
 +is useful in multi-level PKI where one needs to enforce that the peer
 +certificate is from a specific branch of the tree.
 +
 +This option makes sense only when used in combination with the
 +\fICURLOPT_SSL_VERIFYPEER(3)\fP option. Otherwise, the result of the check is
 +not considered as failure.
 +
 +A specific error code (CURLE_SSL_ISSUER_ERROR) is defined with the option,
 +which is returned if the setup of the SSL/TLS session has failed due to a
 +mismatch with the issuer of peer certificate (\fICURLOPT_SSL_VERIFYPEER(3)\fP
 +has to be set too for the check to fail). (Added in 7.19.0)
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.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/";);
 +  curl_easy_setopt(curl, CURLOPT_ISSUERCERT, "/etc/certs/cacert.pem");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +If built TLS enabled
 +.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_CRLFILE "(3), " CURLOPT_SSL_VERIFYPEER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_ISSUERCERT_BLOB.3
index 0495b6f67,000000000..e97204af9
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_ISSUERCERT_BLOB.3
+++ b/docs/libcurl/opts/GNURLOPT_ISSUERCERT_BLOB.3
@@@ -1,79 -1,0 +1,79 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ISSUERCERT_BLOB 3 "24 Jun 2020" "libcurl 7.71.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_ISSUERCERT_BLOB \- issuer SSL certificate from memory blob
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_ISSUERCERT_BLOB, struct 
curl_blob *stblob);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_blob structure, which contains information (pointer
 +and size) about a memory block with binary data of a CA certificate in PEM
 +format. If the option is set, an additional check against the peer certificate
 +is performed to verify the issuer is indeed the one associated with the
 +certificate provided by the option. This additional check is useful in
 +multi-level PKI where one needs to enforce that the peer certificate is from a
 +specific branch of the tree.
 +
 +This option should be used in combination with the
 +\fICURLOPT_SSL_VERIFYPEER(3)\fP option. Otherwise, the result of the check is
 +not considered as failure.
 +
 +A specific error code (CURLE_SSL_ISSUER_ERROR) is defined with the option,
 +which is returned if the setup of the SSL/TLS session has failed due to a
 +mismatch with the issuer of peer certificate (\fICURLOPT_SSL_VERIFYPEER(3)\fP
 +has to be set too for the check to fail).
 +
 +If the blob is initialized with the flags member of struct curl_blob set to
 +CURL_BLOB_COPY, the application does not have to keep the buffer around after
 +setting this.
 +
 +This option is an alternative to \fICURLOPT_ISSUERCERT(3)\fP which instead
 +expects a file name as input.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS-based protocols
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct curl_blob blob;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  blob.data = certificateData;
 +  blob.len = filesize;
 +  blob.flags = CURL_BLOB_COPY;
 +  curl_easy_setopt(curl, CURLOPT_ISSUERCERT_BLOB, &blob);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in libcurl 7.71.0. This option is supported by the OpenSSL backends.
 +.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_ISSUERCERT "(3),"
 +.BR CURLOPT_CRLFILE "(3), " CURLOPT_SSL_VERIFYPEER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_KEEP_SENDING_ON_ERROR.3
index ec53000d4,000000000..9bea3d920
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_KEEP_SENDING_ON_ERROR.3
+++ b/docs/libcurl/opts/GNURLOPT_KEEP_SENDING_ON_ERROR.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_KEEP_SENDING_ON_ERROR 3 "22 Sep 2016" "libcurl 7.51.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_KEEP_SENDING_ON_ERROR \- keep sending on early HTTP response >= 300
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEEP_SENDING_ON_ERROR,
 +                          long keep_sending);
 +.SH DESCRIPTION
 +A long parameter set to 1 tells the library to keep sending the request body
 +if the HTTP code returned is equal to or larger than 300. The default action
 +would be to stop sending and close the stream or connection.
 +
 +This option is suitable for manual NTLM authentication, i.e. if an application
 +does not use \fICURLOPT_HTTPAUTH(3)\fP, but instead sets "Authorization: NTLM 
..."
 +headers manually using \fICURLOPT_HTTPHEADER(3)\fP.
 +
 +Most applications do not need this option.
 +.SH DEFAULT
 +0, stop sending 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_POSTFIELDS, "sending data");
 +  curl_easy_setopt(curl, CURLOPT_KEEP_SENDING_ON_ERROR, 1L);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with HTTP. Added in 7.51.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if HTTP is enabled, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_FAILONERROR "(3), " CURLOPT_HTTPHEADER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_KEYPASSWD.3
index 9145b0554,000000000..c54769064
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_KEYPASSWD.3
+++ b/docs/libcurl/opts/GNURLOPT_KEYPASSWD.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_KEYPASSWD 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_KEYPASSWD \- set passphrase to private key
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KEYPASSWD, char *pwd);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. It will be used as
 +the password required to use the \fICURLOPT_SSLKEY(3)\fP or
 +\fICURLOPT_SSH_PRIVATE_KEYFILE(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
 +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, "http://example.com/foo.bin";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
 +  curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
 +  curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "superman");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option was known as CURLOPT_SSLKEYPASSWD up to 7.16.4 and
 +CURLOPT_SSLCERTPASSWD up to 7.9.2.
 +.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_SSLKEY "(3), " CURLOPT_SSH_PRIVATE_KEYFILE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_KRBLEVEL.3
index 6735a09d1,000000000..0ff2ff6e5
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_KRBLEVEL.3
+++ b/docs/libcurl/opts/GNURLOPT_KRBLEVEL.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_KRBLEVEL 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_KRBLEVEL \- set FTP kerberos security level
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_KRBLEVEL, char *level);
 +.SH DESCRIPTION
 +Pass a char * as parameter. Set the kerberos security level for FTP; this also
 +enables kerberos awareness.  This is a string that should match one of the
 +following: \&'clear', \&'safe', \&'confidential' or \&'private'.  If the
 +string is set but doesn't match one of these, 'private' will be used. Set the
 +string to NULL to disable kerberos support for FTP.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_KRBLEVEL, "private");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +This option was known as CURLOPT_KRB4LEVEL up to 7.16.3
 +.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_KRBLEVEL "(3), " CURLOPT_USE_SSL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_LOCALPORT.3
index 3376873e8,000000000..ca76bdfeb
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_LOCALPORT.3
+++ b/docs/libcurl/opts/GNURLOPT_LOCALPORT.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_LOCALPORT 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_LOCALPORT \- set local port number to use for socket
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORT, long port);
 +.SH DESCRIPTION
 +Pass a long. This sets the local port number of the socket used for the
 +connection. This can be used in combination with \fICURLOPT_INTERFACE(3)\fP
 +and you are recommended to use \fICURLOPT_LOCALPORTRANGE(3)\fP as well when
 +this option is set. Valid port numbers are 1 - 65535.
 +.SH DEFAULT
 +0, disabled - use whatever the system thinks is fine
 +.SH PROTOCOLS
 +All
 +.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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_LOCALPORT, 49152L);
 +  /* and try 20 more ports following that */
 +  curl_easy_setopt(curl, CURLOPT_LOCALPORTRANGE, 20L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.2
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_LOCALPORTRANGE "(3), " CURLOPT_INTERFACE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_LOCALPORTRANGE.3
index 20aa156ad,000000000..f4a2c13e8
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_LOCALPORTRANGE.3
+++ b/docs/libcurl/opts/GNURLOPT_LOCALPORTRANGE.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_LOCALPORTRANGE 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_LOCALPORTRANGE \- number of additional local ports to try
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOCALPORTRANGE,
 +                          long range);
 +.SH DESCRIPTION
 +Pass a long. The \fIrange\fP argument is the number of attempts libcurl will
 +make to find a working local port number. It starts with the given
 +\fICURLOPT_LOCALPORT(3)\fP and adds one to the number for each retry. Setting
 +this option to 1 or below will make libcurl do only one try for the exact port
 +number. Port numbers by nature are scarce resources that will be busy at times
 +so setting this value to something too low might cause unnecessary connection
 +setup failures.
 +.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/foo.bin";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_LOCALPORT, 49152L);
 +  /* and try 20 more ports following that */
 +  curl_easy_setopt(curl, CURLOPT_LOCALPORTRANGE, 20L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.2
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_LOCALPORT "(3), " CURLOPT_INTERFACE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_LOGIN_OPTIONS.3
index 5a41a00c1,000000000..c65131592
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_LOGIN_OPTIONS.3
+++ b/docs/libcurl/opts/GNURLOPT_LOGIN_OPTIONS.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_LOGIN_OPTIONS 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_LOGIN_OPTIONS \- set login options
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOGIN_OPTIONS, char *options);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should be pointing to the null-terminated
 +\fIoptions\fP string to use for the transfer.
 +
 +For more information about the login options please see RFC2384, RFC5092 and
 +IETF draft draft-earhart-url-smtp-00.txt
 +
 +\fICURLOPT_LOGIN_OPTIONS(3)\fP can be used to set protocol specific login
 +options, such as the preferred authentication mechanism via "AUTH=NTLM" or
 +"AUTH=*", and 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
 +NULL
 +.SH PROTOCOLS
 +Only IMAP, POP3 and SMTP support login options.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_LOGIN_OPTIONS, "AUTH=*");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 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_USERNAME "(3), " CURLOPT_PASSWORD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_LOW_SPEED_LIMIT.3
index 4f26e6656,000000000..05512cff3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_LOW_SPEED_LIMIT.3
+++ b/docs/libcurl/opts/GNURLOPT_LOW_SPEED_LIMIT.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_LOW_SPEED_LIMIT 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_LOW_SPEED_LIMIT \- set low speed limit in bytes per second
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_LIMIT, long 
speedlimit);
 +.SH DESCRIPTION
 +Pass a long as parameter. It contains the average transfer speed in bytes per
 +second that the transfer should be below during
 +\fICURLOPT_LOW_SPEED_TIME(3)\fP seconds for libcurl to consider it to be too
 +slow and abort.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  /* abort if slower than 30 bytes/sec during 60 seconds */
 +  curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 60L);
 +  curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 30L);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OPERATION_TIMEDOUT == res) {
 +    printf("Timeout!\\n");
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_LOW_SPEED_TIME "(3), " CURLOPT_TIMEOUT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_LOW_SPEED_TIME.3
index 2cfa9d210,000000000..9c5b4c121
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_LOW_SPEED_TIME.3
+++ b/docs/libcurl/opts/GNURLOPT_LOW_SPEED_TIME.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_LOW_SPEED_TIME 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_LOW_SPEED_TIME \- set low speed limit time period
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_LOW_SPEED_TIME, long 
speedtime);
 +.SH DESCRIPTION
 +Pass a long as parameter. It contains the time in number seconds that the
 +transfer speed should be below the \fICURLOPT_LOW_SPEED_LIMIT(3)\fP for the
 +library to consider it too slow and abort.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, url);
 +  /* abort if slower than 30 bytes/sec during 60 seconds */
 +  curl_easy_setopt(curl, CURLOPT_LOW_SPEED_TIME, 60L);
 +  curl_easy_setopt(curl, CURLOPT_LOW_SPEED_LIMIT, 30L);
 +  res = curl_easy_perform(curl);
 +  if(CURLE_OPERATION_TIMEDOUT == res) {
 +    printf("Timeout!\\n");
 +  }
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_LOW_SPEED_LIMIT "(3), " CURLOPT_TIMEOUT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAIL_AUTH.3
index cebafbcec,000000000..670e59e8d
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAIL_AUTH.3
+++ b/docs/libcurl/opts/GNURLOPT_MAIL_AUTH.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAIL_AUTH 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_MAIL_AUTH \- SMTP authentication address
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_AUTH, char *auth);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. This will be used to
 +specify the authentication address (identity) of a submitted message that is
 +being relayed to another server.
 +
 +This optional parameter allows co-operating agents in a trusted environment to
 +communicate the authentication of individual messages and should only be used
 +by the application program, using libcurl, if the application is itself a mail
 +server acting in such an environment. If the application is operating as such
 +and the AUTH address is not known or is invalid, then an empty string should
 +be used for this parameter.
 +
 +Unlike \fICURLOPT_MAIL_FROM(3)\fP and \fICURLOPT_MAIL_RCPT(3)\fP, the address
 +should not be specified within a pair of angled brackets (<>). However, if an
 +empty string is used then a pair of brackets will be sent by libcurl as
 +required by RFC2554.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +SMTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_MAIL_AUTH, "<secret@cave>");
 +  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, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_MAIL_FROM "(3), " CURLOPT_MAIL_RCPT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAIL_FROM.3
index c2d0d2851,000000000..eeac1c0b4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAIL_FROM.3
+++ b/docs/libcurl/opts/GNURLOPT_MAIL_FROM.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAIL_FROM 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_MAIL_FROM \- SMTP sender address
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_FROM, char *from);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. This should be used
 +to specify the sender's email address when sending SMTP mail with libcurl.
 +
 +An originator email address should be specified with angled brackets (<>)
 +around it, which if not specified will be added automatically.
 +
 +If this parameter is not specified then an empty address will be sent to the
 +mail server which may cause the email to be rejected.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +blank
 +.SH PROTOCOLS
 +SMTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_MAIL_FROM, "president@example.com");
 +  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, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_MAIL_RCPT "(3), " CURLOPT_MAIL_AUTH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAIL_RCPT.3
index af43f235c,000000000..858947164
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAIL_RCPT.3
+++ b/docs/libcurl/opts/GNURLOPT_MAIL_RCPT.3
@@@ -1,73 -1,0 +1,73 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAIL_RCPT 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_MAIL_RCPT \- list of SMTP mail recipients
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_RCPT,
 +                          struct curl_slist *rcpts);
 +.SH DESCRIPTION
 +Pass a pointer to a linked list of recipients to pass to the server in your
 +SMTP mail request. 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.
 +
 +When performing a mail transfer, each recipient should be specified within a
 +pair of angled brackets (<>), however, should you not use an angled bracket as
 +the first character libcurl will assume you provided a single email address
 +and enclose that address within brackets for you.
 +
 +When performing an address verification (VRFY command), each recipient should
 +be specified as the user name or user name and domain (as per Section 3.5 of
 +RFC5321).
 +
 +When performing a mailing list expand (EXPN command), each recipient should be
 +specified using the mailing list name, such as "Friends" or "London-Office".
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +SMTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct curl_slist *list;
 +  list = curl_slist_append(NULL, "root@localhost");
 +  list = curl_slist_append(list, "person@example.com");
 +  curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, list);
 +  ret = curl_easy_perform(curl);
 +  curl_slist_free_all(list);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.20.0. The VRFY and EXPN logic was added in 7.34.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_MAIL_FROM "(3), " CURLOPT_MAIL_AUTH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAIL_RCPT_ALLLOWFAILS.3
index d2fdada77,000000000..c3b206cb3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAIL_RCPT_ALLLOWFAILS.3
+++ b/docs/libcurl/opts/GNURLOPT_MAIL_RCPT_ALLLOWFAILS.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAIL_RCPT_ALLLOWFAILS 3 "16 Jan 2020" "libcurl 7.69.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_MAIL_RCPT_ALLLOWFAILS \- allow RCPT TO command to fail for some 
recipients
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAIL_RCPT_ALLLOWFAILS,
 +                          long allow);
 +.SH DESCRIPTION
 +If \fIallow\fP is set to 1L, allow RCPT TO command to fail for some 
recipients.
 +
 +When sending data to multiple recipients, by default curl will abort SMTP
 +conversation if at least one of the recipients causes RCPT TO command to
 +return an error.
 +
 +The default behavior can be changed by setting \fIignore\fP to 1L which will
 +make curl ignore errors and proceed with the remaining valid recipients.
 +
 +In case when all recipients cause RCPT TO command to fail, curl will abort 
SMTP
 +conversation and return the error received from to the last RCPT TO command.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +SMTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct curl_slist *list;
 +
 +  /* Adding one valid and one invalid email address */
 +  list = curl_slist_append(NULL, "person@example.com");
 +  list = curl_slist_append(list, "invalidemailaddress");
 +
 +  curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_MAIL_RCPT_ALLLOWFAILS, 1L);
 +
 +  ret = curl_easy_perform(curl);
 +  curl_slist_free_all(list);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.69.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_MAIL_FROM "(3), " CURLOPT_MAIL_RCPT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAXAGE_CONN.3
index 61d687b56,000000000..17577250a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAXAGE_CONN.3
+++ b/docs/libcurl/opts/GNURLOPT_MAXAGE_CONN.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAXAGE_CONN 3 "18 Apr 2019" "libcurl 7.65.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_MAXAGE_CONN \- max idle time allowed for reusing a connection
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXAGE_CONN, long maxage);
 +.SH DESCRIPTION
 +Pass a long as parameter containing \fImaxage\fP - the maximum time in seconds
 +that you allow an existing connection to have to be considered for reuse for
 +this request.
 +
 +The "connection cache" that holds previously used connections. When a new
 +request is to be done, it will consider any connection that matches for
 +reuse. The \fICURLOPT_MAXAGE_CONN(3)\fP limit prevents libcurl from trying
 +very old connections for reuse, since old connections have a high risk of not
 +working and thus trying them is a performance loss and sometimes service loss
 +due to the difficulties to figure out the situation. If a connection is found
 +in the cache that is older than this set \fImaxage\fP, it will instead be
 +closed.
 +.SH DEFAULT
 +Default maxage is 118 seconds.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* only allow 30 seconds idle time */
 +  curl_easy_setopt(curl, CURLOPT_MAXAGE_CONN, 30L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in libcurl 7.65.0
 +.SH RETURN VALUE
 +Returns CURLE_OK.
 +.SH "SEE ALSO"
 +.BR CURLOPT_TIMEOUT "(3), " CURLOPT_FORBID_REUSE "(3), "
 +.BR CURLOPT_FRESH_CONNECT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAXCONNECTS.3
index 44efd5143,000000000..ba70c481d
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAXCONNECTS.3
+++ b/docs/libcurl/opts/GNURLOPT_MAXCONNECTS.3
@@@ -1,68 -1,0 +1,68 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAXCONNECTS 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_MAXCONNECTS \- maximum connection cache size
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXCONNECTS, long amount);
 +.SH DESCRIPTION
 +Pass a long. The set \fIamount\fP will be the maximum number of simultaneously
 +open persistent connections that libcurl may cache in the pool associated with
 +this handle. The default is 5, and there isn't much point in changing this
 +value unless you are perfectly aware of how this works and changes libcurl's
 +behaviour. This concerns connections using any of the protocols that support
 +persistent connections.
 +
 +When reaching the maximum limit, curl closes the oldest one in the cache to
 +prevent increasing the number of open connections.
 +
 +If you already have performed transfers with this curl handle, setting a
 +smaller \fICURLOPT_MAXCONNECTS(3)\fP than before may cause open connections to
 +get closed unnecessarily.
 +
 +If you add this easy handle to a multi handle, this setting is not
 +acknowledged, and you must instead use \fIcurl_multi_setopt(3)\fP and the
 +\fICURLMOPT_MAXCONNECTS(3)\fP option.
 +.SH DEFAULT
 +5
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* limit the connection cache for this handle to no more than 3 */
 +  curl_easy_setopt(curl, CURLOPT_MAXCONNECTS, 3L);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLMOPT_MAXCONNECTS "(3), " CURLOPT_MAXREDIRS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAXFILESIZE.3
index 6624ad6a6,000000000..daad41a75
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAXFILESIZE.3
+++ b/docs/libcurl/opts/GNURLOPT_MAXFILESIZE.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAXFILESIZE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_MAXFILESIZE \- maximum file size allowed to download
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE, long size);
 +.SH DESCRIPTION
 +Pass a long as parameter. This allows you to specify the maximum \fIsize\fP
 +(in bytes) of a file to download. If the file requested is found larger than
 +this value, the transfer will not start and \fICURLE_FILESIZE_EXCEEDED\fP will
 +be returned.
 +
 +The file size is not always known prior to download, and for such files this
 +option has no effect even if the file transfer ends up being larger than this
 +given limit. This concerns both FTP and HTTP transfers.
 +
 +If you want a limit above 2GB, use \fICURLOPT_MAXFILESIZE_LARGE(3)\fP.
 +.SH DEFAULT
 +None
 +.SH PROTOCOLS
 +FTP and HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* refuse to download if larger than 1000 bytes! */
 +  curl_easy_setopt(curl, CURLOPT_MAXFILESIZE, 1000L);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_MAXFILESIZE_LARGE "(3), " CURLOPT_MAX_RECV_SPEED_LARGE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAXFILESIZE_LARGE.3
index 2ca01851f,000000000..0d958d247
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAXFILESIZE_LARGE.3
+++ b/docs/libcurl/opts/GNURLOPT_MAXFILESIZE_LARGE.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAXFILESIZE_LARGE 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_MAXFILESIZE_LARGE \- maximum file size allowed to download
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAXFILESIZE_LARGE,
 +                          curl_off_t size);
 +.SH DESCRIPTION
 +Pass a curl_off_t as parameter. This allows you to specify the maximum
 +\fIsize\fP (in bytes) of a file to download. If the file requested is found
 +larger than this value, the transfer will not start and
 +\fICURLE_FILESIZE_EXCEEDED\fP will be returned.
 +
 +The file size is not always known prior to download, and for such files this
 +option has no effect even if the file transfer ends up being larger than this
 +given limit. This concerns both FTP and HTTP transfers.
 +.SH DEFAULT
 +None
 +.SH PROTOCOLS
 +FTP and HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_off_t ridiculous = 1 << 48;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* refuse to download if larger than ridiculous */
 +  curl_easy_setopt(curl, CURLOPT_MAXFILESIZE_LARGE, ridiculous);
 +  ret = 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_MAXFILESIZE "(3), " CURLOPT_MAX_RECV_SPEED_LARGE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAXREDIRS.3
index 159bf7b71,000000000..b9f11e0fc
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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/";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_MAX_RECV_SPEED_LARGE.3
index 3aa78a890,000000000..3f5ef76c6
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAX_RECV_SPEED_LARGE.3
+++ b/docs/libcurl/opts/GNURLOPT_MAX_RECV_SPEED_LARGE.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAX_RECV_SPEED_LARGE 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_MAX_RECV_SPEED_LARGE \- rate limit data download speed
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAX_RECV_SPEED_LARGE,
 +                          curl_off_t maxspeed);
 +.SH DESCRIPTION
 +Pass a curl_off_t as parameter.  If a download exceeds this \fImaxspeed\fP
 +(counted in bytes per second) the transfer will pause to keep the speed less
 +than or equal to the parameter value. Defaults to unlimited speed.
 +
 +This is not an exact science. libcurl attempts to keep the average speed below
 +the given threshold over a period time.
 +
 +If you set \fImaxspeed\fP to a value lower than \fICURLOPT_BUFFERSIZE(3)\fP,
 +libcurl might download faster than the set limit initially.
 +
 +This option doesn't affect transfer speeds done with FILE:// URLs.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +All but file://
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* cap the download speed to 31415 bytes/sec */
 +  curl_easy_setopt(curl, CURLOPT_MAX_RECV_SPEED_LARGE, (curl_off_t)31415);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.5
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_MAX_SEND_SPEED_LARGE "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MAX_SEND_SPEED_LARGE.3
index cbdcb52c0,000000000..e155a49c0
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MAX_SEND_SPEED_LARGE.3
+++ b/docs/libcurl/opts/GNURLOPT_MAX_SEND_SPEED_LARGE.3
@@@ -1,67 -1,0 +1,67 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MAX_SEND_SPEED_LARGE 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_MAX_SEND_SPEED_LARGE \- rate limit data upload speed
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MAX_SEND_SPEED_LARGE,
 +                          curl_off_t maxspeed);
 +.SH DESCRIPTION
 +Pass a curl_off_t as parameter with the \fImaxspeed\fP.  If an upload exceeds
 +this speed (counted in bytes per second) the transfer will pause to keep the
 +speed less than or equal to the parameter value.  Defaults to unlimited
 +speed.
 +
 +This is not an exact science. libcurl attempts to keep the average speed below
 +the given threshold over a period time.
 +
 +If you set \fImaxspeed\fP to a value lower than
 +\fICURLOPT_UPLOAD_BUFFERSIZE(3)\fP, libcurl might "shoot over" the limit on
 +its first send and still send off a full buffer.
 +
 +This option doesn't affect transfer speeds done with FILE:// URLs.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +All except file://
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* cap the upload speed to 1000 bytes/sec */
 +  curl_easy_setopt(curl, CURLOPT_MAX_SEND_SPEED_LARGE, (curl_off_t)1000);
 +  /* (set some upload options as well!) */
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.15.5
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_MAX_RECV_SPEED_LARGE "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_MIMEPOST.3
index 9a71961d3,000000000..351b98573
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_MIMEPOST.3
+++ b/docs/libcurl/opts/GNURLOPT_MIMEPOST.3
@@@ -1,52 -1,0 +1,52 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_MIMEPOST 3 "22 Aug 2017" "libcurl 7.56.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_MIMEPOST \- set post/send data from mime structure
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +curl_mime *mime;
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_MIMEPOST, mime);
 +.SH DESCRIPTION
 +Pass a mime handle previously obtained from \fIcurl_mime_init(3)\fP.
 +
 +This setting is supported by the HTTP protocol to post forms and by the
 +SMTP and IMAP protocols to provide the e-mail data to send/upload.
 +
 +This option is the preferred way of posting an HTTP form, replacing and
 +extending the deprecated \fICURLOPT_HTTPPOST(3)\fP option.
 +.SH PROTOCOLS
 +HTTP, SMTP, IMAP.
 +.SH AVAILABILITY
 +Since 7.56.0.
 +.SH RETURN VALUE
 +This will return CURLE_OK.
 +.SH EXAMPLE
 +Using this option implies the use of several mime structure building
- functions: see https://curl.haxx.se/libcurl/c/smtp-mime.html for a complete
++functions: see https://curl.se/libcurl/c/smtp-mime.html for a complete
 +example.
 +.SH "SEE ALSO"
 +.BR curl_mime_init "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_NETRC.3
index 67b1772bf,000000000..c154458d5
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_NETRC_FILE.3
index d2a89da87,000000000..16a5ab9c4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_NETRC_FILE.3
+++ b/docs/libcurl/opts/GNURLOPT_NETRC_FILE.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FILE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_NETRC_FILE \- file name to read .netrc info from
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NETRC_FILE, char *file);
 +.SH DESCRIPTION
 +Pass a char * as parameter, pointing to a null-terminated string containing
 +the full path name to the \fIfile\fP you want libcurl to use as .netrc
 +file. If this option is omitted, and \fICURLOPT_NETRC(3)\fP is set, libcurl
 +will attempt to find a .netrc file in the current user's home
 +directory.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.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);
 +  curl_easy_setopt(curl, CURLOPT_NETRC_FILE, "/tmp/magic-netrc");
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.10.9
 +.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_NETRC "(3), " CURLOPT_USERNAME "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_NEW_DIRECTORY_PERMS.3
index 70512839a,000000000..a0f5be21b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_NEW_DIRECTORY_PERMS.3
+++ b/docs/libcurl/opts/GNURLOPT_NEW_DIRECTORY_PERMS.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_NEW_DIRECTORY_PERMS 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_NEW_DIRECTORY_PERMS \- permissions for remotely created directories
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NEW_DIRECTORY_PERMS,
 +                          long mode);
 +.SH DESCRIPTION
 +Pass a long as a parameter, containing the value of the permissions that will
 +be assigned to newly created directories on the remote server.  The default 
value is
 +\fI0755\fP, but any valid value can be used.  The only protocols that can use
 +this are \fIsftp://\fP, \fIscp://\fP, and \fIfile://\fP.
 +.SH DEFAULT
 +0755
 +.SH PROTOCOLS
 +SFTP, SCP and FILE
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, 
"sftp://upload.example.com/newdir/file.zip";);
 +  curl_easy_setopt(curl, CURLOPT_FTP_CREATE_MISSING_DIRS, 1L);
 +  curl_easy_setopt(curl, CURLOPT_NEW_DIRECTORY_PERMS, 0644L);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.4
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_NEW_FILE_PERMS "(3), " CURLOPT_UPLOAD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_NEW_FILE_PERMS.3
index 69af0a378,000000000..5af010957
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_NEW_FILE_PERMS.3
+++ b/docs/libcurl/opts/GNURLOPT_NEW_FILE_PERMS.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_NEW_FILE_PERMS 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_NEW_FILE_PERMS \- permissions for remotely created files
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NEW_FILE_PERMS,
 +                          long mode);
 +.SH DESCRIPTION
 +Pass a long as a parameter, containing the value of the permissions that will
 +be assigned to newly created files on the remote server.  The default value is
 +\fI0644\fP, but any valid value can be used.  The only protocols that can use
 +this are \fIsftp://\fP, \fIscp://\fP, and \fIfile://\fP.
 +.SH DEFAULT
 +0644
 +.SH PROTOCOLS
 +SFTP, SCP and FILE
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://upload.example.com/file.txt";);
 +  curl_easy_setopt(curl, CURLOPT_NEW_FILE_PERMS, 0664L);
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.4
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_NEW_DIRECTORY_PERMS "(3), " CURLOPT_UPLOAD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_NOBODY.3
index 7a0060e87,000000000..d44ff6620
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_NOBODY.3
+++ b/docs/libcurl/opts/GNURLOPT_NOBODY.3
@@@ -1,70 -1,0 +1,70 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_NOBODY 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_NOBODY \- do the download request without getting the body
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOBODY, long opt);
 +.SH DESCRIPTION
 +A long parameter set to 1 tells libcurl to not include the body-part in the
 +output when doing what would otherwise be a download. For HTTP(S), this makes
 +libcurl do a HEAD request. For most other protocols it means just not asking
 +to transfer the body data.
 +
 +For HTTP operations when \fICURLOPT_NOBODY(3)\fP has been set, unsetting the
 +option (with 0) will make it a GET again - only if the method is still set to
 +be HEAD. The proper way to get back to a GET request is to set
- \fICURLOPT_HTTPGET(3)\fP and for other methods, use the POST ur UPLOAD
++\fICURLOPT_HTTPGET(3)\fP and for other methods, use the POST or UPLOAD
 +options.
 +
 +Enabling \fICURLOPT_NOBODY(3)\fP means asking for a download without a body.
 +
 +If you do a transfer with HTTP that involves a method other than HEAD, you
 +will get a body (unless the resource and server sends a zero byte body for the
 +specific URL you request).
 +.SH DEFAULT
 +0, the body is transferred
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* get us the resource without a body - use HEAD! */
 +  curl_easy_setopt(curl, CURLOPT_NOBODY, 1L);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_HTTPGET "(3), " CURLOPT_POSTFIELDS "(3), " CURLOPT_UPLOAD "(3), "
 +.BR CURLOPT_REQUEST_TARGET "(3), " CURLOPT_MIMEPOST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_NOPROGRESS.3
index 4f0635677,000000000..da733d4d5
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_NOPROGRESS.3
+++ b/docs/libcurl/opts/GNURLOPT_NOPROGRESS.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_NOPROGRESS 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_NOPROGRESS \- switch off the progress meter
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROGRESS, long onoff);
 +.SH DESCRIPTION
 +If \fIonoff\fP is to 1, it tells the library to shut off the progress meter
 +completely for requests done with this \fIhandle\fP. It will also prevent the
 +\fICURLOPT_XFERINFOFUNCTION(3)\fP or \fICURLOPT_PROGRESSFUNCTION(3)\fP from
 +getting called.
 +.SH DEFAULT
 +1, meaning it normally runs without a progress meter.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* enable progress meter */
 +  curl_easy_setopt(curl, CURLOPT_NOPROGRESS, 0L);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK.
 +.SH "SEE ALSO"
 +.BR CURLOPT_XFERINFOFUNCTION "(3), "
 +.BR CURLOPT_PROGRESSFUNCTION "(3), "
 +.BR CURLOPT_VERBOSE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_NOPROXY.3
index bf46a839b,000000000..fe0c78d61
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_NOPROXY.3
+++ b/docs/libcurl/opts/GNURLOPT_NOPROXY.3
@@@ -1,81 -1,0 +1,85 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_NOPROXY 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_NOPROXY \- disable proxy use for specific hosts
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_NOPROXY, char *noproxy);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string. The string consists of a comma
 +separated list of host names that do not require a proxy to get reached, even
 +if one is specified.  The only wildcard available is a single * character,
 +which matches all hosts, and effectively disables the proxy. Each name in this
 +list is matched as either a domain which contains the hostname, or the
 +hostname itself. For example, example.com would match example.com,
 +example.com:80, and www.example.com, but not www.notanexample.com or
 +example.com.othertld.
 +
 +If the name in the noproxy list has a leading period, it is a domain match
 +against the provided host name. This way ".example.com" will switch off proxy
 +use for both "www.example.com" as well as for "foo.example.com".
 +
 +Setting the noproxy string to "" (an empty string) will explicitly enable the
 +proxy for all host names, even if there is an environment variable set for it.
 +
 +Enter IPv6 numerical addresses in the list of host names without enclosing
 +brackets:
 +
 + "example.com,::1,localhost"
 +
++IPv6 numerical addresses are compared as strings, so they will only match if
++the representations are the same: "::1" is the same as "::0:1" but they don't
++match.
++
 +The application does not have to keep the string around after setting this
 +option.
 +.SH "Environment variables"
 +If there's an environment variable called \fBno_proxy\fP (or \fBNO_PROXY\fP),
 +it will be used if the \fIGNURLOPT_NOPROXY(3)\fP option is not set. It works
 +exactly the same way.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +Most
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  /* accept various URLs */
 +  curl_easy_setopt(curl, CURLOPT_URL, input);
 +  /* use this proxy */
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80";);
 +  /* ... but make sure this host name is not proxied */
 +  curl_easy_setopt(curl, CURLOPT_NOPROXY, "www.example.com");
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.4
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR GNURLOPT_PROXY "(3), " GNURLOPT_PROXYAUTH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_NOSIGNAL.3
index 8a38d8f34,000000000..b9b66b1aa
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_OPENSOCKETDATA.3
index be3bf94b9,000000000..e8d66c9de
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_OPENSOCKETDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_OPENSOCKETDATA.3
@@@ -1,81 -1,0 +1,81 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_OPENSOCKETDATA 3 "16 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_OPENSOCKETDATA \- custom pointer passed to open socket callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETDATA, void 
*pointer);
 +.SH DESCRIPTION
 +Pass a \fIpointer\fP that will be untouched by libcurl and passed as the first
 +argument in the opensocket callback set with 
\fICURLOPT_OPENSOCKETFUNCTION(3)\fP.
 +.SH DEFAULT
 +The default value of this parameter is NULL.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +/* make libcurl use the already established socket 'sockfd' */
 +
 +static curl_socket_t opensocket(void *clientp,
 +                                curlsocktype purpose,
 +                                struct curl_sockaddr *address)
 +{
 +  curl_socket_t sockfd;
 +  sockfd = *(curl_socket_t *)clientp;
 +  /* the actual externally set socket is passed in via the OPENSOCKETDATA
 +     option */
 +  return sockfd;
 +}
 +
 +static int sockopt_callback(void *clientp, curl_socket_t curlfd,
 +                            curlsocktype purpose)
 +{
 +  /* This return code was added in libcurl 7.21.5 */
 +  return CURL_SOCKOPT_ALREADY_CONNECTED;
 +}
 +
 +curl = curl_easy_init();
 +if(curl) {
 +  /* libcurl will internally think that you connect to the host
 +   * and port that you specify in the URL option. */
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999";);
 +  /* call this function to get a socket */
 +  curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
 +  curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);
 +
 +  /* call this function to set options for the socket */
 +  curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
 +
 +  res = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.17.1
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_OPENSOCKETFUNCTION "(3), " CURLOPT_SOCKOPTFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_OPENSOCKETFUNCTION.3
index 32e75b79b,000000000..48b4ea002
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_OPENSOCKETFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_OPENSOCKETFUNCTION.3
@@@ -1,125 -1,0 +1,125 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_OPENSOCKETFUNCTION 3 "16 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_OPENSOCKETFUNCTION \- set callback for opening sockets
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +typedef enum  {
 +  CURLSOCKTYPE_IPCXN,  /* socket created for a specific IP connection */
 +} curlsocktype;
 +
 +struct curl_sockaddr {
 +  int family;
 +  int socktype;
 +  int protocol;
 +  unsigned int addrlen;
 +  struct sockaddr addr;
 +};
 +
 +curl_socket_t opensocket_callback(void *clientp,
 +                                  curlsocktype purpose,
 +                                  struct curl_sockaddr *address);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_OPENSOCKETFUNCTION, 
opensocket_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 \fIsocket(2)\fP
 +call. The callback's \fIpurpose\fP argument identifies the exact purpose for
 +this particular socket. \fICURLSOCKTYPE_IPCXN\fP is for IP based connections
 +and is the only purpose currently used in libcurl. Future versions of libcurl
 +may support more purposes.
 +
 +The \fIclientp\fP pointer contains whatever user-defined value set using the
 +\fICURLOPT_OPENSOCKETDATA(3)\fP function.
 +
 +The callback gets the resolved peer address as the \fIaddress\fP argument and
 +is allowed to modify the address or refuse to connect completely. The callback
 +function should return the newly created socket or \fICURL_SOCKET_BAD\fP in
 +case no connection could be established or another error was detected. Any
 +additional \fIsetsockopt(2)\fP calls can of course be done on the socket at
 +the user's discretion.  A \fICURL_SOCKET_BAD\fP return value from the callback
 +function will signal an unrecoverable error to libcurl and it will return
 +\fICURLE_COULDNT_CONNECT\fP from the function that triggered this callback.
 +This return code can be used for IP address block listing.
 +
 +If you want to pass in a socket with an already established connection, pass
 +the socket back with this callback and then use
 +\fICURLOPT_SOCKOPTFUNCTION(3)\fP to signal that it already is connected.
 +.SH DEFAULT
 +The default behavior is the equivalent of this:
 +.nf
 +   return socket(addr->family, addr->socktype, addr->protocol);
 +.fi
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +/* make libcurl use the already established socket 'sockfd' */
 +
 +static curl_socket_t opensocket(void *clientp,
 +                                curlsocktype purpose,
 +                                struct curl_sockaddr *address)
 +{
 +  curl_socket_t sockfd;
 +  sockfd = *(curl_socket_t *)clientp;
 +  /* the actual externally set socket is passed in via the OPENSOCKETDATA
 +     option */
 +  return sockfd;
 +}
 +
 +static int sockopt_callback(void *clientp, curl_socket_t curlfd,
 +                            curlsocktype purpose)
 +{
 +  /* This return code was added in libcurl 7.21.5 */
 +  return CURL_SOCKOPT_ALREADY_CONNECTED;
 +}
 +
 +curl = curl_easy_init();
 +if(curl) {
 +  /* libcurl will internally think that you connect to the host
 +   * and port that you specify in the URL option. */
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999";);
 +  /* call this function to get a socket */
 +  curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
 +  curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);
 +
 +  /* call this function to set options for the socket */
 +  curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
 +
 +  res = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.17.1.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_OPENSOCKETDATA "(3), " CURLOPT_SOCKOPTFUNCTION "(3), "
 +.BR CURLOPT_CLOSESOCKETFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PASSWORD.3
index 928903f0a,000000000..e9e1045e2
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_URL, "https://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 eb03d0ed1,000000000..09051f81b
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_URL, 
"https://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_PINNEDPUBLICKEY.3
index da2d3b581,000000000..bec202d1f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PINNEDPUBLICKEY.3
+++ b/docs/libcurl/opts/GNURLOPT_PINNEDPUBLICKEY.3
@@@ -1,128 -1,0 +1,128 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PINNEDPUBLICKEY 3 "27 Aug 2014" "libcurl 7.38.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PINNEDPUBLICKEY \- set pinned public key
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PINNEDPUBLICKEY, char 
*pinnedpubkey);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. The string can be the
 +file name of your pinned public key. The file format expected is "PEM" or 
"DER".
 +The string can also be any number of base64 encoded sha256 hashes preceded by
 +"sha256//" and separated by ";"
 +
 +When negotiating a TLS or SSL connection, the server sends a certificate
 +indicating its identity. A public key is extracted from this certificate and
 +if it does not exactly match the public key provided to this option, curl will
 +abort the connection before sending or receiving any data.
 +
 +On mismatch, \fICURLE_SSL_PINNEDPUBKEYNOTMATCH\fP is returned.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "/etc/publickey.der");
 +  /* OR
 +  curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, 
"sha256//YhKJKSzoTt2b5FP18fvpHo7fJYqQCjAa3HWY3tvRMwE=;sha256//t62CeU2tQiqkexU74Gxa2eg7fRbEgoChTociMee9wno=");
 +  */
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH PUBLIC KEY EXTRACTION
 +If you do not have the server's public key file you can extract it from the
 +server's certificate.
 +.nf
 +# retrieve the server's certificate if you don't already have it
 +#
 +# be sure to examine the certificate to see if it is what you expected
 +#
 +# Windows-specific:
 +# - Use NUL instead of /dev/null.
 +# - OpenSSL may wait for input instead of disconnecting. Hit enter.
 +# - If you don't have sed, then just copy the certificate into a file:
 +#   Lines from -----BEGIN CERTIFICATE----- to -----END CERTIFICATE-----.
 +#
 +openssl s_client -servername www.example.com -connect www.example.com:443 < 
/dev/null | sed -n "/-----BEGIN/,/-----END/p" > www.example.com.pem
 +
 +# extract public key in pem format from certificate
 +openssl x509 -in www.example.com.pem -pubkey -noout > 
www.example.com.pubkey.pem
 +
 +# convert public key from pem to der
 +openssl asn1parse -noout -inform pem -in www.example.com.pubkey.pem -out 
www.example.com.pubkey.der
 +
 +# sha256 hash and base64 encode der to string for use
 +openssl dgst -sha256 -binary www.example.com.pubkey.der | openssl base64
 +.fi
 +The public key in PEM format contains a header, base64 data and a
 +footer:
 +.nf
 +-----BEGIN PUBLIC KEY-----
 +[BASE 64 DATA]
 +-----END PUBLIC KEY-----
 +.fi
 +.SH AVAILABILITY
 +PEM/DER support:
 +
 +  7.39.0: OpenSSL, GnuTLS
 +
 +  7.39.0-7.48.0,7.58.1+: GSKit
 +
 +  7.43.0: NSS and wolfSSL
 +
 +  7.47.0: mbedtls
 +
 +  7.54.1: SecureTransport on macOS 10.7+/iOS 10+
 +
 +  7.58.1: SChannel
 +
 +sha256 support:
 +
 +  7.44.0: OpenSSL, GnuTLS, NSS and wolfSSL
 +
 +  7.47.0: mbedtls
 +
 +  7.54.1: SecureTransport on macOS 10.7+/iOS 10+
 +
 +  7.58.1: SChannel Windows XP SP3+
 +
 +Other SSL backends not supported.
 +.SH RETURN VALUE
 +Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSL_VERIFYPEER "(3), "
 +.BR CURLOPT_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_CAINFO "(3), "
 +.BR CURLOPT_CAPATH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PIPEWAIT.3
index 5d68c99c7,000000000..4eeece977
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PIPEWAIT.3
+++ b/docs/libcurl/opts/GNURLOPT_PIPEWAIT.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PIPEWAIT 3 "12 May 2015" "libcurl 7.43.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PIPEWAIT \- wait for pipelining/multiplexing
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PIPEWAIT, long wait);
 +.SH DESCRIPTION
 +Set \fIwait\fP to 1L to tell libcurl to prefer to wait for a connection to
 +confirm or deny that it can do pipelining or multiplexing before continuing.
 +
 +When about to perform a new transfer that allows pipelining or multiplexing,
 +libcurl will check for existing connections to re-use and pipeline on. If no
 +such connection exists it will immediately continue and create a fresh new
 +connection to use.
 +
 +By setting this option to 1 - and having \fICURLMOPT_PIPELINING(3)\fP enabled
 +for the multi handle this transfer is associated with - libcurl will instead
 +wait for the connection to reveal if it is possible to pipeline/multiplex on
 +before it continues. This enables libcurl to much better keep the number of
 +connections to a minimum when using pipelining or multiplexing protocols.
 +
 +The effect thus becomes that with this option set, libcurl prefers to wait and
 +re-use an existing connection for pipelining rather than the opposite: prefer
 +to open a new connection rather than waiting.
 +
 +The waiting time is as long as it takes for the connection to get up and for
 +libcurl to get the necessary response back that informs it about its protocol
 +and support level.
 +.SH DEFAULT
 +0 (off)
 +.SH PROTOCOLS
 +HTTP(S)
 +.SH EXAMPLE
 +.SH AVAILABILITY
 +Added in 7.43.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_FORBID_REUSE "(3), " CURLOPT_FRESH_CONNECT "(3), "
 +.BR CURLMOPT_PIPELINING "(3), " CURLMOPT_MAX_HOST_CONNECTIONS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PORT.3
index 978d21d1f,000000000..836fdafb0
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PORT.3
+++ b/docs/libcurl/opts/GNURLOPT_PORT.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2014, 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PORT 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PORT \- set remote port number to work with
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PORT, long number);
 +.SH DESCRIPTION
 +This option sets \fInumber\fP to be the remote port number to connect to,
 +instead of the one specified in the URL or the default port for the used
 +protocol.
 +
 +Usually, you just let the URL decide which port to use but this allows the
 +application to override that.
 +
 +While this option accepts a 'long', a port number is usually a 16 bit number
 +and therefore using a port number over 65535 will cause a run-time error.
 +.SH DEFAULT
 +By default this is 0 which makes it not used.
 +.SH PROTOCOLS
 +Used for all protocols that speak to a port number.
 +.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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_PORT, 8080L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.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_POST.3
index 0b3080e0d,000000000..39f70d2eb
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_POST.3
+++ b/docs/libcurl/opts/GNURLOPT_POST.3
@@@ -1,90 -1,0 +1,90 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_POST 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_POST \- request an HTTP POST
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_POST, long post);
 +.SH DESCRIPTION
 +A parameter set to 1 tells libcurl to do a regular HTTP post. This will also
 +make the library use a "Content-Type: application/x-www-form-urlencoded"
 +header. (This is by far the most commonly used POST method).
 +
 +Use one of \fICURLOPT_POSTFIELDS(3)\fP or \fICURLOPT_COPYPOSTFIELDS(3)\fP
 +options to specify what data to post and \fICURLOPT_POSTFIELDSIZE(3)\fP or
 +\fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP to set the data size.
 +
 +Optionally, you can provide data to POST using the
 +\fICURLOPT_READFUNCTION(3)\fP and \fICURLOPT_READDATA(3)\fP options but then
 +you must make sure to not set \fICURLOPT_POSTFIELDS(3)\fP to anything but
 +NULL. When providing data with a callback, you must transmit it using chunked
 +transfer-encoding or you must set the size of the data with the
 +\fICURLOPT_POSTFIELDSIZE(3)\fP or \fICURLOPT_POSTFIELDSIZE_LARGE(3)\fP
 +options. To enable chunked encoding, you simply pass in the appropriate
 +Transfer-Encoding header, see the post-callback.c example.
 +
 +You can override the default POST Content-Type: header by setting your own
 +with \fICURLOPT_HTTPHEADER(3)\fP.
 +
 +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.
 +
 +If you use POST to an HTTP 1.1 server, you can send data without knowing the
 +size before starting the POST 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 in the request. (Since 7.66.0, libcurl will
 +automatically use chunked encoding for POSTs if the size is unknown.)
 +
 +When setting \fICURLOPT_POST(3)\fP to 1, libcurl will automatically set
 +\fICURLOPT_NOBODY(3)\fP and \fICURLOPT_HTTPGET(3)\fP to 0.
 +
 +If you issue a POST request and then want to make a HEAD or GET using the same
 +re-used handle, you must explicitly set the new request type using
 +\fICURLOPT_NOBODY(3)\fP or \fICURLOPT_HTTPGET(3)\fP or similar.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +HTTP
 +.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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_POST, 1L);
 +
 +  /* set up the read callback with CURLOPT_READFUNCTION */
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(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_HTTPPOST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_POSTFIELDS.3
index 88b16a302,000000000..d6b36c8ec
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 c3603e00e,000000000..37a3bf419
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 8d4750a20,000000000..3e7c86010
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 1e82453be,000000000..ea914dec3
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 1729c843f,000000000..c4da6bd8d
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 16d3cc0b6,000000000..1ec5510ee
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 28a3b2be7,000000000..c66df04a4
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_URL, "https://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 7074cb8a1,000000000..29c5dffb7
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 8156eaa38,000000000..28c228bc6
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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
++https://curl.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 bfa566ec6,000000000..a6151f1fa
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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
++https://curl.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 fe540720f,000000000..417d11958
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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.3
index 677b038d0,000000000..30d1ad47f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY.3
@@@ -1,116 -1,0 +1,116 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY \- set proxy to use
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY, char *proxy);
 +.SH DESCRIPTION
 +Set the \fIproxy\fP to use for the upcoming request. The parameter should be a
 +char * to a null-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.
 +
 +The proxy string may be prefixed with [scheme]:// to specify which kind of
 +proxy is used.
 +
 +.RS
 +.IP http://
 +HTTP Proxy. Default when no scheme or proxy type is specified.
 +.IP https://
 +HTTPS Proxy. (Added in 7.52.0 for OpenSSL, GnuTLS and NSS)
 +.IP socks4://
 +SOCKS4 Proxy.
 +.IP socks4a://
 +SOCKS4a Proxy. Proxy resolves URL hostname.
 +.IP socks5://
 +SOCKS5 Proxy.
 +.IP socks5h://
 +SOCKS5 Proxy. Proxy resolves URL hostname.
 +.RE
 +
 +Without a scheme prefix, \fICURLOPT_PROXYTYPE(3)\fP can be used to specify
 +which kind of proxy the string identifies.
 +
 +When you tell the library to use an HTTP proxy, libcurl will transparently
 +convert operations to HTTP even if you specify an FTP URL etc. This may have
 +an impact on what other features of the library you can use, such as
 +\fICURLOPT_QUOTE(3)\fP and similar FTP specifics that don't work unless you
 +tunnel through the HTTP proxy. Such tunneling is activated with
 +\fICURLOPT_HTTPPROXYTUNNEL(3)\fP.
 +
 +Setting the proxy string to "" (an empty string) will explicitly disable the
 +use of a proxy, even if there is an environment variable set for it.
 +
 +A proxy host string can also include protocol scheme (http://) and embedded
 +user + password.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH "Environment variables"
 +libcurl respects the proxy environment variables named \fBhttp_proxy\fP,
 +\fBftp_proxy\fP, \fBsftp_proxy\fP etc. If set, libcurl will use the specified
 +proxy for that URL scheme. So for a "FTP://" URL, the \fBftp_proxy\fP is
 +considered. \fBall_proxy\fP is used if no protocol specific proxy was set.
 +
 +If \fBno_proxy\fP (or \fBNO_PROXY\fP) is set, it is the exact equivalent of
 +setting the \fICURLOPT_NOPROXY(3)\fP option.
 +
 +The \fICURLOPT_PROXY(3)\fP and \fICURLOPT_NOPROXY(3)\fP options override
 +environment variables.
 +.SH DEFAULT
 +Default is NULL, meaning no 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_URL, "https://example.com/file.txt";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy:80";);
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Since 7.14.1 the proxy environment variable names can include the protocol
 +scheme.
 +
 +Since 7.21.7 the proxy string supports the socks protocols as "schemes".
 +
 +Since 7.50.2, unsupported schemes in proxy strings cause libcurl to return
 +error.
 +.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_PROXYPORT "(3), " CURLOPT_HTTPPROXYTUNNEL "(3), "
 +.BR CURLOPT_PROXYTYPE "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_PROXYAUTH.3
index 6439eb62a,000000000..0be2f299d
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXYAUTH.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXYAUTH.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PROXYAUTH 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXYAUTH \- set HTTP proxy authentication methods to try
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYAUTH, long bitmask);
 +.SH DESCRIPTION
 +Pass a long as parameter, which is set to a bitmask, to tell libcurl which
 +HTTP authentication method(s) you want it to use for your proxy
 +authentication.  If more than one bit is set, libcurl will first query the
 +site to see what authentication methods it supports and then pick the best one
 +you allow it to use. For some methods, this will induce an extra network
 +round-trip. Set the actual name and password with the
 +\fICURLOPT_PROXYUSERPWD(3)\fP option.
 +
 +The bitmask can be constructed by or'ing together the bits fully listed and
 +described in the \fICURLOPT_HTTPAUTH(3)\fP man page.
 +.SH DEFAULT
 +CURLAUTH_BASIC
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  CURLcode ret;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* use this proxy */
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://local.example.com:1080";);
 +  /* allow whatever auth the proxy speaks */
 +  curl_easy_setopt(curl, CURLOPT_PROXYAUTH, CURLAUTH_ANY);
 +  /* set the proxy credentials */
 +  curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, "james:007");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.10.7
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_NOT_BUILT_IN if the bitmask specified no supported authentication
 +methods.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), "
 +.BR CURLOPT_PROXYUSERPWD "(3), " CURLOPT_PROXYPORT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXYHEADER.3
index 08f610baa,000000000..a4e50e018
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXYHEADER.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXYHEADER.3
@@@ -1,75 -1,0 +1,75 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PROXYHEADER 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXYHEADER \- custom HTTP headers to pass to proxy
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYHEADER,
 +                          struct curl_slist *headers);
 +.SH DESCRIPTION
 +Pass a pointer to a linked list of HTTP headers to pass in your HTTP request
 +sent to a proxy. The rules for this list is identical to the
 +\fICURLOPT_HTTPHEADER(3)\fP option's.
 +
 +The headers set with this option is only ever used in requests sent to a proxy
 +- when there's also a request sent to a host.
 +
 +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.
 +
 +Pass a NULL to this to reset back to no custom headers.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +
 +struct curl_slist *list;
 +
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://proxy.example.com:80";);
 +
 +  list = curl_slist_append(NULL, "Shoesize: 10");
 +  list = curl_slist_append(list, "Accept:");
 +
 +  curl_easy_setopt(curl, CURLOPT_PROXYHEADER, list);
 +
 +  curl_easy_perform(curl);
 +
 +  curl_slist_free_all(list); /* free the list again */
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.37.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HEADEROPT "(3), " CURLOPT_HTTPHEADER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXYPASSWORD.3
index 04dfbbc96,000000000..9159787cf
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXYPASSWORD.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXYPASSWORD.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PROXYPASSWORD 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXYPASSWORD \- password to use with proxy authentication
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPASSWORD, char *pwd);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should be pointing to the null-terminated
 +password to use for authentication with the proxy.
 +
 +The \fICURLOPT_PROXYPASSWORD(3)\fP option should be used in conjunction with
 +the \fICURLOPT_PROXYUSERNAME(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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080";);
 +  curl_easy_setopt(curl, CURLOPT_PROXYUSERNAME, "mrsmith");
 +  curl_easy_setopt(curl, CURLOPT_PROXYPASSWORD, "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_PASSWORD "(3), " CURLOPT_PROXYUSERNAME "(3), "
 +.BR CURLOPT_HTTPAUTH "(3), " CURLOPT_PROXYAUTH "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_PROXYPORT.3
index 75afbbe9e,000000000..49274387f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXYPORT.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXYPORT.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PROXYPORT 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXYPORT \- port number the proxy listens on
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYPORT, long port);
 +.SH DESCRIPTION
 +Pass a long with this option to set the proxy port to connect to unless it is
 +specified in the proxy string \fICURLOPT_PROXY(3)\fP or uses 443 for https
 +proxies and 1080 for all others as default.
 +
 +While this accepts a 'long', the port number is 16 bit so it can't be larger
 +than 65535.
 +.SH DEFAULT
 +0, not specified which makes it use the default port
 +.SH PROTOCOLS
 +All
 +.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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "localhost");
 +  curl_easy_setopt(curl, CURLOPT_PROXYPORT, 8080L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXYTYPE.3
index 60df0143b,000000000..e67977d1c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXYTYPE.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXYTYPE.3
@@@ -1,76 -1,0 +1,76 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PROXYTYPE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXYTYPE \- proxy protocol type
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYTYPE, long type);
 +.SH DESCRIPTION
 +Pass one of the values below to set the type of the proxy.
 +
 +.RS
 +.IP CURLPROXY_HTTP
 +HTTP Proxy. Default.
 +.IP CURLPROXY_HTTPS
 +HTTPS Proxy. (Added in 7.52.0 for OpenSSL, GnuTLS and NSS)
 +.IP CURLPROXY_HTTP_1_0
 +HTTP 1.0 Proxy. This is very similar to CURLPROXY_HTTP except it uses HTTP/1.0
 +for any CONNECT tunnelling. It does not change the HTTP version of the actual
 +HTTP requests, controlled by \fICURLOPT_HTTP_VERSION(3)\fP.
 +.IP CURLPROXY_SOCKS4
 +SOCKS4 Proxy.
 +.IP CURLPROXY_SOCKS4A
 +SOCKS4a Proxy. Proxy resolves URL hostname.
 +.IP CURLPROXY_SOCKS5
 +SOCKS5 Proxy.
 +.IP CURLPROXY_SOCKS5_HOSTNAME
 +SOCKS5 Proxy. Proxy resolves URL hostname.
 +.RE
 +
 +Often it is more convenient to specify the proxy type with the scheme part of
 +the \fICURLOPT_PROXY(3)\fP string.
 +.SH DEFAULT
 +CURLPROXY_HTTP
 +.SH PROTOCOLS
 +Most
 +.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_PROXY, "local.example.com:1080");
 +  /* set the proxy type */
 +  curl_easy_setopt(curl, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYPORT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXYUSERNAME.3
index 4d85aaa63,000000000..0414c368a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXYUSERNAME.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXYUSERNAME.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PROXYUSERNAME 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXYUSERNAME \- user name to use for proxy authentication
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYUSERNAME,
 +                          char *username);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should be pointing to the null-terminated
 +user name to use for the transfer.
 +
 +\fICURLOPT_PROXYUSERNAME(3)\fP sets the user name to be used in protocol
 +authentication with the proxy.
 +
 +To specify the proxy password use the \fICURLOPT_PROXYPASSWORD(3)\fP.
 +
 +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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080";);
 +  curl_easy_setopt(curl, CURLOPT_PROXYUSERNAME, "mrsmith");
 +  curl_easy_setopt(curl, CURLOPT_PROXYPASSWORD, "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_PROXYPASSWORD "(3), " CURLOPT_USERNAME "(3), "
 +.BR CURLOPT_HTTPAUTH "(3), " CURLOPT_PROXYAUTH "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_PROXYUSERPWD.3
index 87cdda544,000000000..46e9a26e3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXYUSERPWD.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXYUSERPWD.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PROXYUSERPWD 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXYUSERPWD \- user name and password to use for proxy authentication
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXYUSERPWD, char *userpwd);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should be [user name]:[password] to use for
 +the connection to the HTTP proxy. Both the name and the password will be URL
 +decoded before use, so to include for example a colon in the user name you
 +should encode it as %3A. (This is different to how \fICURLOPT_USERPWD(3)\fP is
 +used - beware.)
 +
 +Use \fICURLOPT_PROXYAUTH(3)\fP to specify the authentication method.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +This is NULL by default.
 +.SH PROTOCOLS
 +Used with all protocols that can use a 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_URL, "https://example.com/foo.bin";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://localhost:8080";);
 +  curl_easy_setopt(curl, CURLOPT_PROXYUSERPWD, "clark%20kent:superman");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.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_PROXYTYPE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_CAINFO.3
index 1fb4ca30d,000000000..22f2d6b2d
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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
++https://curl.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_CAPATH.3
index aed464146,000000000..50bc2e10f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_CAPATH.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_CAPATH.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CAPATH 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXY_CAPATH \- specify directory holding proxy CA certificates
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_CAPATH, char *capath);
 +.SH DESCRIPTION
 +Pass a char * to a null-terminated string naming a directory holding multiple
 +CA certificates to verify the HTTPS proxy with. If libcurl is built against
 +OpenSSL, the certificate directory must be prepared using the openssl c_rehash
 +utility. This makes sense only when \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP is
 +enabled (which it is by default).
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +Everything used over an 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_CAPATH, "/etc/cert-dir");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +
 +This option is supported by the OpenSSL, GnuTLS, and mbedTLS (since 7.56.0)
 +backends. The NSS backend provides the option only for backward compatibility.
 +.SH RETURN VALUE
 +CURLE_OK if supported; or an error such as:
 +
 +CURLE_NOT_BUILT_IN - Not supported by the SSL backend
 +
 +CURLE_UNKNOWN_OPTION
 +
 +CURLE_OUT_OF_MEMORY
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY_CAINFO "(3), "
- .Br CURLOPT_CAINFO "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
++.BR CURLOPT_CAINFO "(3), " CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_CRLFILE.3
index 499435c58,000000000..72e09b165
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_ISSUERCERT.3
index 6396dddfb,000000000..840337b62
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_ISSUERCERT.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_ISSUERCERT.3
@@@ -1,73 -1,0 +1,73 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ISSUERCERT 3 "24 Jun 2020" "libcurl 7.71.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_ISSUERCERT \- proxy issuer SSL certificate filename
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_ISSUERCERT, char *file);
 +.SH DESCRIPTION
 +Pass a char * to a null-terminated string naming a \fIfile\fP holding a CA
 +certificate in PEM format. If the option is set, an additional check against
 +the peer certificate is performed to verify the issuer of the the HTTPS proxy
 +is indeed the one associated with the certificate provided by the option.
 +This additional check is useful in multi-level PKI where one needs to enforce
 +that the peer certificate is from a specific branch of the tree.
 +
 +This option makes sense only when used in combination with the
 +\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP option. Otherwise, the result of the
 +check is not considered as failure.
 +
 +A specific error code (CURLE_SSL_ISSUER_ERROR) is defined with the option,
 +which is returned if the setup of the SSL/TLS session has failed due to a
 +mismatch with the issuer of peer certificate
 +(\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP has to be set too for the check to
 +fail).
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.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/";);
 +  /* using an HTTPS proxy */
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_ISSUERCERT, "/etc/certs/cacert.pem");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in libcurl 7.71.0. This option is supported by the OpenSSL backends.
 +.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_ISSUERCERT_BLOB.3
index 6165bedf1,000000000..bd357da9b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_ISSUERCERT_BLOB.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_ISSUERCERT_BLOB.3
@@@ -1,85 -1,0 +1,85 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ISSUERCERT_BLOB 3 "24 Jun 2020" "libcurl 7.71.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_ISSUERCERT_BLOB \- proxy issuer SSL certificate from memory blob
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_ISSUERCERT_BLOB,
 +                          struct curl_blob *blob);
 +.fi
 +.SH DESCRIPTION
 +Pass a pointer to a curl_blob struct, which contains information (pointer and
 +size) about a memory block with binary data of a CA certificate in PEM
 +format. If the option is set, an additional check against the peer certificate
 +is performed to verify the issuer of the the HTTPS proxy is indeed the one
 +associated with the certificate provided by the option. This additional check
 +is useful in multi-level PKI where one needs to enforce that the peer
 +certificate is from a specific branch of the tree.
 +
 +This option should be used in combination with the
 +\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP option. Otherwise, the result of the
 +check is not considered as failure.
 +
 +A specific error code (CURLE_SSL_ISSUER_ERROR) is defined with the option,
 +which is returned if the setup of the SSL/TLS session has failed due to a
 +mismatch with the issuer of peer certificate
 +(\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP has to be set too for the check to
 +fail).
 +
 +If the blob is initialized with the flags member of struct curl_blob set to
 +CURL_BLOB_COPY, the application does not have to keep the buffer around after
 +setting this.
 +
 +This option is an alternative to \fICURLOPT_PROXY_ISSUERCERT(3)\fP which
 +instead expects a file name as input.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS-based protocols
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct curl_blob blob;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* using an HTTPS proxy */
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://localhost:443";);
 +  blob.data = certificateData;
 +  blob.len = filesize;
 +  blob.flags = CURL_BLOB_COPY;
 +  curl_easy_setopt(curl, CURLOPT_PROXY_ISSUERCERT_BLOB, &blob);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in libcurl 7.71.0. This option is supported by the OpenSSL backends.
 +.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 3da1669da,000000000..d825642f4
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_URL, "https://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_PINNEDPUBLICKEY.3
index f0b344630,000000000..0b02bac9e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_PINNEDPUBLICKEY.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_PINNEDPUBLICKEY.3
@@@ -1,111 -1,0 +1,111 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_PINNEDPUBLICKEY 3 "24 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_PINNEDPUBLICKEY \- set pinned public key for https proxy
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_PINNEDPUBLICKEY, char 
*pinnedpubkey);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. The string can be the
 +file name of your pinned public key. The file format expected is "PEM" or 
"DER".
 +The string can also be any number of base64 encoded sha256 hashes preceded by
 +"sha256//" and separated by ";"
 +
 +When negotiating a TLS or SSL connection, the https proxy sends a certificate
 +indicating its identity. A public key is extracted from this certificate and
 +if it does not exactly match the public key provided to this option, curl will
 +abort the connection before sending or receiving any data.
 +
 +On mismatch, \fICURLE_SSL_PINNEDPUBKEYNOTMATCH\fP is returned.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy:443";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_PINNEDPUBLICKEY,
 +  
"sha256//YhKJKSzoTt2b5FP18fvpHo7fJYqQCjAa3HWY3tvRMwE=;sha256//t62CeU2tQiqkexU74Gxa2eg7fRbEgoChTociMee9wno=");
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH PUBLIC KEY EXTRACTION
 +If you do not have the https proxy server's public key file you can extract it
 +from the https proxy server's certificate.
 +.nf
 +# retrieve the server's certificate if you don't already have it
 +#
 +# be sure to examine the certificate to see if it is what you expected
 +#
 +# Windows-specific:
 +# - Use NUL instead of /dev/null.
 +# - OpenSSL may wait for input instead of disconnecting. Hit enter.
 +# - If you don't have sed, then just copy the certificate into a file:
 +#   Lines from -----BEGIN CERTIFICATE----- to -----END CERTIFICATE-----.
 +#
 +openssl s_client -servername www.example.com -connect www.example.com:443 < 
/dev/null | sed -n "/-----BEGIN/,/-----END/p" > www.example.com.pem
 +
 +# extract public key in pem format from certificate
 +openssl x509 -in www.example.com.pem -pubkey -noout > 
www.example.com.pubkey.pem
 +
 +# convert public key from pem to der
 +openssl asn1parse -noout -inform pem -in www.example.com.pubkey.pem -out 
www.example.com.pubkey.der
 +
 +# sha256 hash and base64 encode der to string for use
 +openssl dgst -sha256 -binary www.example.com.pubkey.der | openssl base64
 +.fi
 +The public key in PEM format contains a header, base64 data and a
 +footer:
 +.nf
 +-----BEGIN PUBLIC KEY-----
 +[BASE 64 DATA]
 +-----END PUBLIC KEY-----
 +.fi
 +.SH AVAILABILITY
 +PEM/DER support:
 +
 +  7.52.0: GSKit, GnuTLS, NSS, OpenSSL, mbedtls, wolfSSL
 +
 +sha256 support:
 +
 +  7.52.0: GnuTLS, NSS, OpenSSL, mbedtls, wolfSSL
 +
 +Other SSL backends not supported.
 +.SH RETURN VALUE
 +Returns CURLE_OK if TLS enabled, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), "
 +.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_PROXY_CAINFO "(3), "
 +.BR CURLOPT_PROXY_CAPATH "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SERVICE_NAME.3
index 875a90440,000000000..fc7182d4b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SERVICE_NAME.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SERVICE_NAME.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SERVICE_NAME 3 "17 Jun 2015" "libcurl 7.43.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_SERVICE_NAME \- proxy authentication service name
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SERVICE_NAME, char 
*name);
 +.SH DESCRIPTION
 +Pass a char * as parameter to a string holding the \fIname\fP of the
 +service. The default service name is "HTTP" for HTTP based proxies and "rcmd"
 +for SOCKS5. This option allows you to change it.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +See above
 +.SH PROTOCOLS
 +All network protocols
 +.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_PROXY_SERVICE_NAME, "custom");
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.43.0 for HTTP proxies, 7.49.0 for SOCKS5 proxies.
 +.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 "(3), " CURLOPT_PROXYTYPE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSLCERT.3
index 677225eef,000000000..f670f0070
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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 b0ecc2b15,000000000..8f3525c7f
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_SSLCERT_BLOB.3
index 4e7fc427b,000000000..76c9f6b7b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSLCERT_BLOB.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSLCERT_BLOB.3
@@@ -1,72 -1,0 +1,72 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_BLOB 3 "24 Jun 2020" "libcurl 7.71.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_SSLCERT_BLOB \- SSL proxy client certificate from memory blob
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLCERT_BLOB, struct 
curl_blob *blob);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_blob structure, which contains information (pointer
 +and size) about a memory block with binary data of the certificate used to
 +connect to the HTTPS proxy. The format must be "P12" on Secure Transport or
 +Schannel. The format must be "P12" or "PEM" on OpenSSL.  The string "P12" or
 +"PEM" must be specified with \fICURLOPT_PROXY_SSLCERTTYPE(3)\fP.
 +
 +If the blob is initialized with the flags member of struct curl_blob set to
 +CURL_BLOB_COPY, the application does not have to keep the buffer around after
 +setting this.
 +
 +This option is an alternative to \fICURLOPT_PROXY_SSLCERT(3)\fP which instead
 +expects a file name as input.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct curl_blob blob;
 +  blob.data = certificateData;
 +  blob.len = filesize;
 +  blob.flags = CURL_BLOB_COPY;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY, "key.pem");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT_BLOB, &blob);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in libcurl 7.71.0. This option is supported by the OpenSSL, Secure
 +Transport and Schannel backends.
 +.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_PROXY_SSLCERT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSLKEY.3
index e8bcaab66,000000000..3cff36a5f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSLKEY.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSLKEY.3
@@@ -1,68 -1,0 +1,68 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLKEY 3 "16 Nov 2016" "libcurl 7.52.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_PROXY_SSLKEY \- specify private keyfile for TLS and SSL proxy client 
cert
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEY, char *keyfile);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. The string should be
 +the file name of your private key used for connecting to the HTTPS proxy. The
 +default format is "PEM" and can be changed with
 +\fICURLOPT_PROXY_SSLKEYTYPE(3)\fP.
 +
 +(iOS and Mac OS X only) This option is ignored if curl was built against
 +Secure Transport. Secure Transport expects the private key to be already
 +present in the keychain or PKCS#12 file containing the certificate.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.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_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_SSLKEYTYPE "(3), " CURLOPT_PROXY_SSLCERT "(3), "
 +.BR CURLOPT_SSLKEYTYPE "(3), " CURLOPT_SSLCERT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSLKEYTYPE.3
index 344db1223,000000000..c72dbb9e1
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_SSLKEY_BLOB.3
index 7431f3261,000000000..7ad093712
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSLKEY_BLOB.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSLKEY_BLOB.3
@@@ -1,73 -1,0 +1,73 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLKEY_BLOB 3 "24 Jun 2020" "libcurl 7.71.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_SSLKEY_BLOB \- private key for proxy cert from memory blob
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLKEY_BLOB,
 +                          struct curl_blob *blob);
 +.fi
 +.SH DESCRIPTION
 +Pass a pointer to a curl_blob structure that contains information (pointer and
 +size) about the private key for connecting to the HTTPS proxy. Compatible with
 +OpenSSL. The format (like "PEM") must be specified with
 +\fICURLOPT_PROXY_SSLKEYTYPE(3)\fP.
 +
 +If the blob is initialized with the flags member of struct curl_blob set to
 +CURL_BLOB_COPY, the application does not have to keep the buffer around after
 +setting this.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct curl_blob blob;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "https://proxy";);
 +  blob.data = certificateData;
 +  blob.len = filesize;
 +  blob.flags = CURL_BLOB_COPY;
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERT_BLOB, &blob);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLCERTTYPE, "PEM");
 +
 +  blob.data = privateKeyData;
 +  blob.len = privateKeySize;
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSLKEY_BLOB, &blob);
 +  curl_easy_setopt(curl, CURLOPT_PROXY_KEYPASSWD, "s3cret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in libcurl 7.71.0. This option is supported by the OpenSSL backends.
 +.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_SSLKEYTYPE "(3), " CURLOPT_SSLKEY "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSLVERSION.3
index 7d3b0f5aa,000000000..d7f914d0b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSLVERSION.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSLVERSION.3
@@@ -1,100 -1,0 +1,100 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLVERSION 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_SSLVERSION \- set preferred proxy TLS/SSL version
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSLVERSION, long 
version);
 +.SH DESCRIPTION
 +Pass a long as parameter to control which version of SSL/TLS to attempt to use
 +when connecting to an HTTPS proxy.
 +
 +Use one of the available defines for this purpose. The available options are:
 +.RS
 +.IP CURL_SSLVERSION_DEFAULT
 +The default action. This will attempt to figure out the remote SSL protocol
 +version.
 +.IP CURL_SSLVERSION_TLSv1
 +TLSv1.x
 +.IP CURL_SSLVERSION_TLSv1_0
 +TLSv1.0
 +.IP CURL_SSLVERSION_TLSv1_1
 +TLSv1.1
 +.IP CURL_SSLVERSION_TLSv1_2
 +TLSv1.2
 +.IP CURL_SSLVERSION_TLSv1_3
 +TLSv1.3
 +.RE
 +The maximum TLS version can be set by using \fIone\fP of the
 +CURL_SSLVERSION_MAX_ macros below. It is also possible to OR \fIone\fP of the
 +CURL_SSLVERSION_ macros with \fIone\fP of the CURL_SSLVERSION_MAX_ macros.
 +The MAX macros are not supported for WolfSSL.
 +.RS
 +.IP CURL_SSLVERSION_MAX_DEFAULT
 +The flag defines the maximum supported TLS version as TLSv1.2, or the default
 +value from the SSL library.
 +(Added in 7.54.0)
 +.IP CURL_SSLVERSION_MAX_TLSv1_0
 +The flag defines maximum supported TLS version as TLSv1.0.
 +(Added in 7.54.0)
 +.IP CURL_SSLVERSION_MAX_TLSv1_1
 +The flag defines maximum supported TLS version as TLSv1.1.
 +(Added in 7.54.0)
 +.IP CURL_SSLVERSION_MAX_TLSv1_2
 +The flag defines maximum supported TLS version as TLSv1.2.
 +(Added in 7.54.0)
 +.IP CURL_SSLVERSION_MAX_TLSv1_3
 +The flag defines maximum supported TLS version as TLSv1.3.
 +(Added in 7.54.0)
 +.RE
 +
 +In versions of curl prior to 7.54 the CURL_SSLVERSION_TLS options were
 +documented to allow \fIonly\fP the specified TLS version, but behavior was
 +inconsistent depending on the TLS library.
 +
 +.SH DEFAULT
 +CURL_SSLVERSION_DEFAULT
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* ask libcurl to use TLS version 1.0 or later */
 +  curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
 +
 +  /* Perform the request */
 +  curl_easy_perform(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 CURLOPT_USE_SSL "(3), " CURLOPT_HTTP_VERSION "(3), "
 +.BR CURLOPT_IPRESOLVE "(3) " CURLOPT_SSLVERSION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSL_CIPHER_LIST.3
index bf40f318a,000000000..06b72625c
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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 2f40b6bbb,000000000..221dee592
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSL_OPTIONS.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSL_OPTIONS.3
@@@ -1,82 -1,0 +1,82 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 Secure Transport, 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 block list 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_SSL_VERIFYHOST.3
index afcc51413,000000000..462a33e3e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSL_VERIFYHOST.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSL_VERIFYHOST.3
@@@ -1,89 -1,0 +1,89 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_VERIFYHOST 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_SSL_VERIFYHOST \- verify the proxy certificate's name against 
host
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYHOST, long 
verify);
 +.SH DESCRIPTION
 +Pass a long set to 2L as asking curl to \fIverify\fP in the HTTPS proxy's
 +certificate name fields against the proxy name.
 +
 +This option determines whether libcurl verifies that the proxy cert contains
 +the correct name for the name it is known as.
 +
 +When \fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP is 2, the proxy certificate must
 +indicate that the server is the proxy to which you meant to connect to, or the
 +connection fails.
 +
 +Curl considers the proxy the intended one when the Common Name field or a
 +Subject Alternate Name field in the certificate matches the host name in the
 +proxy string which you told curl to use.
 +
 +If \fIverify\fP value is set to 1:
 +
 +In 7.28.0 and earlier: treated as a debug option of some sorts, not supported
 +anymore due to frequently leading to programmer mistakes.
 +
 +From 7.28.1 to 7.65.3: setting it to 1 made curl_easy_setopt() return an error
 +and leaving the flag untouched.
 +
 +From 7.66.0: treats 1 and 2 the same.
 +
 +When the \fIverify\fP value is 0L, the connection succeeds regardless of the
 +names used in the certificate. Use that ability with caution!
 +
 +See also \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP to verify the digital signature
 +of the proxy certificate.  If libcurl is built against NSS and
 +\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP is zero,
 +\fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP is also set to zero and cannot be
 +overridden.
 +.SH DEFAULT
 +2
 +.SH PROTOCOLS
 +All protocols when used over an HTTPS proxy.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Set the default value: strict name check please */
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSL_VERIFYHOST, 2L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0.
 +
 +If built TLS enabled.
 +.SH RETURN VALUE
 +Returns CURLE_OK if TLS is supported, and CURLE_UNKNOWN_OPTION if not.
 +
 +If 1 is set as argument, \fICURLE_BAD_FUNCTION_ARGUMENT\fP is returned.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), " CURLOPT_PROXY_CAINFO "(3), "
 +.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_CAINFO "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_SSL_VERIFYPEER.3
index 656e6d8e5,000000000..9489df35c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_SSL_VERIFYPEER.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_SSL_VERIFYPEER.3
@@@ -1,89 -1,0 +1,89 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_VERIFYPEER 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_SSL_VERIFYPEER \- verify the proxy's SSL certificate
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_SSL_VERIFYPEER, long 
verify);
 +.SH DESCRIPTION
 +Pass a long as parameter set to 1L to enable or 0L to disable.
 +
 +This option tells curl to verifies the authenticity of the HTTPS proxy's
 +certificate. A value of 1 means curl verifies; 0 (zero) means it doesn't.
 +
 +This is the proxy version of \fICURLOPT_SSL_VERIFYPEER(3)\fP that's used for
 +ordinary HTTPS servers.
 +
 +When negotiating a TLS or SSL connection, the server sends a certificate
 +indicating its identity. Curl verifies whether the certificate is authentic,
 +i.e. that you can trust that the server is who the certificate says it is.
 +This trust is based on a chain of digital signatures, rooted in certification
 +authority (CA) certificates you supply.  curl uses a default bundle of CA
 +certificates (the path for that is determined at build time) and you can
 +specify alternate certificates with the \fICURLOPT_PROXY_CAINFO(3)\fP option
 +or the \fICURLOPT_PROXY_CAPATH(3)\fP option.
 +
 +When \fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP is enabled, and the verification
 +fails to prove that the certificate is authentic, the connection fails.  When
 +the option is zero, the peer certificate verification succeeds regardless.
 +
 +Authenticating the certificate is not enough to be sure about the server. You
 +typically also want to ensure that the server is the server you mean to be
 +talking to.  Use \fICURLOPT_PROXY_SSL_VERIFYHOST(3)\fP for that. The check
 +that the host name in the certificate is valid for the host name you're
 +connecting to is done independently of the
 +\fICURLOPT_PROXY_SSL_VERIFYPEER(3)\fP option.
 +
 +WARNING: disabling verification of the certificate allows bad guys to
 +man-in-the-middle the communication without you knowing it. Disabling
 +verification makes the communication insecure. Just having encryption on a
 +transfer is not enough as you cannot be sure that you are communicating with
 +the correct end-point.
 +.SH DEFAULT
 +1
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Set the default value: strict certificate check please */
 +  curl_easy_setopt(curl, CURLOPT_PROXY_SSL_VERIFYPEER, 1L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +
 +If built TLS enabled.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_SSL_VERIFYPEER "(3), "
 +.BR CURLOPT_SSL_VERIFYHOST "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_TLS13_CIPHERS.3
index eb6ee937d,000000000..97714d3cd
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_TLS13_CIPHERS.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_TLS13_CIPHERS.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TLS13_CIPHERS 3 "25 May 2018" "libcurl 7.61.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_TLS13_CIPHERS \- ciphers suites for proxy TLS 1.3
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLS13_CIPHERS, char 
*list);
 +.SH DESCRIPTION
 +Pass a char *, pointing to a null-terminated string holding the list of cipher
 +suites to use for the TLS 1.3 connection to a proxy. The list must be
 +syntactically correct, it consists of one or more cipher suite strings
 +separated by colons.
 +
 +You'll find more details about cipher lists on this URL:
 +
-  https://curl.haxx.se/docs/ssl-ciphers.html
++ https://curl.se/docs/ssl-ciphers.html
 +
 +This option is currently used only when curl is built to use OpenSSL 1.1.1 or
 +later. If you are using a different SSL backend you can try setting TLS 1.3
 +cipher suites by using the CURLOPT_PROXY_SSL_CIPHER_LIST option.
 +
 +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_PROXY_TLS13_CIPHERS,
 +                   "TLS13-CHACHA20-POLY1305-SHA256");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.61.0.
 +Available when built with OpenSSL >= 1.1.1.
 +.SH RETURN VALUE
 +Returns CURLE_OK if supported, CURLE_NOT_BUILT_IN otherwise.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY_SSL_CIPHER_LIST "(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_TLSAUTH_PASSWORD.3
index 464916e81,000000000..33991eec8
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_TLSAUTH_PASSWORD.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_TLSAUTH_PASSWORD.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TLSAUTH_PASSWORD 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_TLSAUTH_PASSWORD \- password to use for proxy TLS authentication
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_PASSWORD, char 
*pwd);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should point to the null-terminated password
 +to use for the TLS authentication method specified with the
 +\fICURLOPT_PROXY_TLSAUTH_TYPE(3)\fP option. Requires that the
 +\fICURLOPT_PROXY_TLSAUTH_USERNAME(3)\fP option also be set.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.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_TLSAUTH_TYPE, "SRP");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_USERNAME, "user");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_PASSWORD, "secret");
 +  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_TLSAUTH_TYPE "(3), " CURLOPT_PROXY_TLSAUTH_USERNAME "(3), "
 +.BR CURLOPT_TLSAUTH_TYPE "(3), " CURLOPT_TLSAUTH_USERNAME "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_TLSAUTH_TYPE.3
index dc4bfa90f,000000000..a16dd1e38
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_TLSAUTH_TYPE.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_TLSAUTH_TYPE.3
@@@ -1,70 -1,0 +1,70 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TLSAUTH_TYPE 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_TLSAUTH_TYPE \- set proxy TLS authentication methods
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_TYPE, char 
*type);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. The string should be
 +the method of the TLS authentication used for the HTTPS connection. Supported
 +method is "SRP".
 +
 +.IP SRP
 +TLS-SRP authentication. Secure Remote Password authentication for TLS is
 +defined in RFC5054 and provides mutual authentication if both sides have a
 +shared secret. To use TLS-SRP, you must also set the
 +\fICURLOPT_PROXY_TLSAUTH_USERNAME(3)\fP and
 +\fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP options.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +blank
 +.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_TLSAUTH_TYPE, "SRP");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_USERNAME, "user");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_PASSWORD, "secret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.52.0
 +
 +You need to build libcurl with GnuTLS or OpenSSL with TLS-SRP support for this
 +to work.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY_TLSAUTH_USERNAME "(3), " CURLOPT_PROXY_TLSAUTH_PASSWORD 
"(3), "
 +.BR CURLOPT_TLSAUTH_USERNAME "(3), " CURLOPT_TLSAUTH_PASSWORD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_TLSAUTH_USERNAME.3
index 742f206c4,000000000..0bf12479c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_PROXY_TLSAUTH_USERNAME.3
+++ b/docs/libcurl/opts/GNURLOPT_PROXY_TLSAUTH_USERNAME.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TLSAUTH_USERNAME 3 "16 Nov 2016" "libcurl 7.52.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_PROXY_TLSAUTH_USERNAME \- user name to use for proxy TLS 
authentication
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_PROXY_TLSAUTH_USERNAME, char 
*user);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should point to the null-terminated username
 +to use for the HTTPS proxy TLS authentication method specified with the
 +\fICURLOPT_PROXY_TLSAUTH_TYPE(3)\fP option. Requires that the
 +\fICURLOPT_PROXY_TLSAUTH_PASSWORD(3)\fP option also be set.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.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_TLSAUTH_TYPE, "SRP");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_USERNAME, "user");
 +  curl_easy_setopt(curl, CURLOPT_PROXY_TLSAUTH_PASSWORD, "secret");
 +  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_TLSAUTH_TYPE "(3), " CURLOPT_PROXY_TLSAUTH_PASSWORD "(3), "
 +.BR CURLOPT_TLSAUTH_TYPE "(3), " CURLOPT_TLSAUTH_PASSWORD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_PROXY_TRANSFER_MODE.3
index 66fbdcc65,000000000..0919de9b7
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 54cf0400c,000000000..8c6e367b3
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 a429b72b0,000000000..96ba48ac9
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_QUOTE.3
+++ b/docs/libcurl/opts/GNURLOPT_QUOTE.3
@@@ -1,105 -1,0 +1,113 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 "atime date file"
++The atime command sets the last access time of the file named by the file
++operand. The <date expression> can be all sorts of date strings, see the
++\fIcurl_getdate(3)\fP man page for date expression details. (Added in 7.73.0)
 +.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 "mtime date file"
++The mtime command sets the last modification time of the file named by the
++file operand. The <date expression> can be all sorts of date strings, see the
++\fIcurl_getdate(3)\fP man page for date expression details. (Added in 7.73.0)
 +.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_RANDOM_FILE.3
index f5939d21d,000000000..54b8eac4a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RANDOM_FILE.3
+++ b/docs/libcurl/opts/GNURLOPT_RANDOM_FILE.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_RANDOM_FILE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_RANDOM_FILE \- specify a source for random data
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANDOM_FILE, char *path);
 +.SH DESCRIPTION
 +Pass a char * to a null-terminated file name. The file might be used to read
 +from to seed the random engine for SSL and more.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL, not used
 +.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_RANDOM_FILE, "junk.txt");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK on success or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_EGDSOCKET "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_RANGE.3
index 4311ad1e9,000000000..6055d60ad
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RANGE.3
+++ b/docs/libcurl/opts/GNURLOPT_RANGE.3
@@@ -1,81 -1,0 +1,81 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_RANGE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_RANGE \- set byte range to request
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RANGE, char *range);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should contain the specified range you want
 +to retrieve. It should be in the format "X-Y", where either X or Y may be left
 +out and X and Y are byte indexes.
 +
 +HTTP transfers also support several intervals, separated with commas as in
 +\fI"X-Y,N-M"\fP. Using this kind of multiple intervals will cause the HTTP
 +server to send the response document in pieces (using standard MIME separation
 +techniques). Unfortunately, the HTTP standard (RFC 7233 section 3.1) allows
 +servers to ignore range requests so even when you set \fICURLOPT_RANGE(3)\fP
 +for a request, you may end up getting the full response sent back.
 +
 +For RTSP, the formatting of a range should follow RFC2326 Section 12.29. For
 +RTSP, byte ranges are \fBnot\fP permitted. Instead, ranges should be given in
 +npt, utc, or smpte formats.
 +
 +For HTTP PUT uploads this option should not be used, since it may conflict 
with
 +other options. If you need to upload arbitrary parts of a file (like for
 +Amazon's web services) support is limited. We suggest set resume position 
using
 +\fICURLOPT_RESUME_FROM(3)\fP, set end (resume+size) position using
 +\fICURLOPT_INFILESIZE(3)\fP and seek to the resume position before initiating
 +the transfer for each part. For more information refer to
- https://curl.haxx.se/mail/lib-2019-05/0012.html
++https://curl.se/mail/lib-2019-05/0012.html
 +
 +Pass a NULL to this option to disable the use of ranges.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP, FTP, FILE, RTSP and SFTP.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* get the first 200 bytes */
 +  curl_easy_setopt(curl, CURLOPT_RANGE, "0-199");
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +FILE since 7.18.0, RTSP since 7.20.0
 +.SH RETURN VALUE
 +Returns CURLE_OK on success or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_RESUME_FROM "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_READDATA.3
index 9b532248d,000000000..c47e518c1
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 e0e3b255f,000000000..7b8a4ea64
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_READFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_READFUNCTION.3
@@@ -1,142 -1,0 +1,142 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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.
 +.\" *
 +.\" **************************************************************************
 +.\"
 +.Dd June 25, 2020
 +.Dt GNURLOPT_READFUNCTION 3
 +.Os
 +.Sh NAME
 +.Nm CURLOPT_READFUNCTION
 +.Nd read callback for data uploads
 +.Sh SYNOPSIS
 +.In gnurl/curl.h
 +.Ft size_t
 +.Fn read_callback "char *buffer" "size_t size" "size_t nitems" "void 
*userdata"
 +.Ft CURLcode
 +.Fn 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
 +.Fa buffer
 +should be filled up with at most
 +.Fa size
 +multiplied with
 +.Fa nitems
 +number of bytes by your function.
 +
 +Set the
 +.Fa userdata
 +argument with the
 +.Xr CURLOPT_READDATA 3
 +option.
 +
 +Your function must return the actual number of bytes that it stored in
 +the data area pointed at by the pointer
 +.Fa buffer .
 +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
 +.Dv CURL_READFUNC_ABORT
 +to stop the current operation immediately, resulting in a
 +.Dv CURLE_ABORTED_BY_CALLBACK
 +error code from the transfer.
 +
 +The callback can return
 +.Dv CURL_READFUNC_PAUSE
 +to cause reading from this connection to pause.
 +See
 +.Xr curl_easy_pause 3
 +for further details.
 +
 +.Sh BUGS
 +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
 +.Xr CURLOPT_READDATA 3 .
 +
 +You can set the total size of the data you are sending by using
 +.Xr CURLOPT_INFILESIZE_LARGE 3
 +or
 +.Xr CURLOPT_POSTFIELDSIZE_LARGE 3 ,
 +depending on the type of transfer. For some transfer types it may be
 +required and it allows for better error checking.
 +.Sh DEFAULT
 +The default internal read callback is fread().
 +.Sh PROTOCOLS
 +This is used for all protocols when doing uploads.
 +.Sh EXAMPLE
 +.Bd -literal
 +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);
 +}
 +.Ed
 +.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
 +.Xr CURLOPT_READDATA 3 ,
 +.Xr CURLOPT_WRITEFUNCTION 3 ,
 +.Xr CURLOPT_SEEKFUNCTION 3 ,
 +.Xr CURLOPT_UPLOAD 3 ,
 +.Xr CURLOPT_POST 3 ,
 +.Xr CURLOPT_UPLOAD_BUFFERSIZE 3 .
diff --cc docs/libcurl/opts/GNURLOPT_REDIR_PROTOCOLS.3
index 3a9f07475,000000000..9ba8892da
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_REDIR_PROTOCOLS.3
+++ b/docs/libcurl/opts/GNURLOPT_REDIR_PROTOCOLS.3
@@@ -1,104 -1,0 +1,104 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_REDIR_PROTOCOLS 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_REDIR_PROTOCOLS \- set protocols allowed to redirect to
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REDIR_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 a transfer that it follows to in a
 +redirect when \fICURLOPT_FOLLOWLOCATION(3)\fP is enabled. This allows you to
 +limit specific transfers to only be allowed to use a subset of protocols in
 +redirections.
 +
 +Protocols denied by \fICURLOPT_PROTOCOLS(3)\fP are not overridden by this
 +option.
 +
 +By default libcurl will allow HTTP, HTTPS, FTP and FTPS on redirect (7.65.2).
 +Older versions of libcurl allowed all protocols on redirect except several
 +disabled for security reasons: Since 7.19.4 FILE and SCP are disabled, and
 +since 7.40.0 SMB and SMBS are also disabled. \fICURLPROTO_ALL\fP enables all
 +protocols on redirect, including those disabled for security.
 +
 +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
 +HTTP, HTTPS, FTP and FTPS (Since 7.65.2).
 +
 +Older versions defaulted to all protocols except FILE, SCP and since 7.40.0
 +SMB and SMBS.
 +.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 redirects to HTTP and HTTPS URLs */
 +  curl_easy_setopt(curl, CURLOPT_REDIR_PROTOCOLS,
 +                   CURLPROTO_HTTP | CURLPROTO_HTTPS);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.4, before then it would follow all protocols.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROTOCOLS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_REFERER.3
index 059a9d3e4,000000000..4f9e99fcc
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_setopt(curl, CURLOPT_REFERER, "https://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_REQUEST_TARGET.3
index e7124e5aa,000000000..a30ab3370
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_REQUEST_TARGET.3
+++ b/docs/libcurl/opts/GNURLOPT_REQUEST_TARGET.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_REQUEST_TARGET 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_REQUEST_TARGET \- specify an alternative target for this request
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_REQUEST_TARGET, string);
 +.SH DESCRIPTION
 +Pass a char * to string which libcurl uses in the upcoming request instead of
 +the path as extracted from the URL.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/*";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/*";);
 +  curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "OPTIONS");
 +
 +  /* issue an OPTIONS * request (no leading slash) */
 +  curl_easy_setopt(curl, CURLOPT_REQUEST_TARGET, "*");
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.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 CURLOPT_CUSTOMREQUEST "(3), " CURLOPT_HTTPGET "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_RESOLVE.3
index 5a064eca4,000000000..4a0373207
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_setopt(curl, CURLOPT_URL, "https://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_RESOLVER_START_DATA.3
index 31ecf8e88,000000000..3bbc252dd
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RESOLVER_START_DATA.3
+++ b/docs/libcurl/opts/GNURLOPT_RESOLVER_START_DATA.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_RESOLVER_START_DATA 3 "14 Feb 2018" "libcurl 7.59.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_RESOLVER_START_DATA \- custom pointer passed to the resolver start 
callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RESOLVER_START_DATA, void 
*pointer);
 +.SH DESCRIPTION
 +Pass a \fIpointer\fP that will be untouched by libcurl and passed as the third
 +argument in the resolver start callback set with
 +\fICURLOPT_RESOLVER_START_FUNCTION(3)\fP.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +static int resolver_start_cb(void *resolver_state, void *reserved,
 +                             void *userdata)
 +{
 +  (void)reserved;
 +  printf("Received resolver_state=%p userdata=%p\\n",
 +         resolver_state, userdata);
 +  return 0;
 +}
 +
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_RESOLVER_START_FUNCTION, resolver_start_cb);
 +  curl_easy_setopt(curl, CURLOPT_RESOLVER_START_DATA, curl);
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.59.0
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_RESOLVER_START_FUNCTION "(3) "
diff --cc docs/libcurl/opts/GNURLOPT_RESOLVER_START_FUNCTION.3
index 9adcfca89,000000000..504646d4c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RESOLVER_START_FUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_RESOLVER_START_FUNCTION.3
@@@ -1,83 -1,0 +1,83 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_RESOLVER_START_FUNCTION 3 "14 Feb 2018" "libcurl 7.59.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_RESOLVER_START_FUNCTION \- set callback to be called before a new 
resolve request is started
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +int resolver_start_cb(void *resolver_state, void *reserved, void *userdata);
 +
 +CURLcode curl_easy_setopt(CURL *handle,
 +                          CURLOPT_RESOLVER_START_FUNCTION,
 +                          resolver_start_cb);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This callback function gets called by libcurl every time before a new resolve
 +request is started.
 +
 +\fIresolver_state\fP points to a backend-specific resolver state. Currently
 +only the ares resolver backend has a resolver state. It can be used to set up
 +any desired option on the ares channel before it's used, for example setting 
up
 +socket callback options.
 +
 +\fIreserved\fP is reserved.
 +
 +\fIuserdata\fP is the user pointer set with the
 +\fICURLOPT_RESOLVER_START_DATA(3)\fP option.
 +
 +The callback must return 0 on success. Returning a non-zero value will cause
 +the resolve to fail.
 +.SH DEFAULT
 +NULL (No callback)
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +static int resolver_start_cb(void *resolver_state, void *reserved,
 +                             void *userdata)
 +{
 +  (void)reserved;
 +  printf("Received resolver_state=%p userdata=%p\\n",
 +         resolver_state, userdata);
 +  return 0;
 +}
 +
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_RESOLVER_START_FUNCTION, resolver_start_cb);
 +  curl_easy_setopt(curl, CURLOPT_RESOLVER_START_DATA, curl);
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.59.0
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_RESOLVER_START_DATA "(3) "
diff --cc docs/libcurl/opts/GNURLOPT_RESUME_FROM.3
index 4e3d06f91,000000000..c070b39ca
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 1f38993f4,000000000..f47b64f26
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 2dd0a545a,000000000..99b926b4f
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_RTSP_REQUEST.3
index 5bd47a309,000000000..973683daf
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RTSP_REQUEST.3
+++ b/docs/libcurl/opts/GNURLOPT_RTSP_REQUEST.3
@@@ -1,111 -1,0 +1,111 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_REQUEST 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_RTSP_REQUEST \- specify RTSP request
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_REQUEST, long request);
 +.SH DESCRIPTION
 +Tell libcurl what kind of RTSP request to make. Pass one of the following RTSP
 +enum values as a long in the \fIrequest\fP argument. Unless noted otherwise,
 +commands require the Session ID to be initialized.
 +.IP CURL_RTSPREQ_OPTIONS
 +Used to retrieve the available methods of the server. The application is
 +responsible for parsing and obeying the response. The session ID is not needed
 +for this method.
 +.IP CURL_RTSPREQ_DESCRIBE
 +Used to get the low level description of a stream. The application should note
 +what formats it understands in the \fI'Accept:'\fP header. Unless set
 +manually, libcurl will automatically fill in \fI'Accept: application/sdp'\fP.
 +Time-condition headers will be added to Describe requests if the
 +\fICURLOPT_TIMECONDITION(3)\fP option is active. \fB(The session ID is not
 +needed for this method)\fP
 +.IP CURL_RTSPREQ_ANNOUNCE
 +When sent by a client, this method changes the description of the session. For
 +example, if a client is using the server to record a meeting, the client can
 +use Announce to inform the server of all the meta-information about the
 +session.  ANNOUNCE acts like an HTTP PUT or POST just like
 +\fICURL_RTSPREQ_SET_PARAMETER\fP
 +.IP CURL_RTSPREQ_SETUP
 +Setup is used to initialize the transport layer for the session. The
 +application must set the desired Transport options for a session by using the
 +\fICURLOPT_RTSP_TRANSPORT(3)\fP option prior to calling setup. If no session
 +ID is currently set with \fICURLOPT_RTSP_SESSION_ID(3)\fP, libcurl will
 +extract and use the session ID in the response to this request. The session ID
 +is not needed for this method.
 +.IP CURL_RTSPREQ_PLAY
 +Send a Play command to the server. Use the \fICURLOPT_RANGE(3)\fP option to
 +modify the playback time (e.g. 'npt=10-15').
 +.IP CURL_RTSPREQ_PAUSE
 +Send a Pause command to the server. Use the \fICURLOPT_RANGE(3)\fP option with
 +a single value to indicate when the stream should be halted. (e.g. npt='25')
 +.IP CURL_RTSPREQ_TEARDOWN
 +This command terminates an RTSP session. Simply closing a connection does not
 +terminate the RTSP session since it is valid to control an RTSP session over
 +different connections.
 +.IP CURL_RTSPREQ_GET_PARAMETER
 +Retrieve a parameter from the server. By default, libcurl will automatically
 +include a \fIContent-Type: text/parameters\fP header on all non-empty requests
 +unless a custom one is set. GET_PARAMETER acts just like an HTTP PUT or POST
 +(see \fICURL_RTSPREQ_SET_PARAMETER\fP).
 +Applications wishing to send a heartbeat message (e.g. in the presence of a
 +server-specified timeout) should send use an empty GET_PARAMETER request.
 +.IP CURL_RTSPREQ_SET_PARAMETER
 +Set a parameter on the server. By default, libcurl will automatically include
 +a \fIContent-Type: text/parameters\fP header unless a custom one is set. The
 +interaction with SET_PARAMETER is much like an HTTP PUT or POST. An 
application
 +may either use \fICURLOPT_UPLOAD(3)\fP with \fICURLOPT_READDATA(3)\fP like a
 +HTTP PUT, or it may use \fICURLOPT_POSTFIELDS(3)\fP like an HTTP POST. No
 +chunked transfers are allowed, so the application must set the
 +\fICURLOPT_INFILESIZE(3)\fP in the former and \fICURLOPT_POSTFIELDSIZE(3)\fP
 +in the latter. Also, there is no use of multi-part POSTs within RTSP.
 +.IP CURL_RTSPREQ_RECORD
 +Used to tell the server to record a session. Use the \fICURLOPT_RANGE(3)\fP
 +option to modify the record time.
 +.IP CURL_RTSPREQ_RECEIVE
 +This is a special request because it does not send any data to the server. The
 +application may call this function in order to receive interleaved RTP
 +data. It will return after processing one read buffer of data in order to give
 +the application a chance to run.
 +.SH DEFAULT
 +.SH PROTOCOLS
 +RTSP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
 +  /* ask for options! */
 +  curl_easy_setopt(curl, CURLOPT_RTSP_REQUEST, CURL_RTSPREQ_OPTIONS);
 +  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_SESSION_ID "(3), " CURLOPT_RTSP_STREAM_URI "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_RTSP_SERVER_CSEQ.3
index b881255f4,000000000..53a9b433e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RTSP_SERVER_CSEQ.3
+++ b/docs/libcurl/opts/GNURLOPT_RTSP_SERVER_CSEQ.3
@@@ -1,53 -1,0 +1,53 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SERVER_CSEQ 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_RTSP_SERVER_CSEQ \- set the RTSP server CSEQ number
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SERVER_CSEQ, long cseq);
 +.SH DESCRIPTION
 +Pass a long to set the CSEQ number to expect for the next RTSP Server->Client
 +request.  \fBNOTE\fP: this feature (listening for Server requests) is
 +unimplemented.
 +.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_SERVER_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_CLIENT_CSEQ "(3), " CURLOPT_RTSP_STREAM_URI "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_RTSP_SESSION_ID.3
index ee4805e05,000000000..1f5e2d596
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RTSP_SESSION_ID.3
+++ b/docs/libcurl/opts/GNURLOPT_RTSP_SESSION_ID.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SESSION_ID 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_RTSP_SESSION_ID \- set RTSP session ID
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_SESSION_ID, char *id);
 +.SH DESCRIPTION
 +Pass a char * as a parameter to set the value of the current RTSP Session ID
 +for the handle. Useful for resuming an in-progress session. Once this value is
 +set to any non-NULL value, libcurl will return \fICURLE_RTSP_SESSION_ERROR\fP
 +if ID received from the server does not match. If unset (or set to NULL),
 +libcurl will automatically set the ID the first time the server sets it in a
 +response.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +RTSP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  char *prev_id; /* saved from before somehow */
 +  curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_RTSP_SESSION_ID, prev_id);
 +  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, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_RTSP_REQUEST "(3), " CURLOPT_RTSP_STREAM_URI "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_RTSP_STREAM_URI.3
index 9d9a00478,000000000..d91d8d4fd
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RTSP_STREAM_URI.3
+++ b/docs/libcurl/opts/GNURLOPT_RTSP_STREAM_URI.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_STREAM_URI 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_RTSP_STREAM_URI \- set RTSP stream URI
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_STREAM_URI, char *URI);
 +.SH DESCRIPTION
 +Set the stream \fIURI\fP to operate on by passing a char * . For example, a
 +single session may be controlling \fIrtsp://foo/twister/audio\fP and
 +\fIrtsp://foo/twister/video\fP and the application can switch to the
 +appropriate stream using this option. If unset, libcurl will default to
 +operating on generic server options by passing '*' in the place of the RTSP
 +Stream URI. This option is distinct from \fICURLOPT_URL(3)\fP. When working
 +with RTSP, the \fICURLOPT_RTSP_STREAM_URI(3)\fP indicates what URL to send to
 +the server in the request header while the \fICURLOPT_URL(3)\fP indicates
 +where to make the connection to.  (e.g. the \fICURLOPT_URL(3)\fP for the above
 +examples might be set to \fIrtsp://foo/twister\fP
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +\&'*'
 +.SH PROTOCOLS
 +RTSP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  char *prev_id; /* saved from before somehow */
 +  curl_easy_setopt(curl, CURLOPT_URL, "rtsp://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_RTSP_STREAM_URI,
 +                   "rtsp://foo.example.com/twister/video");
 +  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, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_RTSP_REQUEST "(3), " CURLOPT_RTSP_TRANSPORT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_RTSP_TRANSPORT.3
index d3efe6621,000000000..adef96a2c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_RTSP_TRANSPORT.3
+++ b/docs/libcurl/opts/GNURLOPT_RTSP_TRANSPORT.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TRANSPORT 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_RTSP_TRANSPORT \- set RTSP Transport: header
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_RTSP_TRANSPORT,
 +                          char *transport);
 +.SH DESCRIPTION
 +Pass a char * to tell libcurl what to pass for the Transport: header for this
 +RTSP session. This is mainly a convenience method to avoid needing to set a
 +custom Transport: header for every SETUP request. The application must set a
 +Transport: header before issuing a SETUP request.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.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_REQUEST, CURL_RTSPREQ_SETUP);
 +  curl_easy_setopt(curl, CURLOPT_RTSP_TRANSPORT,
 +                   "RTP/AVP;unicast;client_port=4588-4589");
 +  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, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_RTSP_REQUEST "(3), " CURLOPT_RTSP_SESSION_ID "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SASL_AUTHZID.3
index 86aa7901f,000000000..38422c636
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SASL_AUTHZID.3
+++ b/docs/libcurl/opts/GNURLOPT_SASL_AUTHZID.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SASL_AUTHZID 3 "11 Sep 2019" "libcurl 7.66.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SASL_AUTHZID \- authorisation identity (identity to act as)
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SASL_AUTHZID, char *authzid);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should be pointing to the null-terminated
 +authorisation identity (authzid) for the transfer. Only applicable to the 
PLAIN
 +SASL authentication mechanism where it is optional.
 +
 +When not specified only the authentication identity (authcid) as specified by
 +the username will be sent to the server, along with the password. The server
 +will derive a authzid from the authcid when not provided, which it will then
 +uses internally.
 +
 +When the authzid is specified, the use of which is server dependent, it can be
 +used to access another user's inbox, that the user has been granted access to,
 +or a shared mailbox for example.
 +.SH DEFAULT
 +blank
 +.SH PROTOCOLS
 +IMAP, POP3 and SMTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "imap://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_USERNAME, "Kurt");
 +  curl_easy_setopt(curl, CURLOPT_PASSWORD, "xipj3plmq");
 +  curl_easy_setopt(curl, CURLOPT_SASL_AUTHZID, "Ursel");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 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_USERNAME "(3), " CURLOPT_PASSWORD "(3), ".BR CURLOPT_USERPWD "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_SASL_IR.3
index 51649d589,000000000..352e7d01c
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SASL_IR.3
+++ b/docs/libcurl/opts/GNURLOPT_SASL_IR.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SASL_IR 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SASL_IR \- enable sending initial response in first packet
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SASL_IR, long enable);
 +.SH DESCRIPTION
 +Pass a long. If the value is 1, curl will send the initial response to the
 +server in the first authentication packet in order to reduce the number of
 +ping pong requests. Only applicable to the following supporting SASL
 +authentication mechanisms:
 +
 +* Login
 +* Plain
 +* GSSAPI
 +* NTLM
 +* OAuth 2.0
 +
 +Note: Whilst IMAP supports this option there is no need to explicitly set it,
 +as libcurl can determine the feature itself when the server supports the
 +SASL-IR CAPABILITY.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +IMAP, POP3 and SMTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "smtp://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_SASL_IR, 1L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.31.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_MAIL_AUTH "(3), " CURLOPT_MAIL_FROM "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SEEKDATA.3
index eb73a1a01,000000000..2f0bbe4d2
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SEEKDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_SEEKDATA.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SEEKDATA 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SEEKDATA \- custom pointer passed to the seek callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SEEKDATA, void *pointer);
 +.SH DESCRIPTION
 +Data \fIpointer\fP to pass to the seek callback function. If you use the
 +\fICURLOPT_SEEKFUNCTION(3)\fP option, this is the pointer you'll get as
 +input.
 +.SH DEFAULT
 +If you don't set this, NULL is passed to the callback.
 +.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(d->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
 +.SH "SEE ALSO"
 +.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SEEKFUNCTION.3
index 3d4ad7403,000000000..83fa47b95
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SERVICE_NAME.3
index eaed26490,000000000..979310e58
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SERVICE_NAME.3
+++ b/docs/libcurl/opts/GNURLOPT_SERVICE_NAME.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SERVICE_NAME 3 "17 Jun 2015" "libcurl 7.43.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SERVICE_NAME \- authentication service name
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SERVICE_NAME, char *name);
 +.SH DESCRIPTION
 +Pass a char * as parameter to a string holding the \fIname\fP of the service
 +for DIGEST-MD5, SPNEGO and Kerberos 5 authentication mechanisms. The default
 +service names are "ftp", "HTTP", "imap", "pop" and "smtp". This option allows
 +you to change them.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +See above
 +.SH PROTOCOLS
 +HTTP, FTP, IMAP, POP and SMTP
 +.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_SERVICE_NAME, "custom");
 +  ret = curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.43.0 for HTTP, 7.49.0 for FTP, IMAP, POP3 and SMTP.
 +.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 "(3), " CURLOPT_PROXYTYPE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SHARE.3
index f9f32c823,000000000..90398ed42
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SHARE.3
+++ b/docs/libcurl/opts/GNURLOPT_SHARE.3
@@@ -1,81 -1,0 +1,81 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SHARE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SHARE \- specify share handle to use
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SHARE, CURLSH *share);
 +.SH DESCRIPTION
 +Pass a \fIshare\fP handle as a parameter. The share handle must have been
 +created by a previous call to \fIcurl_share_init(3)\fP. Setting this option,
 +will make this curl handle use the data from the shared handle instead of
 +keeping the data to itself. This enables several curl handles to share
 +data. If the curl handles are used simultaneously in multiple threads, you
 +\fBMUST\fP use the locking methods in the share handle. See
 +\fIcurl_share_setopt(3)\fP for details.
 +
 +If you add a share that is set to share cookies, your easy handle will use
 +that cookie cache and get the cookie engine enabled. If you unshare an object
 +that was using cookies (or change to another object that doesn't share
 +cookies), the easy handle will get its cookie engine disabled.
 +
 +Data that the share object is not set to share will be dealt with the usual
 +way, as if no share was used.
 +
 +Set this option to NULL again to stop using that share object.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +CURL *curl2 = curl_easy_init(); /* a second handle */
 +if(curl) {
 +  CURLSH *shobject = curl_share_init();
 +  curl_share_setopt(shobject, CURLSHOPT_SHARE, CURL_LOCK_DATA_COOKIE);
 +
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_COOKIEFILE, "");
 +  curl_easy_setopt(curl, CURLOPT_SHARE, shobject);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +
 +  /* the second handle shares cookies from the first */
 +  curl_easy_setopt(curl2, CURLOPT_URL, "https://example.com/second";);
 +  curl_easy_setopt(curl2, CURLOPT_COOKIEFILE, "");
 +  curl_easy_setopt(curl2, CURLOPT_SHARE, shobject);
 +  ret = curl_easy_perform(curl2);
 +  curl_easy_cleanup(curl2);
 +
 +  curl_share_cleanup(shobject);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_COOKIE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SOCKOPTDATA.3
index 8ccadd55f,000000000..39419f91a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SOCKOPTDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_SOCKOPTDATA.3
@@@ -1,67 -1,0 +1,67 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SOCKOPTDATA 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SOCKOPTDATA \- custom pointer to pass to sockopt callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKOPTDATA, void *pointer);
 +.SH DESCRIPTION
 +Pass a \fIpointer\fP that will be untouched by libcurl and passed as the first
 +argument in the sockopt callback set with \fICURLOPT_SOCKOPTFUNCTION(3)\fP.
 +.SH DEFAULT
 +The default value of this parameter is NULL.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +static int sockopt_callback(void *clientp, curl_socket_t curlfd,
 +                            curlsocktype purpose)
 +{
 +  int val = *(int *)clientp;
 +  setsockopt(curldfd, SOL_SOCKET, SO_RCVBUF, (const char *)&val, sizeof(val));
 +  return CURL_SOCKOPT_OK;
 +}
 +
 +curl = curl_easy_init();
 +if(curl) {
 +  int recvbuffersize = 256 * 1024;
 +
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +
 +  /* call this function to set options for the socket */
 +  curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
 +  curl_easy_setopt(curl, CURLOPT_SOCKOPTDATA, &recvbuffersize);
 +
 +  res = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.0
 +.SH RETURN VALUE
 +Returns \fICURLE_OK\fP if the option is supported, and 
\fICURLE_UNKNOWN_OPTION\fP if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SOCKOPTFUNCTION "(3), " CURLOPT_OPENSOCKETFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SOCKOPTFUNCTION.3
index be9f84285,000000000..7553690e3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SOCKOPTFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_SOCKOPTFUNCTION.3
@@@ -1,124 -1,0 +1,124 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SOCKOPTFUNCTION 3 "16 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SOCKOPTFUNCTION \- set callback for setting socket options
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +typedef enum  {
 +  CURLSOCKTYPE_IPCXN,  /* socket created for a specific IP connection */
 +  CURLSOCKTYPE_ACCEPT, /* socket created by accept() call */
 +  CURLSOCKTYPE_LAST    /* never use */
 +} curlsocktype;
 +
 +#define CURL_SOCKOPT_OK 0
 +#define CURL_SOCKOPT_ERROR 1 /* causes libcurl to abort and return
 +                                CURLE_ABORTED_BY_CALLBACK */
 +#define CURL_SOCKOPT_ALREADY_CONNECTED 2
 +
 +int sockopt_callback(void *clientp,
 +                     curl_socket_t curlfd,
 +                     curlsocktype purpose);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKOPTFUNCTION, 
sockopt_callback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +When set, this callback function gets called by libcurl when the socket has
 +been created, but before the connect call to allow applications to change
 +specific socket options. The callback's \fIpurpose\fP argument identifies the
 +exact purpose for this particular socket:
 +
 +\fICURLSOCKTYPE_IPCXN\fP for actively created connections or since 7.28.0
 +\fICURLSOCKTYPE_ACCEPT\fP for FTP when the connection was setup with PORT/EPSV
 +(in earlier versions these sockets weren't passed to this callback).
 +
 +Future versions of libcurl may support more purposes. libcurl passes the newly
 +created socket descriptor to the callback in the \fIcurlfd\fP parameter so
 +additional setsockopt() calls can be done at the user's discretion.
 +
 +The \fIclientp\fP pointer contains whatever user-defined value set using the
 +\fICURLOPT_SOCKOPTDATA(3)\fP function.
 +
 +Return \fICURL_SOCKOPT_OK\fP from the callback on success. Return
 +\fICURL_SOCKOPT_ERROR\fP from the callback function to signal an unrecoverable
 +error to the library and it will close the socket and return
 +\fICURLE_COULDNT_CONNECT\fP.
 +Alternatively, the callback function can return
 +\fICURL_SOCKOPT_ALREADY_CONNECTED\fP, to tell libcurl that the socket is
 +already connected and then libcurl will not attempt to connect it. This allows
 +an application to pass in an already connected socket with
 +\fICURLOPT_OPENSOCKETFUNCTION(3)\fP and then have this function make libcurl
 +not attempt to connect (again).
 +.SH DEFAULT
 +By default, this callback is NULL and unused.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +/* make libcurl use the already established socket 'sockfd' */
 +
 +static curl_socket_t opensocket(void *clientp,
 +                                curlsocktype purpose,
 +                                struct curl_sockaddr *address)
 +{
 +  curl_socket_t sockfd;
 +  sockfd = *(curl_socket_t *)clientp;
 +  /* the actual externally set socket is passed in via the OPENSOCKETDATA
 +     option */
 +  return sockfd;
 +}
 +
 +static int sockopt_callback(void *clientp, curl_socket_t curlfd,
 +                            curlsocktype purpose)
 +{
 +  /* This return code was added in libcurl 7.21.5 */
 +  return CURL_SOCKOPT_ALREADY_CONNECTED;
 +}
 +
 +curl = curl_easy_init();
 +if(curl) {
 +  /* libcurl will internally think that you connect to the host
 +   * and port that you specify in the URL option. */
 +  curl_easy_setopt(curl, CURLOPT_URL, "http://99.99.99.99:9999";);
 +  /* call this function to get a socket */
 +  curl_easy_setopt(curl, CURLOPT_OPENSOCKETFUNCTION, opensocket);
 +  curl_easy_setopt(curl, CURLOPT_OPENSOCKETDATA, &sockfd);
 +
 +  /* call this function to set options for the socket */
 +  curl_easy_setopt(curl, CURLOPT_SOCKOPTFUNCTION, sockopt_callback);
 +
 +  res = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.0. The \fICURL_SOCKOPT_ALREADY_CONNECTED\fP return code was
 +added in 7.21.5.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SOCKOPTDATA "(3), " CURLOPT_OPENSOCKETFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SOCKS5_AUTH.3
index 9c9fb158f,000000000..23719f11d
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SOCKS5_AUTH.3
+++ b/docs/libcurl/opts/GNURLOPT_SOCKS5_AUTH.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SOCKS5_AUTH 3 "27 April 2017" "libcurl 7.55.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SOCKS5_AUTH \- set allowed methods for SOCKS5 proxy authentication
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_AUTH, long bitmask);
 +.SH DESCRIPTION
 +Pass a long as parameter, which is set to a bitmask, to tell libcurl which
 +authentication method(s) are allowed for SOCKS5 proxy authentication.  The 
only
 +supported flags are \fICURLAUTH_BASIC\fP, which allows username/password
 +authentication, \fICURLAUTH_GSSAPI\fP, which allows GSS-API authentication, 
and
 +\fICURLAUTH_NONE\fP, which allows no authentication.  Set the actual user name
 +and password with the \fICURLOPT_PROXYUSERPWD(3)\fP option.
 +.SH DEFAULT
 +CURLAUTH_BASIC|CURLAUTH_GSSAPI
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* request to use a SOCKS5 proxy */
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "socks5://user:pass@myproxy.com");
 +
 +  /* enable username/password authentication only */
 +  curl_easy_setopt(curl, CURLOPT_SOCKS5_AUTH, CURLAUTH_BASIC);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.55.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_NOT_BUILT_IN if the bitmask contains unsupported flags.
 +.SH "SEE ALSO"
 +.BR CURLOPT_PROXY "(3), " CURLOPT_PROXYTYPE "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_SOCKS5_GSSAPI_NEC.3
index b752977cb,000000000..1e5d9107f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SOCKS5_GSSAPI_NEC.3
+++ b/docs/libcurl/opts/GNURLOPT_SOCKS5_GSSAPI_NEC.3
@@@ -1,56 -1,0 +1,56 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2014, 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SOCKS5_GSSAPI_NEC 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SOCKS5_GSSAPI_NEC \- set socks proxy gssapi negotiation protection
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_NEC, long nec);
 +.SH DESCRIPTION
 +Pass a long set to 1 to enable or 0 to disable. As part of the gssapi
 +negotiation a protection mode is negotiated. The RFC1961 says in section
 +4.3/4.4 it should be protected, but the NEC reference implementation does not.
 +If enabled, this option allows the unprotected exchange of the protection mode
 +negotiation.
 +.SH DEFAULT
 +?
 +.SH PROTOCOLS
 +Most
 +.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, "socks5://proxy");
 +  curl_easy_setopt(curl, CURLOPT_SOCKS5_GSSAPI_NEC, 1L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(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_SOCKS5_GSSAPI_SERVICE "(3), " CURLOPT_PROXY "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SOCKS5_GSSAPI_SERVICE.3
index ae16eedbd,000000000..68a05fa01
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SOCKS5_GSSAPI_SERVICE.3
+++ b/docs/libcurl/opts/GNURLOPT_SOCKS5_GSSAPI_SERVICE.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SOCKS5_GSSAPI_SERVICE 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SOCKS5_GSSAPI_SERVICE \- SOCKS5 proxy authentication service name
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SOCKS5_GSSAPI_SERVICE, char 
*name);
 +.SH DESCRIPTION
 +Deprecated since 7.49.0. Use \fICURLOPT_PROXY_SERVICE_NAME(3)\fP instead.
 +
 +Pass a char * as parameter to a string holding the \fIname\fP of the service.
 +The default service name for a SOCKS5 server is "rcmd". This option allows you
 +to change it.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +See above
 +.SH PROTOCOLS
 +All network protocols
 +.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, "socks5://proxy");
 +  curl_easy_setopt(curl, CURLOPT_SOCKS5_GSSAPI_SERVICE, "rcmd-special");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.4, deprecated in 7.49.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 "(3), " CURLOPT_PROXYTYPE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSH_AUTH_TYPES.3
index db943444e,000000000..22f3f0253
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSH_AUTH_TYPES.3
+++ b/docs/libcurl/opts/GNURLOPT_SSH_AUTH_TYPES.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSH_AUTH_TYPES 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSH_AUTH_TYPES \- set desired auth types for SFTP and SCP
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_AUTH_TYPES, long bitmask);
 +.SH DESCRIPTION
 +Pass a long set to a bitmask consisting of one or more of
 +CURLSSH_AUTH_PUBLICKEY, CURLSSH_AUTH_PASSWORD, CURLSSH_AUTH_HOST,
 +CURLSSH_AUTH_KEYBOARD and CURLSSH_AUTH_AGENT.
 +
 +Set \fICURLSSH_AUTH_ANY\fP to let libcurl pick a suitable one. Currently
 +CURLSSH_AUTH_HOST has no effect. If CURLSSH_AUTH_AGENT is used, libcurl
 +attempts to connect to ssh-agent or pageant and let the agent attempt the
 +authentication.
 +.SH DEFAULT
 +None
 +.SH PROTOCOLS
 +SFTP and SCP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file";);
 +  curl_easy_setopt(curl, CURLOPT_SSH_AUTH_TYPES,
 +                   CURLSSH_AUTH_PUBLICKEY | CURLSSH_AUTH_KEYBOARD);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +CURLSSH_AUTH_HOST was added in 7.16.1, CURLSSH_AUTH_AGENT was added in 7.28.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 "(3), " CURLOPT_SSH_PUBLIC_KEYFILE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSH_COMPRESSION.3
index 92a80a3fd,000000000..e1d27bd69
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSH_COMPRESSION.3
+++ b/docs/libcurl/opts/GNURLOPT_SSH_COMPRESSION.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSH_COMPRESSION 3 "05 Aug 2017" "libcurl 7.56.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSH_COMPRESSION \- enables compression / decompression of SSH traffic
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_COMPRESSION, long enable);
 +.SH DESCRIPTION
 +Pass a long as parameter set to 1L to enable or 0L to disable.
 +
 +Enables built-in SSH compression.  This is a request, not an order; the server
 +may or may not do it.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +All SSH based protocols: SCP, SFTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com";);
 +
 +  /* enable built-in compression */
 +  curl_easy_setopt(curl, CURLOPT_SSH_COMPRESSION, 1L);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.56.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_ACCEPT_ENCODING "(3), " CURLOPT_TRANSFER_ENCODING "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
index 91716423f,000000000..891752984
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
+++ b/docs/libcurl/opts/GNURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSH_HOST_PUBLIC_KEY_MD5 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 \- checksum of SSH server public key
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,
 +                          char *md5);
 +.SH DESCRIPTION
 +Pass a char * pointing to a string containing 32 hexadecimal digits. The
 +string should be the 128 bit MD5 checksum of the remote host's public key, and
 +libcurl will reject the connection to the host unless the md5sums match.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +SCP and SFTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file";);
 +  curl_easy_setopt(curl, CURLOPT_SSH_HOST_PUBLIC_KEY_MD5,
 +                   "afe17cd62a0f3b61f1ab9cb22ba269a7");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(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_SSH_PUBLIC_KEYFILE "(3), " CURLOPT_SSH_AUTH_TYPES "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSH_KEYDATA.3
index 1037947e8,000000000..b088cf462
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSH_KEYDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_SSH_KEYDATA.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSH_KEYDATA 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSH_KEYDATA \- pointer to pass to the SSH key callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYDATA, void *pointer);
 +.SH DESCRIPTION
 +Pass a void * as parameter. This \fIpointer\fP will be passed along verbatim
 +to the callback set with \fICURLOPT_SSH_KEYFUNCTION(3)\fP.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +SFTP and SCP
 +.SH EXAMPLE
 +.nf
 +static int keycb(CURL *easy,
 +                 const struct curl_khkey *knownkey,
 +                 const struct curl_khkey *foundkey,
 +                 enum curl_khmatch,
 +                 void *clientp)
 +{
 +  /* 'clientp' points to the callback_data struct */
 +  /* investigate the situation and return the correct value */
 +  return CURLKHSTAT_FINE_ADD_TO_FILE;
 +}
 +{
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/thisfile.txt";);
 +  curl_easy_setopt(curl, CURLOPT_SSH_KEYFUNCTION, keycb);
 +  curl_easy_setopt(curl, CURLOPT_SSH_KEYDATA, &callback_data);
 +  curl_easy_setopt(curl, CURLOPT_SSH_KNOWNHOSTS, "/home/user/known_hosts");
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.6
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSH_KEYDATA "(3), " CURLOPT_SSH_KNOWNHOSTS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSH_KEYFUNCTION.3
index 76119c34a,000000000..144f61c1f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSH_KEYFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_SSH_KEYFUNCTION.3
@@@ -1,124 -1,0 +1,131 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
- .\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
++.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSH_KEYFUNCTION 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSH_KEYFUNCTION \- callback for known host matching logic
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +enum curl_khstat {
 +  CURLKHSTAT_FINE_ADD_TO_FILE,
 +  CURLKHSTAT_FINE,
 +  CURLKHSTAT_REJECT, /* reject the connection, return an error */
 +  CURLKHSTAT_DEFER,  /* do not accept it, but we can't answer right
 +                        now so this causes a CURLE_DEFER error but
 +                        otherwise the connection will be left intact
 +                        etc */
++  CURLKHSTAT_FINE_REPLACE
 +};
 +
 +enum curl_khmatch {
 +  CURLKHMATCH_OK,       /* match */
 +  CURLKHMATCH_MISMATCH, /* host found, key mismatch! */
 +  CURLKHMATCH_MISSING,  /* no matching host/key found */
 +};
 +
 +struct curl_khkey {
 +  const char *key; /* points to a null-terminated string encoded with
 +                      base64 if len is zero, otherwise to the "raw"
 +                      data */
 +  size_t len;
 +  enum curl_khtype keytype;
 +};
 +
 +int ssh_keycallback(CURL *easy,
 +                    const struct curl_khkey *knownkey,
 +                    const struct curl_khkey *foundkey,
 +                    enum curl_khmatch,
 +                    void *clientp);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KEYFUNCTION,
 +                          ssh_keycallback);
 +.SH DESCRIPTION
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +It gets called when the known_host matching has been done, to allow the
 +application to act and decide for libcurl how to proceed. The callback will
 +only be called if \fICURLOPT_SSH_KNOWNHOSTS(3)\fP is also set.
 +
 +This callback function gets passed the CURL handle, the key from the
 +known_hosts file \fIknownkey\fP, the key from the remote site \fIfoundkey\fP,
 +info from libcurl on the matching status and a custom pointer (set with
 +\fICURLOPT_SSH_KEYDATA(3)\fP). It MUST return one of the following return
 +codes to tell libcurl how to act:
- 
++.IP CURLKHSTAT_FINE_REPLACE
++The new host+key is accepted and libcurl will replace the old host+key into
++the known_hosts file before continuing with the connection.  This will also
++add the new host+key combo to the known_host pool kept in memory if it wasn't
++already present there. The adding of data to the file is done by completely
++replacing the file with a new copy, so the permissions of the file must allow
++this. (Added in 7.73.0)
 +.IP CURLKHSTAT_FINE_ADD_TO_FILE
 +The host+key is accepted and libcurl will append it to the known_hosts file
 +before continuing with the connection. This will also add the host+key combo
 +to the known_host pool kept in memory if it wasn't already present there. The
 +adding of data to the file is done by completely replacing the file with a new
 +copy, so the permissions of the file must allow this.
 +.IP CURLKHSTAT_FINE
 +The host+key is accepted libcurl will continue with the connection. This will
 +also add the host+key combo to the known_host pool kept in memory if it wasn't
 +already present there.
 +.IP CURLKHSTAT_REJECT
 +The host+key is rejected. libcurl will deny the connection to continue and it
 +will be closed.
 +.IP CURLKHSTAT_DEFER
 +The host+key is rejected, but the SSH connection is asked to be kept alive.
 +This feature could be used when the app wants to somehow return back and act
 +on the host+key situation and then retry without needing the overhead of
 +setting it up from scratch again.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +SFTP and SCP
 +.SH EXAMPLE
 +.nf
 +static int keycb(CURL *easy,
 +                 const struct curl_khkey *knownkey,
 +                 const struct curl_khkey *foundkey,
 +                 enum curl_khmatch,
 +                 void *clientp)
 +{
 +  /* 'clientp' points to the callback_data struct */
 +  /* investigate the situation and return the correct value */
 +  return CURLKHSTAT_FINE_ADD_TO_FILE;
 +}
 +{
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/thisfile.txt";);
 +  curl_easy_setopt(curl, CURLOPT_SSH_KEYFUNCTION, keycb);
 +  curl_easy_setopt(curl, CURLOPT_SSH_KEYDATA, &callback_data);
 +  curl_easy_setopt(curl, CURLOPT_SSH_KNOWNHOSTS, "/home/user/known_hosts");
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.6
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSH_KEYDATA "(3), " CURLOPT_SSH_KNOWNHOSTS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSH_KNOWNHOSTS.3
index 86be0617c,000000000..f78f8630b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSH_KNOWNHOSTS.3
+++ b/docs/libcurl/opts/GNURLOPT_SSH_KNOWNHOSTS.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSH_KNOWNHOSTS 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSH_KNOWNHOSTS \- file name holding the SSH known hosts
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_KNOWNHOSTS, char *fname);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string holding the file name of the
 +known_host file to use.  The known_hosts file should use the OpenSSH file
 +format as supported by libssh2. If this file is specified, libcurl will only
 +accept connections with hosts that are known and present in that file, with a
 +matching public key. Use \fICURLOPT_SSH_KEYFUNCTION(3)\fP to alter the default
 +behavior on host and key (mis)matching.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +SFTP and SCP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file";);
 +  curl_easy_setopt(curl, CURLOPT_SSH_KNOWNHOSTS,
 +                   "/home/clarkkent/.ssh/known_hosts");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.19.6
 +.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_SSH_AUTH_TYPES "(3), " CURLOPT_SSH_HOST_PUBLIC_KEY_MD5 "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSH_PRIVATE_KEYFILE.3
index 079519598,000000000..f9d9c66e2
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSH_PRIVATE_KEYFILE.3
+++ b/docs/libcurl/opts/GNURLOPT_SSH_PRIVATE_KEYFILE.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2014, 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSH_PRIVATE_KEYFILE 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSH_PRIVATE_KEYFILE \- set private key file for SSH auth
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_PRIVATE_KEYFILE,
 +                          char *filename);
 +.SH DESCRIPTION
 +Pass a char * pointing to a \fIfilename\fP for your private key. If not used,
 +libcurl defaults to \fB$HOME/.ssh/id_dsa\fP if the HOME environment variable
 +is set, and just "id_dsa" in the current directory if HOME is not set.
 +
 +If the file is password-protected, set the password with
 +\fICURLOPT_KEYPASSWD(3)\fP.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +As explained above
 +.SH PROTOCOLS
 +SFTP and SCP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file";);
 +  curl_easy_setopt(curl, CURLOPT_SSH_PRIVATE_KEYFILE,
 +                   "/home/clarkkent/.ssh/id_rsa");
 +  curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "password");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.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_SSH_PUBLIC_KEYFILE "(3), " CURLOPT_SSH_AUTH_TYPES "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSH_PUBLIC_KEYFILE.3
index 38cae0ca8,000000000..fe0ecda60
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSH_PUBLIC_KEYFILE.3
+++ b/docs/libcurl/opts/GNURLOPT_SSH_PUBLIC_KEYFILE.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSH_PUBLIC_KEYFILE 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSH_PUBLIC_KEYFILE \- set public key file for SSH auth
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSH_PUBLIC_KEYFILE,
 +                          char *filename);
 +.SH DESCRIPTION
 +Pass a char * pointing to a \fIfilename\fP for your public key. If not used,
 +libcurl defaults to \fB$HOME/.ssh/id_dsa.pub\fP if the HOME environment
 +variable is set, and just "id_dsa.pub" in the current directory if HOME is not
 +set.
 +
 +If NULL (or an empty string) is passed, libcurl will pass no public key to
 +libssh2, which then tries to compute it from the private key.  This is known
 +to work with libssh2 1.4.0+ linked against OpenSSL.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +SFTP and SCP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/file";);
 +  curl_easy_setopt(curl, CURLOPT_SSH_PUBLIC_KEYFILE,
 +                   "/home/clarkkent/.ssh/id_rsa.pub");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +The "" trick was added in 7.26.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_SSH_PRIVATE_KEYFILE "(3), " CURLOPT_SSH_AUTH_TYPES "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSLCERT.3
index ce462280c,000000000..68f48e6a6
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSLCERT.3
+++ b/docs/libcurl/opts/GNURLOPT_SSLCERT.3
@@@ -1,80 -1,0 +1,80 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLCERT 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSLCERT \- set SSL client certificate
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERT, char *cert);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. The string should be
 +the file name of your client certificate. The default format is "P12" on
 +Secure Transport and "PEM" on other engines, and can be changed with
 +\fICURLOPT_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.
 +
 +(Schannel only) Client certificates can be specified by a path expression to
 +a certificate store. (You can import PFX to a store first). You can use
 +"<store location>\\<store name>\\<thumbprint>" to refer to a certificate
 +in the system certificates store, for example,
 +"CurrentUser\\MY\\934a7ac6f8a5d579285a74fa61e19f23ddfe8d7a". Thumbprint is
 +usually a SHA-1 hex string which you can see in certificate details. Following
 +store locations are supported: CurrentUser, LocalMachine, CurrentService,
 +Services, CurrentUserGroupPolicy, LocalMachineGroupPolicy,
 +LocalMachineEnterprise.
 +Schannel also support P12 certificate file, with the string "P12" specified
 +with \fICURLOPT_SSLCERTTYPE(3)\fP.
 +
 +When using a client certificate, you most likely also need to provide a
 +private key with \fICURLOPT_SSLKEY(3)\fP.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
 +  curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
 +  curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +If built TLS enabled.
 +.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_SSLCERTTYPE "(3), " CURLOPT_SSLKEY "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSLCERTTYPE.3
index 3947324fa,000000000..79ff167e3
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSLCERTTYPE.3
+++ b/docs/libcurl/opts/GNURLOPT_SSLCERTTYPE.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2015, 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLCERTTYPE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSLCERTTYPE \- specify type of the client SSL certificate
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERTTYPE, char *type);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. The string should be
 +the format of your certificate. 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 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_SSLCERT, "client.pem");
 +  curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
 +  curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
 +  curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +If built TLS enabled. Added in 7.9.3
 +.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_SSLCERT "(3), " CURLOPT_SSLKEY "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSLCERT_BLOB.3
index da278224f,000000000..c0ec71ec1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSLCERT_BLOB.3
+++ b/docs/libcurl/opts/GNURLOPT_SSLCERT_BLOB.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLCERT_BLOB 3 "24 Jun 2020" "libcurl 7.71.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSLCERT_BLOB \- SSL client certificate from memory blob
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLCERT_BLOB, struct 
curl_blob *stblob);
 +.SH DESCRIPTION
 +Pass a pointer to a curl_blob structure, which contains (pointer and size) a
 +client certificate. The format must be "P12" on Secure Transport or
 +Schannel. The format must be "P12" or "PEM" on OpenSSL. The string "P12" or
 +"PEM" must be specified with \fICURLOPT_SSLCERTTYPE(3)\fP.
 +
 +If the blob is initialized with the flags member of struct curl_blob set to
 +CURL_BLOB_COPY, the application does not have to keep the buffer around after
 +setting this.
 +
 +This option is an alternative to \fICURLOPT_SSLCERT(3)\fP which instead
 +expects a file name as input.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct curl_blob stblob;
 +  stblob.data = certificateData;
 +  stblob.len = filesize;
 +  stblob.flags = CURL_BLOB_COPY;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_SSLCERT_BLOB, &stblob);
 +  curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "P12");
 +  curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in libcurl 7.71.0. This option is supported by the OpenSSL, Secure
 +Transport and Schannel backends.
 +.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_SSLCERTTYPE "(3), " CURLOPT_SSLKEY "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSLENGINE.3
index ba3e3007c,000000000..825129d5e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSLENGINE.3
+++ b/docs/libcurl/opts/GNURLOPT_SSLENGINE.3
@@@ -1,66 -1,0 +1,66 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLENGINE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSLENGINE \- set SSL engine identifier
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE, char *id);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. It will be used as
 +the identifier for the crypto engine you want to use for your private key.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_SSLENGINE, "dynamic");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Only if the SSL backend is OpenSSL built with engine support.
 +.SH RETURN VALUE
 +CURLE_OK - Engine found.
 +
 +CURLE_SSL_ENGINE_NOTFOUND - Engine not found, or OpenSSL was not built with
 +engine support.
 +
 +CURLE_SSL_ENGINE_INITFAILED - Engine found but initialization failed.
 +
 +CURLE_NOT_BUILT_IN - Option not built in, OpenSSL is not the SSL backend.
 +
 +CURLE_UNKNOWN_OPTION - Option not recognized.
 +
 +CURLE_OUT_OF_MEMORY - Insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSLENGINE_DEFAULT "(3), " CURLOPT_SSLKEY "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSLENGINE_DEFAULT.3
index f45ad371d,000000000..45a4c82ce
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSLENGINE_DEFAULT.3
+++ b/docs/libcurl/opts/GNURLOPT_SSLENGINE_DEFAULT.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLENGINE_DEFAULT 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSLENGINE_DEFAULT \- make SSL engine default
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLENGINE_DEFAULT, long val);
 +.SH DESCRIPTION
 +Pass a long set to 1 to make the already specified crypto engine the default
 +for (asymmetric) crypto operations.
 +
 +This option has no effect unless set after \fICURLOPT_SSLENGINE(3)\fP.
 +.SH DEFAULT
 +None
 +.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_SSLENGINE, "dynamic");
 +  curl_easy_setopt(curl, CURLOPT_SSLENGINE_DEFAULT, 1L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Only if the SSL backend is OpenSSL built with engine support.
 +.SH RETURN VALUE
 +CURLE_OK - Engine set as default.
 +
 +CURLE_SSL_ENGINE_SETFAILED - Engine could not be set as default.
 +
 +CURLE_NOT_BUILT_IN - Option not built in, OpenSSL is not the SSL backend.
 +
 +CURLE_UNKNOWN_OPTION - Option not recognized.
 +
 +CURLE_OUT_OF_MEMORY - Insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSLENGINE "(3), " CURLOPT_SSLCERT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSLKEY.3
index cc54f6b83,000000000..ac2c75560
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSLKEY.3
+++ b/docs/libcurl/opts/GNURLOPT_SSLKEY.3
@@@ -1,63 -1,0 +1,63 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLKEY 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSLKEY \- specify private keyfile for TLS and SSL client cert
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEY, char *keyfile);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. The string should be
 +the file name of your private key. The default format is "PEM" and can be
 +changed with \fICURLOPT_SSLKEYTYPE(3)\fP.
 +
 +(iOS and Mac OS X only) This option is ignored if curl was built against
 +Secure Transport. Secure Transport expects the private key to be already
 +present in the keychain or PKCS#12 file containing the certificate.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  curl_easy_setopt(curl, CURLOPT_SSLCERT, "client.pem");
 +  curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
 +  curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
 +  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_SSLKEYTYPE "(3), " CURLOPT_SSLCERT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSLKEYTYPE.3
index 1ec2db1a1,000000000..1db4d314e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSLKEYTYPE.3
+++ b/docs/libcurl/opts/GNURLOPT_SSLKEYTYPE.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLKEYTYPE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSLKEYTYPE \- set type of the private key file
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEYTYPE, char *type);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. The string should be
 +the format of your private key. Supported formats are "PEM", "DER" and "ENG".
 +
 +The format "ENG" enables you to load the private key from a crypto engine. In
 +this case \fICURLOPT_SSLKEY(3)\fP is used as an identifier passed to the
 +engine. You have to set the crypto engine with \fICURLOPT_SSLENGINE(3)\fP.
 +\&"DER" format key file currently does not work because of a bug in OpenSSL.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +"PEM"
 +.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_SSLCERT, "client.pem");
 +  curl_easy_setopt(curl, CURLOPT_SSLKEY, "key.pem");
 +  curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM");
 +  curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
 +  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_SSLKEY "(3), " CURLOPT_SSLCERT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSLKEY_BLOB.3
index 34688f653,000000000..2f74a9cce
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSLKEY_BLOB.3
+++ b/docs/libcurl/opts/GNURLOPT_SSLKEY_BLOB.3
@@@ -1,75 -1,0 +1,75 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLKEY_BLOB 3 "24 Jun 2020" "libcurl 7.71.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSLKEY_BLOB \- private key for client cert from memory blob
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLKEY_BLOB,
 +                          struct curl_blob *blob);
 +.fi
 +.SH DESCRIPTION
 +Pass a pointer to a curl_blob structure, which contains information (pointer
 +and size) for a private key. Compatible with OpenSSL. The format (like "PEM")
 +must be specified with \fICURLOPT_SSLKEYTYPE(3)\fP.
 +
 +If the blob is initialized with the flags member of struct curl_blob set to
 +CURL_BLOB_COPY, the application does not have to keep the buffer around after
 +setting this.
 +
 +This option is an alternative to \fICURLOPT_SSLKEY(3)\fP which instead expects
 +a file name as input.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct curl_blob blob;
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  blob.data = certificateData;
 +  blob.len = filesize;
 +  blob.flags = CURL_BLOB_COPY;
 +  curl_easy_setopt(curl, CURLOPT_SSLCERT_BLOB, &blob);
 +  curl_easy_setopt(curl, CURLOPT_SSLCERTTYPE, "PEM");
 +
 +  blob.data = privateKeyData;
 +  blob.len = privateKeySize;
 +  curl_easy_setopt(curl, CURLOPT_SSLKEY_BLOB, &blob);
 +  curl_easy_setopt(curl, CURLOPT_KEYPASSWD, "s3cret");
 +  curl_easy_setopt(curl, CURLOPT_SSLKEYTYPE, "PEM");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in libcurl 7.71.0. This option is supported by the OpenSSL backends.
 +.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_SSLKEYTYPE "(3), " CURLOPT_SSLKEY "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSLVERSION.3
index 60629ddf6,000000000..810dcd4f4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSLVERSION.3
+++ b/docs/libcurl/opts/GNURLOPT_SSLVERSION.3
@@@ -1,113 -1,0 +1,113 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SSLVERSION 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSLVERSION \- set preferred TLS/SSL version
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSLVERSION, long version);
 +.SH DESCRIPTION
 +Pass a long as parameter to control which version range of SSL/TLS versions to
 +use.
 +
 +The SSL and TLS versions have typically developed from the most insecure
 +version to be more and more secure in this order through history: SSL v2,
 +SSLv3, TLS v1.0, TLS v1.1, TLS v1.2 and the most recent TLS v1.3.
 +
 +Use one of the available defines for this purpose. The available options are:
 +.RS
 +.IP CURL_SSLVERSION_DEFAULT
 +The default acceptable version range. The minimum acceptable version is by
 +default TLS v1.0 since 7.39.0 (unless the TLS library has a stricter rule).
 +.IP CURL_SSLVERSION_TLSv1
 +TLS v1.0 or later
 +.IP CURL_SSLVERSION_SSLv2
 +SSL v2 (but not SSLv3)
 +.IP CURL_SSLVERSION_SSLv3
 +SSL v3 (but not SSLv2)
 +.IP CURL_SSLVERSION_TLSv1_0
 +TLS v1.0 or later (Added in 7.34.0)
 +.IP CURL_SSLVERSION_TLSv1_1
 +TLS v1.1 or later (Added in 7.34.0)
 +.IP CURL_SSLVERSION_TLSv1_2
 +TLS v1.2 or later (Added in 7.34.0)
 +.IP CURL_SSLVERSION_TLSv1_3
 +TLS v1.3 or later (Added in 7.52.0)
 +.RE
 +
 +The maximum TLS version can be set by using \fIone\fP of the
 +CURL_SSLVERSION_MAX_ macros below. It is also possible to OR \fIone\fP of the
 +CURL_SSLVERSION_ macros with \fIone\fP of the CURL_SSLVERSION_MAX_ macros.
 +The MAX macros are not supported for WolfSSL.
 +.RS
 +.IP CURL_SSLVERSION_MAX_DEFAULT
 +The flag defines the maximum supported TLS version by libcurl, or the default
 +value from the SSL library is used. libcurl will use a sensible default
 +maximum, which was TLS v1.2 up to before 7.61.0 and is TLS v1.3 since then -
 +assuming the TLS library support it. (Added in 7.54.0)
 +.IP CURL_SSLVERSION_MAX_TLSv1_0
 +The flag defines maximum supported TLS version as TLS v1.0.
 +(Added in 7.54.0)
 +.IP CURL_SSLVERSION_MAX_TLSv1_1
 +The flag defines maximum supported TLS version as TLS v1.1.
 +(Added in 7.54.0)
 +.IP CURL_SSLVERSION_MAX_TLSv1_2
 +The flag defines maximum supported TLS version as TLS v1.2.
 +(Added in 7.54.0)
 +.IP CURL_SSLVERSION_MAX_TLSv1_3
 +The flag defines maximum supported TLS version as TLS v1.3.
 +(Added in 7.54.0)
 +.RE
 +
 +In versions of curl prior to 7.54 the CURL_SSLVERSION_TLS options were
 +documented to allow \fIonly\fP the specified TLS version, but behavior was
 +inconsistent depending on the TLS library.
 +
 +.SH DEFAULT
 +CURL_SSLVERSION_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";);
 +
 +  /* ask libcurl to use TLS version 1.0 or later */
 +  curl_easy_setopt(curl, CURLOPT_SSLVERSION, CURL_SSLVERSION_TLSv1);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +SSLv2 is disabled by default since 7.18.1. Other SSL versions availability may
 +vary depending on which backend libcurl has been built to use.
 +
 +SSLv3 is disabled by default since 7.39.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_USE_SSL "(3), " CURLOPT_HTTP_VERSION "(3), "
 +.BR CURLOPT_PROXY_SSLVERSION "(3), " CURLOPT_IPRESOLVE "(3) "
diff --cc docs/libcurl/opts/GNURLOPT_SSL_CIPHER_LIST.3
index 2fb8a52d6,000000000..3dc883158
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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
++ https://curl.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_CTX_DATA.3
index 166bb866e,000000000..5c6d16d6b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_CTX_DATA.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_CTX_DATA.3
@@@ -1,124 -1,0 +1,124 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CTX_DATA 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_SSL_CTX_DATA \- custom pointer passed to ssl_ctx callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_DATA, void *pointer);
 +.SH DESCRIPTION
 +Data \fIpointer\fP to pass to the ssl context callback set by the option
 +\fICURLOPT_SSL_CTX_FUNCTION(3)\fP, this is the pointer you'll get as third
 +parameter.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +.nf
 +/* OpenSSL specific */
 +
 +#include <openssl/ssl.h>
 +#include <gnurl/curl.h>
 +#include <stdio.h>
 +
 +static CURLcode sslctx_function(CURL *curl, void *sslctx, void *parm)
 +{
 +  X509_STORE *store;
 +  X509 *cert=NULL;
 +  BIO *bio;
 +  char *mypem = (char *)parm;
 +  /* get a BIO */
 +  bio=BIO_new_mem_buf(mypem, -1);
 +  /* use it to read the PEM formatted certificate from memory into an
 +   * X509 structure that SSL can use
 +   */
 +  PEM_read_bio_X509(bio, &cert, 0, NULL);
 +  if(cert == NULL)
 +    printf("PEM_read_bio_X509 failed...\\n");
 +
 +  /* get a pointer to the X509 certificate store (which may be empty) */
 +  store=SSL_CTX_get_cert_store((SSL_CTX *)sslctx);
 +
 +  /* add our certificate to this store */
 +  if(X509_STORE_add_cert(store, cert)==0)
 +    printf("error adding certificate\\n");
 +
 +  /* decrease reference counts */
 +  X509_free(cert);
 +  BIO_free(bio);
 +
 +  /* all set to go */
 +  return CURLE_OK;
 +}
 +
 +int main(void)
 +{
 +  CURL * ch;
 +  CURLcode rv;
 +  char *mypem = /* example CA cert PEM - shortened */
 +    "-----BEGIN CERTIFICATE-----\\n"
 +    "MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290\\n"
 +    "IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB\\n"
 +    "IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA\\n"
 +    "Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO\\n"
 +    "GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk\\n"
 +    "zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW\\n"
 +    "omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD\\n"
 +    "-----END CERTIFICATE-----\\n";
 +
 +  rv=curl_global_init(CURL_GLOBAL_ALL);
 +  ch=curl_easy_init();
 +  rv=curl_easy_setopt(ch, CURLOPT_SSLCERTTYPE, "PEM");
 +  rv=curl_easy_setopt(ch, CURLOPT_SSL_VERIFYPEER, 1L);
 +  rv=curl_easy_setopt(ch, CURLOPT_URL, "https://www.example.com/";);
 +
 +  /* Retrieve page using cacerts' certificate -> will succeed
 +   * load the certificate by installing a function doing the necessary
 +   * "modifications" to the SSL CONTEXT just before link init
 +   */
 +  rv=curl_easy_setopt(ch, CURLOPT_SSL_CTX_FUNCTION, *sslctx_function);
 +  rv=curl_easy_setopt(ch, CURLOPT_SSL_CTX_DATA, mypem);
 +  rv=curl_easy_perform(ch);
 +  if(rv==CURLE_OK)
 +    printf("*** transfer succeeded ***\\n");
 +  else
 +    printf("*** transfer failed ***\\n");
 +
 +  curl_easy_cleanup(ch);
 +  curl_global_cleanup();
 +  return rv;
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.11.0 for OpenSSL, in 7.42.0 for wolfSSL and in 7.54.0 for
 +mbedTLS. Other SSL backends are not supported.
 +.SH RETURN VALUE
 +CURLE_OK if supported; or an error such as:
 +
 +CURLE_NOT_BUILT_IN - Not supported by the SSL backend
 +
 +CURLE_UNKNOWN_OPTION
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSL_CTX_FUNCTION "(3), " CURLOPT_SSLVERSION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSL_CTX_FUNCTION.3
index 49dd2ecf1,000000000..8162571bb
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_CTX_FUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_CTX_FUNCTION.3
@@@ -1,83 -1,0 +1,83 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_CTX_FUNCTION 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSL_CTX_FUNCTION \- SSL context callback for OpenSSL, wolfSSL or 
mbedTLS
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode ssl_ctx_callback(CURL *curl, void *ssl_ctx, void *userptr);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_CTX_FUNCTION,
 +                          ssl_ctx_callback);
 +.SH DESCRIPTION
 +This option only works for libcurl powered by OpenSSL, wolfSSL or mbedTLS. If
 +libcurl was built against another SSL library this functionality is absent.
 +
 +Pass a pointer to your callback function, which should match the prototype
 +shown above.
 +
 +This callback function gets called by libcurl just before the initialization
 +of an SSL connection after having processed all other SSL related options to
 +give a last chance to an application to modify the behavior of the SSL
 +initialization. The \fIssl_ctx\fP parameter is actually a pointer to the SSL
 +library's \fISSL_CTX\fP for OpenSSL or wolfSSL, and a pointer to
 +\fImbedtls_ssl_config\fP for mbedTLS. If an error is returned from the
 +callback no attempt to establish a connection is made and the perform
 +operation will return the callback's error code. Set the \fIuserptr\fP
 +argument with the \fICURLOPT_SSL_CTX_DATA(3)\fP option.
 +
 +This function will get called on all new connections made to a server, during
 +the SSL negotiation. The \fIssl_ctx\fP will point to a newly initialized 
object
 +each time, but note the pointer may be the same as from a prior call.
 +
 +To use this properly, a non-trivial amount of knowledge of your SSL library is
 +necessary. For example, you can use this function to call library-specific
 +callbacks to add additional validation code for certificates, and even to
 +change the actual URI of an HTTPS request.
 +
 +WARNING: The \fICURLOPT_SSL_CTX_FUNCTION(3)\fP callback allows the application
 +to reach in and modify SSL details in the connection without libcurl itself
 +knowing anything about it, which then subsequently can lead to libcurl
 +unknowingly reusing SSL connections with different properties. To remedy this
 +you may set \fICURLOPT_FORBID_REUSE(3)\fP from the callback function.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +All TLS based protocols: HTTPS, FTPS, IMAPS, POP3S, SMTPS etc.
 +.SH EXAMPLE
 +See cacertinmem.c in docs/examples directory for usage example.
 +
- https://curl.haxx.se/libcurl/c/cacertinmem.html
++https://curl.se/libcurl/c/cacertinmem.html
 +.SH AVAILABILITY
 +Added in 7.11.0 for OpenSSL, in 7.42.0 for wolfSSL and in 7.54.0 for
 +mbedTLS. Other SSL backends are not supported.
 +.SH RETURN VALUE
 +CURLE_OK if supported; or an error such as:
 +
 +CURLE_NOT_BUILT_IN - Not supported by the SSL backend
 +
 +CURLE_UNKNOWN_OPTION
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSL_CTX_DATA "(3), " CURLOPT_SSL_VERIFYPEER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSL_ENABLE_ALPN.3
index 83122beae,000000000..24aade5fa
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_ENABLE_ALPN.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_ENABLE_ALPN.3
@@@ -1,53 -1,0 +1,53 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ENABLE_ALPN 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSL_ENABLE_ALPN \- enable ALPN
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_ALPN, long npn);
 +.SH DESCRIPTION
 +Pass a long as parameter, 0 or 1 where 1 is for enable and 0 for disable. This
 +option enables/disables ALPN in the SSL handshake (if the SSL backend libcurl
 +is built to use supports it), which can be used to negotiate http2.
 +.SH DEFAULT
 +1, enabled
 +.SH PROTOCOLS
 +HTTP
 +.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_ENABLE_ALPN, 0L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(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_SSL_ENABLE_NPN "(3), " CURLOPT_SSL_OPTIONS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSL_ENABLE_NPN.3
index 4a3c9f01e,000000000..e46de3c4a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_ENABLE_NPN.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_ENABLE_NPN.3
@@@ -1,53 -1,0 +1,53 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_ENABLE_NPN 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSL_ENABLE_NPN \- enable NPN
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_ENABLE_NPN, long npn);
 +.SH DESCRIPTION
 +Pass a long as parameter, 0 or 1 where 1 is for enable and 0 for disable. This
 +option enables/disables NPN in the SSL handshake (if the SSL backend libcurl
 +is built to use supports it), which can be used to negotiate http2.
 +.SH DEFAULT
 +1, enabled
 +.SH PROTOCOLS
 +HTTP
 +.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_ENABLE_NPN, 1L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(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_SSL_ENABLE_ALPN "(3), " CURLOPT_SSL_OPTIONS "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSL_FALSESTART.3
index de391ebe2,000000000..215504ca7
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_FALSESTART.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_FALSESTART.3
@@@ -1,55 -1,0 +1,55 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FALSESTART 3 "14 Feb 2015" "libcurl 7.41.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSL_FALSESTART \- enable TLS false start
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_FALSESTART, long enable);
 +.SH DESCRIPTION
 +Pass a long as parameter set to 1L to enable or 0 to disable.
 +
 +This option determines whether libcurl should use false start during the TLS
 +handshake. False start is a mode where a TLS client will start sending
 +application data before verifying the server's Finished message, thus saving a
 +round trip when performing a full handshake.
 +.SH DEFAULT
 +0
 +.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_FALSESTART, 1L);
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.42.0. This option is currently only supported by the NSS and
 +Secure Transport (on iOS 7.0 or later, or OS X 10.9 or later) TLS backends.
 +.SH RETURN VALUE
 +Returns CURLE_OK if false start is supported by the SSL backend, otherwise
 +returns CURLE_NOT_BUILT_IN.
diff --cc docs/libcurl/opts/GNURLOPT_SSL_OPTIONS.3
index b12405033,000000000..9f2849bf2
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_OPTIONS.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_OPTIONS.3
@@@ -1,84 -1,0 +1,84 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 Secure Transport, 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 block list 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)
 +.IP CURLSSLOPT_NATIVE_CA
 +Tell libcurl to use the operating system's native CA store for certificate
 +verification. Works only on Windows when built to use OpenSSL. This option is
 +experimental and behavior is subject to change.
 +(Added in 7.71.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_SSL_SESSIONID_CACHE.3
index d691c1020,000000000..00b38cd07
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_SESSIONID_CACHE.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_SESSIONID_CACHE.3
@@@ -1,58 -1,0 +1,58 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SESSIONID_CACHE 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSL_SESSIONID_CACHE \- enable/disable use of the SSL session-ID cache
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_SESSIONID_CACHE,
 +                         long enabled);
 +.SH DESCRIPTION
 +Pass a long set to 0 to disable libcurl's use of SSL session-ID caching. Set
 +this to 1 to enable it. By default all transfers are done using the cache
 +enabled. While nothing ever should get hurt by attempting to reuse SSL
 +session-IDs, there seem to be or have been broken SSL implementations in the
 +wild that may require you to disable this in order for you to succeed.
 +.SH DEFAULT
 +1
 +.SH PROTOCOLS
 +All TLS-based
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* switch off session-id use! */
 +  curl_easy_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE, 0L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.16.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_DNS_CACHE_TIMEOUT "(3), " CURLOPT_SSLVERSION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSL_VERIFYHOST.3
index 810c2a83f,000000000..730758715
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_VERIFYHOST.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_VERIFYHOST.3
@@@ -1,98 -1,0 +1,98 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_VERIFYHOST 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSL_VERIFYHOST \- verify the certificate's name against host
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYHOST, long verify);
 +.SH DESCRIPTION
 +Pass a long as parameter specifying what to \fIverify\fP.
 +
 +This option determines whether libcurl verifies that the server cert is for
 +the server it is known as.
 +
 +When negotiating TLS and SSL connections, the server sends a certificate
 +indicating its identity.
 +
 +When \fICURLOPT_SSL_VERIFYHOST(3)\fP is 2, that certificate must indicate that
 +the server is the server to which you meant to connect, or the connection
 +fails. Simply put, it means it has to have the same name in the certificate as
 +is in the URL you operate against.
 +
 +Curl considers the server the intended one when the Common Name field or a
 +Subject Alternate Name field in the certificate matches the host name in the
 +URL to which you told Curl to connect.
 +
 +If \fIverify\fP value is set to 1:
 +
 +In 7.28.0 and earlier: treated as a debug option of some sorts, not supported
 +anymore due to frequently leading to programmer mistakes.
 +
 +From 7.28.1 to 7.65.3: setting it to 1 made curl_easy_setopt() return an error
 +and leaving the flag untouched.
 +
 +From 7.66.0: treats 1 and 2 the same.
 +
 +When the \fIverify\fP value is 0, the connection succeeds regardless of the
 +names in the certificate. Use that ability with caution!
 +
 +The default value for this option is 2.
 +
 +This option controls checking the server's certificate's claimed identity.
 +The server could be lying.  To control lying, see
 +\fICURLOPT_SSL_VERIFYPEER(3)\fP.
 +.SH LIMITATIONS
 +Secure Transport: If \fIverify\fP value is 0, then SNI is also disabled. SNI 
is
 +a TLS extension that sends the hostname to the server. The server may use that
 +information to do such things as sending back a specific certificate for the
 +hostname, or forwarding the request to a specific origin server. Some 
hostnames
 +may be inaccessible if SNI is not sent.
 +
 +NSS: If \fICURLOPT_SSL_VERIFYPEER(3)\fP is zero,
 +\fICURLOPT_SSL_VERIFYHOST(3)\fP is also set to zero and cannot be overridden.
 +.SH DEFAULT
 +2
 +.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";);
 +
 +  /* Set the default value: strict name check please */
 +  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 2L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +If built TLS enabled.
 +.SH RETURN VALUE
 +Returns CURLE_OK if TLS is supported, and CURLE_UNKNOWN_OPTION if not.
 +
 +If 1 is set as argument, \fICURLE_BAD_FUNCTION_ARGUMENT\fP is returned.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSL_VERIFYPEER "(3), " CURLOPT_CAINFO "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSL_VERIFYPEER.3
index 55636bfbb,000000000..5c2a27f41
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_VERIFYPEER.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_VERIFYPEER.3
@@@ -1,93 -1,0 +1,93 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_VERIFYPEER 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSL_VERIFYPEER \- verify the peer's SSL certificate
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYPEER, long verify);
 +.SH DESCRIPTION
 +Pass a long as parameter to enable or disable.
 +
 +This option determines whether curl verifies the authenticity of the peer's
 +certificate. A value of 1 means curl verifies; 0 (zero) means it doesn't.
 +
 +When negotiating a TLS or SSL connection, the server sends a certificate
 +indicating its identity.  Curl verifies whether the certificate is authentic,
 +i.e. that you can trust that the server is who the certificate says it is.
 +This trust is based on a chain of digital signatures, rooted in certification
 +authority (CA) certificates you supply.  curl uses a default bundle of CA
 +certificates (the path for that is determined at build time) and you can
 +specify alternate certificates with the \fICURLOPT_CAINFO(3)\fP option or the
 +\fICURLOPT_CAPATH(3)\fP option.
 +
 +When \fICURLOPT_SSL_VERIFYPEER(3)\fP is enabled, and the verification fails to
 +prove that the certificate is authentic, the connection fails.  When the
 +option is zero, the peer certificate verification succeeds regardless.
 +
 +Authenticating the certificate is not enough to be sure about the server. You
 +typically also want to ensure that the server is the server you mean to be
 +talking to.  Use \fICURLOPT_SSL_VERIFYHOST(3)\fP for that. The check that the
 +host name in the certificate is valid for the host name you're connecting to
 +is done independently of the \fICURLOPT_SSL_VERIFYPEER(3)\fP option.
 +
 +WARNING: disabling verification of the certificate allows bad guys to
 +man-in-the-middle the communication without you knowing it. Disabling
 +verification makes the communication insecure. Just having encryption on a
 +transfer is not enough as you cannot be sure that you are communicating with
 +the correct end-point.
 +
 +NOTE: even when this option is disabled, depending on the used TLS backend,
 +curl may still load the certificate file specified in
 +\fICURLOPT_CAINFO(3)\fP. curl default settings in some distributions might use
 +quite a large file as a default setting for \fICURLOPT_CAINFO(3)\fP, so
 +loading the file can be quite expensive, especially when dealing with many
 +connections. Thus, in some situations, you might want to disable verification
 +fully to save resources by setting \fICURLOPT_CAINFO(3)\fP to NULL - but
 +please also consider the warning above!
 +.SH DEFAULT
 +By default, curl assumes a value of 1.
 +.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";);
 +
 +  /* Set the default value: strict certificate check please */
 +  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 1L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +If built TLS enabled.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_PROXY_SSL_VERIFYPEER "(3), "
 +.BR CURLOPT_PROXY_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_CAINFO "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_SSL_VERIFYSTATUS.3
index 824c9669b,000000000..80faa038a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SSL_VERIFYSTATUS.3
+++ b/docs/libcurl/opts/GNURLOPT_SSL_VERIFYSTATUS.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_VERIFYSTATUS 3 "04 Dec 2014" "libcurl 7.40.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SSL_VERIFYSTATUS \- verify the certificate's status
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SSL_VERIFYSTATUS, long 
verify);
 +.SH DESCRIPTION
 +Pass a long as parameter set to 1 to enable or 0 to disable.
 +
 +This option determines whether libcurl verifies the status of the server cert
 +using the "Certificate Status Request" TLS extension (aka. OCSP stapling).
 +
 +Note that if this option is enabled but the server does not support the TLS
 +extension, the verification will fail.
 +.SH DEFAULT
 +0
 +.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/";);
 +  /* ask for OCSP stapling! */
 +  curl_easy_setopt(curl, CURLOPT_SSL_VERIFYSTATUS, 1L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.41.0. This option is currently only supported by the OpenSSL, 
GnuTLS
 +and NSS TLS backends.
 +.SH RETURN VALUE
 +Returns CURLE_OK if OCSP stapling is supported by the SSL backend, otherwise
 +returns CURLE_NOT_BUILT_IN.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSL_VERIFYHOST "(3), "
 +.BR CURLOPT_SSL_VERIFYPEER "(3), "
 +.BR CURLOPT_CAINFO "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_STDERR.3
index c2758d54a,000000000..bae91971f
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_URL, "https://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.3
index eef13ee5b,000000000..c50685067
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_STREAM_DEPENDS.3
+++ b/docs/libcurl/opts/GNURLOPT_STREAM_DEPENDS.3
@@@ -1,68 -1,0 +1,68 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 3 "13 Sep 2015" "libcurl 7.46.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_STREAM_DEPENDS \- set stream this transfer depends on
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_STREAM_DEPENDS, 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. This option clears the
 +exclusive bit and is mutually exclusive to the
 +\fICURLOPT_STREAM_DEPENDS_E(3)\fP option.
 +
 +The spec says "Including a dependency expresses a preference to allocate
 +resources to the identified stream rather than to the dependent 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, 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_E "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_STREAM_DEPENDS_E.3
index 128ae5e65,000000000..3511b7021
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 2d4fa9f6b,000000000..cea8e7dab
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SUPPRESS_CONNECT_HEADERS.3
index 9f5eef95b,000000000..84d55ee8a
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_SUPPRESS_CONNECT_HEADERS.3
+++ b/docs/libcurl/opts/GNURLOPT_SUPPRESS_CONNECT_HEADERS.3
@@@ -1,95 -1,0 +1,95 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_SUPPRESS_CONNECT_HEADERS 3 "13 February 2017" "libcurl 7.54.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_SUPPRESS_CONNECT_HEADERS \- Suppress proxy CONNECT response headers 
from user callbacks
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_SUPPRESS_CONNECT_HEADERS, 
long onoff);
 +.fi
 +.SH DESCRIPTION
 +When \fICURLOPT_HTTPPROXYTUNNEL(3)\fP is used and a CONNECT request is made,
 +suppress proxy CONNECT response headers from the user callback functions
 +\fICURLOPT_HEADERFUNCTION(3)\fP and \fICURLOPT_WRITEFUNCTION(3)\fP.
 +
 +Proxy CONNECT response headers can complicate header processing since it's
 +essentially a separate set of headers. You can enable this option to suppress
 +those headers.
 +
 +For example let's assume an HTTPS URL is to be retrieved via CONNECT. On
 +success there would normally be two sets of headers, and each header line sent
 +to the header function and/or the write function. The data given to the
 +callbacks would look like this:
 +
 +.nf
 +HTTP/1.1 200 Connection established
 +{headers}...
 +
 +HTTP/1.1 200 OK
 +Content-Type: application/json
 +{headers}...
 +
 +{body}...
 +.fi
 +
 +However by enabling this option the CONNECT response headers are suppressed, 
so
 +the data given to the callbacks would look like this:
 +
 +.nf
 +HTTP/1.1 200 OK
 +Content-Type: application/json
 +{headers}...
 +
 +{body}...
 +.fi
 +
 +.SH DEFAULT
 +0
 +.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_HEADER, 1L);
 +  curl_easy_setopt(curl, CURLOPT_PROXY, "http://foo:3128";);
 +  curl_easy_setopt(curl, CURLOPT_HTTPPROXYTUNNEL, 1L);
 +  curl_easy_setopt(curl, CURLOPT_SUPPRESS_CONNECT_HEADERS, 1L);
 +
 +  curl_easy_perform(curl);
 +
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.54.0
 +.SH RETURN VALUE
 +CURLE_OK or an error such as CURLE_UNKNOWN_OPTION.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HEADER "(3), " CURLOPT_PROXY "(3), "
 +.BR CURLOPT_HTTPPROXYTUNNEL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TCP_FASTOPEN.3
index 7dc62263c,000000000..ccaa03b15
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TCP_FASTOPEN.3
+++ b/docs/libcurl/opts/GNURLOPT_TCP_FASTOPEN.3
@@@ -1,54 -1,0 +1,54 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_FASTOPEN 3 "16 Feb 2016" "libcurl 7.49.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TCP_FASTOPEN \- enable TCP Fast Open
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TCP_FASTOPEN, long enable);
 +.SH DESCRIPTION
 +Pass a long as parameter set to 1L to enable or 0 to disable.
 +
 +TCP Fast Open (RFC7413) is a mechanism that allows data to be carried in the
 +SYN and SYN-ACK packets and consumed by the receiving end during the initial
 +connection handshake, saving up to one full round-trip time (RTT).
 +.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_TCP_FASTOPEN, 1L);
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.49.0. This option is currently only supported on Linux and  OS X
 +El Capitan.
 +.SH RETURN VALUE
 +Returns CURLE_OK if fast open is supported by the operating system, otherwise
 +returns CURLE_NOT_BUILT_IN.
diff --cc docs/libcurl/opts/GNURLOPT_TCP_KEEPALIVE.3
index 155f5e1c5,000000000..91e86aaae
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 08f7934c1,000000000..f7da4c3b2
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 d9e23b603,000000000..b553434e6
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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 dd6fb6251,000000000..39615f8c7
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_URL, "https://example.com";);
++  /* leave Nagle enabled */
 +  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_TELNETOPTIONS.3
index 8b3751cc3,000000000..85f807872
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TELNETOPTIONS.3
+++ b/docs/libcurl/opts/GNURLOPT_TELNETOPTIONS.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TELNETOPTIONS 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TELNETOPTIONS \- custom telnet options
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TELNETOPTIONS,
 +                          struct curl_slist *cmds);
 +.SH DESCRIPTION
 +Provide a pointer to a curl_slist with variables to pass to the telnet
 +negotiations. The variables should be in the format <option=value>. libcurl
 +supports the options 'TTYPE', 'XDISPLOC' and 'NEW_ENV'. See the TELNET
 +standard for details.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +TELNET
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  struct curl_slist *options;
 +  options = curl_slist_append(NULL, "TTTYPE=vt100");
 +  options = curl_slist_append(options, "USER=foobar");
 +  curl_easy_setopt(curl, CURLOPT_URL, "telnet://example.com/");
 +  curl_easy_setopt(curl, CURLOPT_TELNETOPTIONS, options);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +  curl_slist_free_all(options);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with TELNET
 +.SH RETURN VALUE
 +Returns CURLE_OK if TELNET is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_HTTPHEADER "(3), " CURLOPT_QUOTE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TFTP_BLKSIZE.3
index e4ae6df2b,000000000..95a2e3c18
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TFTP_BLKSIZE.3
+++ b/docs/libcurl/opts/GNURLOPT_TFTP_BLKSIZE.3
@@@ -1,57 -1,0 +1,57 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TFTP_BLKSIZE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TFTP_BLKSIZE \- TFTP block size
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_BLKSIZE, long blocksize);
 +.SH DESCRIPTION
 +Specify \fIblocksize\fP to use for TFTP data transmission. Valid range as per
 +RFC2348 is 8-65464 bytes. The default of 512 bytes will be used if this option
 +is not specified. The specified block size will only be used pending support
 +by the remote server. If the server does not return an option acknowledgement
 +or returns an option acknowledgement with no blksize, the default of 512 bytes
 +will be used.
 +.SH DEFAULT
 +512
 +.SH PROTOCOLS
 +TFTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "tftp://example.com/bootimage";);
 +  /* try using larger blocks */
 +  curl_easy_setopt(curl, CURLOPT_TFTP_BLKSIZE, 2048L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(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_MAXFILESIZE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TFTP_NO_OPTIONS.3
index 5107aa58e,000000000..38e306fa1
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TFTP_NO_OPTIONS.3
+++ b/docs/libcurl/opts/GNURLOPT_TFTP_NO_OPTIONS.3
@@@ -1,71 -1,0 +1,71 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TFTP_NO_OPTIONS 3 "23 Feb 2016" "libcurl 7.48.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_TFTP_NO_OPTIONS \- Do not send TFTP options requests.
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TFTP_NO_OPTIONS, long onoff);
 +.SH DESCRIPTION
 +Set \fIonoff\fP to 1L to exclude all TFTP options defined in RFC2347, RFC2348
 +and RFC2349 from read and write requests (RRQs/WRQs).
 +
 +This option improves interop with some legacy servers that do not acknowledge
 +or properly implement TFTP options. When this option is used
 +\fICURLOPT_TFTP_BLKSIZE(3)\fP is ignored.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +TFTP
 +.SH EXAMPLE
 +.nf
 +size_t write_callback(char *ptr, size_t size, size_t nmemb, void *fp)
 +{
 +  return fwrite(ptr, size, nmemb, (FILE *)fp);
 +}
 +
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  FILE *fp = fopen("foo.bin", "wb");
 +  if(fp) {
 +    curl_easy_setopt(curl, CURLOPT_WRITEDATA, (void *)fp);
 +    curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
 +
 +    curl_easy_setopt(curl, CURLOPT_URL, "tftp://example.com/foo.bin";);
 +
 +    /* do not send TFTP options requests */
 +    curl_easy_setopt(curl, CURLOPT_TFTP_NO_OPTIONS, 1L);
 +
 +    /* Perform the request */
 +    curl_easy_perform(curl);
 +
 +    fclose(fp);
 +  }
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.48.0
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
diff --cc docs/libcurl/opts/GNURLOPT_TIMECONDITION.3
index fcfcd0846,000000000..1ddeeef53
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TIMECONDITION.3
+++ b/docs/libcurl/opts/GNURLOPT_TIMECONDITION.3
@@@ -1,65 -1,0 +1,65 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2016, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TIMECONDITION 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TIMECONDITION \- select condition for a time request
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMECONDITION, long cond);
 +.SH DESCRIPTION
 +Pass a long as parameter. This defines how the \fICURLOPT_TIMEVALUE(3)\fP time
 +value is treated. You can set this parameter to \fICURL_TIMECOND_IFMODSINCE\fP
 +or \fICURL_TIMECOND_IFUNMODSINCE\fP.
 +
 +The last modification time of a file is not always known and in such instances
 +this feature will have no effect even if the given time condition would not
 +have been met. \fIcurl_easy_getinfo(3)\fP with the
 +\fICURLINFO_CONDITION_UNMET\fP option can be used after a transfer to learn if
 +a zero-byte successful "transfer" was due to this condition not matching.
 +.SH DEFAULT
 +CURL_TIMECOND_NONE (0)
 +.SH PROTOCOLS
 +HTTP, FTP, RTSP, and FILE
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* January 1, 2020 is 1577833200 */
 +  curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
 +
 +  /* If-Modified-Since the above time stamp */
 +  curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_TIMEVALUE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TIMEOUT.3
index c6c3bc95e,000000000..8276c1989
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TIMEOUT.3
+++ b/docs/libcurl/opts/GNURLOPT_TIMEOUT.3
@@@ -1,72 -1,0 +1,72 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TIMEOUT \- set maximum time the request is allowed to take
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEOUT, long timeout);
 +.SH DESCRIPTION
 +Pass a long as parameter containing \fItimeout\fP - the maximum time in
 +seconds that you allow the libcurl transfer operation to take. Normally, name
 +lookups can take a considerable time and limiting operations risk aborting
 +perfectly normal operations. This option may cause libcurl to use the SIGALRM
 +signal to timeout system calls.
 +
 +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 option puts a hard limit on how long time a request is allowed to
 +take, it has limited use in dynamic use cases with varying transfer times. 
That
 +is especially apparent when using the multi interface, which may queue the
 +transfer, and that time is included. You are 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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* complete within 20 seconds */
 +  curl_easy_setopt(curl, CURLOPT_TIMEOUT, 20L);
 +
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK. Returns CURLE_BAD_FUNCTION_ARGUMENT if set to a negative
 +value or a value that when converted to milliseconds is too large.
 +.SH "SEE ALSO"
 +.BR CURLOPT_TIMEOUT_MS "(3), "
 +.BR CURLOPT_CONNECTTIMEOUT "(3), " CURLOPT_LOW_SPEED_LIMIT "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TIMEOUT_MS.3
index 8bd7b8651,000000000..751749933
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://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_TIMEVALUE.3
index c333ca65d,000000000..a6afeaa8b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TIMEVALUE.3
+++ b/docs/libcurl/opts/GNURLOPT_TIMEVALUE.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TIMEVALUE 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TIMEVALUE \- set time value for conditional
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE, long val);
 +.SH DESCRIPTION
 +Pass a long \fIval\fP as parameter. This should be the time counted as seconds
 +since 1 Jan 1970, and the time will be used in a condition as specified with
 +\fICURLOPT_TIMECONDITION(3)\fP.
 +
 +On systems with 32 bit 'long' variables, this option cannot set dates beyond
 +the year 2038. Consider \fICURLOPT_TIMEVALUE_LARGE(3)\fP instead.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +HTTP, FTP, RTSP, and FILE
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* January 1, 2020 is 1577833200 */
 +  curl_easy_setopt(curl, CURLOPT_TIMEVALUE, 1577833200L);
 +
 +  /* If-Modified-Since the above time stamp */
 +  curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_TIMECONDITION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TIMEVALUE_LARGE.3
index 1e13a9020,000000000..9a5c051de
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TIMEVALUE_LARGE.3
+++ b/docs/libcurl/opts/GNURLOPT_TIMEVALUE_LARGE.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TIMEVALUE_LARGE 3 "25 Jan 2018" "libcurl 7.59.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_TIMEVALUE_LARGE \- set time value for conditional
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TIMEVALUE_LARGE, curl_off_t 
val);
 +.SH DESCRIPTION
 +Pass a curl_off_t \fIval\fP as parameter. This should be the time counted as
 +seconds since 1 Jan 1970, and the time will be used in a condition as
 +specified with \fICURLOPT_TIMECONDITION(3)\fP.
 +
 +The difference between this option and \fICURLOPT_TIMEVALUE(3)\fP is the type
 +of the argument. On systems where 'long' is only 32 bit wide, this option has
 +to be used to set dates beyond the year 2038.
 +.SH DEFAULT
 +0
 +.SH PROTOCOLS
 +HTTP, FTP, RTSP, and FILE
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* January 1, 2020 is 1577833200 */
 +  curl_easy_setopt(curl, CURLOPT_TIMEVALUE_LARGE, (curl_off_t)1577833200);
 +
 +  /* If-Modified-Since the above time stamp */
 +  curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.59.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_TIMECONDITION "(3), "
 +.BR CURLOPT_TIMEVALUE_LARGE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TLS13_CIPHERS.3
index 878e10806,000000000..11757bbc5
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TLS13_CIPHERS.3
+++ b/docs/libcurl/opts/GNURLOPT_TLS13_CIPHERS.3
@@@ -1,68 -1,0 +1,68 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TLS13_CIPHERS 3 "25 May 2018" "libcurl 7.61.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TLS13_CIPHERS \- specify ciphers suites to use for TLS 1.3
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLS13_CIPHERS, char *list);
 +.SH DESCRIPTION
 +Pass a char *, pointing to a null-terminated string holding the list of cipher
 +suites to use for the TLS 1.3 connection. The list must be syntactically
 +correct, it consists of one or more cipher suite strings separated by colons.
 +
 +You'll find more details about cipher lists on this URL:
 +
-  https://curl.haxx.se/docs/ssl-ciphers.html
++ https://curl.se/docs/ssl-ciphers.html
 +
 +This option is currently used only when curl is built to use OpenSSL 1.1.1 or
 +later. If you are using a different SSL backend you can try setting TLS 1.3
 +cipher suites by using the CURLOPT_SSL_CIPHER_LIST option.
 +
 +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_TLS13_CIPHERS,
 +                   "TLS13-CHACHA20-POLY1305-SHA256");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.61.0.
 +Available when built with OpenSSL >= 1.1.1.
 +.SH RETURN VALUE
 +Returns CURLE_OK if supported, CURLE_NOT_BUILT_IN otherwise.
 +.SH "SEE ALSO"
 +.BR CURLOPT_SSL_CIPHER_LIST "(3), " CURLOPT_SSLVERSION "(3), "
 +.BR CURLOPT_PROXY_SSL_CIPHER_LIST "(3), " CURLOPT_PROXY_TLS13_CIPHERS "(3), "
 +.BR CURLOPT_PROXY_SSLVERSION "(3), " CURLOPT_USE_SSL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TLSAUTH_PASSWORD.3
index 7e67d3ee3,000000000..153d991ad
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TLSAUTH_PASSWORD.3
+++ b/docs/libcurl/opts/GNURLOPT_TLSAUTH_PASSWORD.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TLSAUTH_PASSWORD 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_TLSAUTH_PASSWORD \- password to use for TLS authentication
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_PASSWORD, char *pwd);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should point to the null-terminated password
 +to use for the TLS authentication method specified with the
 +\fICURLOPT_TLSAUTH_TYPE(3)\fP option. Requires that the
 +\fICURLOPT_TLSAUTH_USERNAME(3)\fP option also be set.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +
 +This feature relies in TLS SRP which doesn't work with TLS 1.3.
 +.SH DEFAULT
 +NULL
 +.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/";);
 +  curl_easy_setopt(curl, CURLOPT_TLSAUTH_TYPE, "SRP");
 +  curl_easy_setopt(curl, CURLOPT_TLSAUTH_USERNAME, "user");
 +  curl_easy_setopt(curl, CURLOPT_TLSAUTH_PASSWORD, "secret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.21.4
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_TLSAUTH_TYPE "(3), " CURLOPT_TLSAUTH_USERNAME "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TLSAUTH_TYPE.3
index 408c7569e,000000000..ee624d2c4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TLSAUTH_TYPE.3
+++ b/docs/libcurl/opts/GNURLOPT_TLSAUTH_TYPE.3
@@@ -1,67 -1,0 +1,67 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TLSAUTH_TYPE 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TLSAUTH_TYPE \- set TLS authentication methods
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_TYPE, char *type);
 +.SH DESCRIPTION
 +Pass a pointer to a null-terminated string as parameter. The string should be
 +the method of the TLS authentication. Supported method is "SRP".
 +
 +.IP SRP
 +TLS-SRP authentication. Secure Remote Password authentication for TLS is
 +defined in RFC5054 and provides mutual authentication if both sides have a
 +shared secret. To use TLS-SRP, you must also set the
 +\fICURLOPT_TLSAUTH_USERNAME(3)\fP and \fICURLOPT_TLSAUTH_PASSWORD(3)\fP
 +options.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +
 +TLS SRP doesn't work with TLS 1.3.
 +.SH DEFAULT
 +blank
 +.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/";);
 +  curl_easy_setopt(curl, CURLOPT_TLSAUTH_TYPE, "SRP");
 +  curl_easy_setopt(curl, CURLOPT_TLSAUTH_USERNAME, "user");
 +  curl_easy_setopt(curl, CURLOPT_TLSAUTH_PASSWORD, "secret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +You need to build libcurl with GnuTLS or OpenSSL with TLS-SRP support for this
 +to work. Added in 7.21.4
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_TLSAUTH_USERNAME "(3), " CURLOPT_TLSAUTH_PASSWORD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TLSAUTH_USERNAME.3
index 1cf8d446e,000000000..29c7b9963
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TLSAUTH_USERNAME.3
+++ b/docs/libcurl/opts/GNURLOPT_TLSAUTH_USERNAME.3
@@@ -1,62 -1,0 +1,62 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TLSAUTH_USERNAME 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_TLSAUTH_USERNAME \- user name to use for TLS authentication
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TLSAUTH_USERNAME, char *user);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should point to the null-terminated username
 +to use for the TLS authentication method specified with the
 +\fICURLOPT_TLSAUTH_TYPE(3)\fP option. Requires that the
 +\fICURLOPT_TLSAUTH_PASSWORD(3)\fP option also be set.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +
 +This feature relies in TLS SRP which doesn't work with TLS 1.3.
 +.SH DEFAULT
 +NULL
 +.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/";);
 +  curl_easy_setopt(curl, CURLOPT_TLSAUTH_TYPE, "SRP");
 +  curl_easy_setopt(curl, CURLOPT_TLSAUTH_USERNAME, "user");
 +  curl_easy_setopt(curl, CURLOPT_TLSAUTH_PASSWORD, "secret");
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.21.4
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, CURLE_UNKNOWN_OPTION if not, or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_TLSAUTH_TYPE "(3), " CURLOPT_TLSAUTH_PASSWORD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TRAILERDATA.3
index 909f051f4,000000000..36eb8e6dc
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TRAILERDATA.3
+++ b/docs/libcurl/opts/GNURLOPT_TRAILERDATA.3
@@@ -1,49 -1,0 +1,49 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TRAILERDATA 3 "14 Aug 2018" "libcurl 7.64.0" "curl_easy_setopt 
options"
 +.SH NAME:
 +CURLOPT_TRAILERDATA \- Custom pointer passed to the trailing headers callback
 +.SH SYNOPSIS
 +#include <curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRAILERDATA, void *userdata);
 +.SH DESCRIPTION:
 +Data pointer to be passed to the HTTP trailer callback function.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +.nf
 +/* Assuming we have a CURL handle in the hndl variable. */
 +
 +struct MyData data;
 +
 +curl_easy_setopt(hndl, CURLOPT_TRAILERDATA, &data);
 +.fi
 +
 +A more complete example can be found in examples/http_trailers.html
 +.SH AVAILABILITY
 +This option was added in curl 7.64.0 and is present if HTTP support is enabled
 +.SH "SEE ALSO"
 +.BR CURLOPT_TRAILERFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TRAILERFUNCTION.3
index a6c3cdd49,000000000..da870a857
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TRAILERFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_TRAILERFUNCTION.3
@@@ -1,101 -1,0 +1,101 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TRAILERFUNCTION 3 "14 Aug 2018" "libcurl 7.64.0" 
"curl_easy_setopt options"
 +.SH NAME:
 +CURLOPT_TRAILERFUNCTION \- Set callback for sending trailing headers
 +.SH SYNOPSIS
 +#include <curl.h>
 +
 +int curl_trailer_callback(struct curl_slist ** list, void *userdata);
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRAILERFUNCTION, 
curl_trailer_callback *func);
 +.SH DESCRIPTION
 +Pass a pointer to a callback function.
 +
 +This callback function will be called once right before sending the final
 +CR LF in an HTTP chunked transfer to fill a list of trailing headers to be
 +sent before finishing the HTTP transfer.
 +
 +You can set the userdata argument with the CURLOPT_TRAILERDATA option.
 +
 +The trailing headers included in the linked list must not be CRLF-terminated,
 +because libcurl will add the appropriate line termination characters after
 +each header item.
 +
 +If you use curl_slist_append to add trailing headers to the curl_slist then
 +libcurl will duplicate the strings, and will free the curl_slist and the
 +duplicates once the trailers have been sent.
 +
 +If one of the trailing headers is not formatted correctly
 +(i.e. HeaderName: headerdata) it will be ignored and an info message
 +will be emitted.
 +
 +The return value can either be CURL_TRAILERFUNC_OK or CURL_TRAILERFUNC_ABORT
 +which would respectively instruct libcurl to either continue with sending the
 +trailers or to abort the request.
 +
 +If you set this option to NULL, then the transfer proceeds as usual
 +without any interruptions.
 +.SH DEFAULT
 +NULL
 +.SH PROTOCOLS
 +HTTP
 +.SH EXAMPLE
 +#include <gnurl/curl.h>
 +
 +static int trailer_cb(struct curl_slist **tr, void *data)
 +{
 +  /* libcurl will free the list */
 +  tr = curl_slist_append(*tr, "My-super-awesome-trailer: trailer-stuff");
 +  return CURL_TRAILERFUNC_OK;
 +}
 +
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  /* Set the URL of the request */
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com/";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com/";);
 +  /* Now set it as a put */
 +  curl_easy_setopt(curl, CURLOPT_PUT, 1L);
 +
 +  /* Assuming we have a function that will return the data to be pushed
 +     Let that function be read_cb */
 +  curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_cb);
 +
 +  struct curl_slist *headers = NULL;
-   headers = curl_slist_append(headers, "Trailer: My-super-awsome-trailer");
++  headers = curl_slist_append(headers, "Trailer: My-super-awesome-trailer");
 +  res = curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
 +
 +  /* Set the trailers filling callback */
 +  curl_easy_setopt(curl, CURLOPT_TRAILERFUNCTION, trailer_cb);
 +
 +  /* Perform the request, res will get the return code */
 +  res = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +
 +  curl_slist_free_all(headers);
 +}
 +.SH AVAILABILITY
 +This option was added in curl 7.64.0 and is present if HTTP support is enabled
 +.SH "SEE ALSO"
 +.BR CURLOPT_TRAILERDATA "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TRANSFERTEXT.3
index 0bb4dea5f,000000000..68dfd0cd7
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TRANSFERTEXT.3
+++ b/docs/libcurl/opts/GNURLOPT_TRANSFERTEXT.3
@@@ -1,59 -1,0 +1,59 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TRANSFERTEXT 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_TRANSFERTEXT \- request a text based transfer for FTP
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFERTEXT, long text);
 +.SH DESCRIPTION
 +A parameter set to 1 tells the library to use ASCII mode for FTP transfers,
 +instead of the default binary transfer. For win32 systems it does not set the
 +stdout to binary mode. This option can be usable when transferring text data
 +between systems with different views on certain characters, such as newlines
 +or similar.
 +
 +libcurl does not do a complete ASCII conversion when doing ASCII transfers
 +over FTP. This is a known limitation/flaw that nobody has rectified. libcurl
 +simply sets the mode to ASCII and performs a standard transfer.
 +.SH DEFAULT
 +0, disabled
 +.SH PROTOCOLS
 +FTP
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "ftp://example.com/textfile";);
 +  curl_easy_setopt(curl, CURLOPT_TRANSFERTEXT, 1L);
 +  ret = curl_easy_perform(curl);
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Along with FTP
 +.SH RETURN VALUE
 +Returns CURLE_OK if FTP is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_CRLF "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_TRANSFER_ENCODING.3
index f5f304d6a,000000000..8a54f088f
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_TRANSFER_ENCODING.3
+++ b/docs/libcurl/opts/GNURLOPT_TRANSFER_ENCODING.3
@@@ -1,61 -1,0 +1,61 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_TRANSFER_ENCODING 3 "19 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_TRANSFER_ENCODING \- ask for HTTP Transfer Encoding
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_TRANSFER_ENCODING, long 
enable);
 +.SH DESCRIPTION
 +Pass a long set to 1L to \fIenable\fP or 0 to disable.
 +
 +Adds a request for compressed Transfer Encoding in the outgoing HTTP
 +request. If the server supports this and so desires, it can respond with the
 +HTTP response sent using a compressed Transfer-Encoding that will be
 +automatically uncompressed by libcurl on reception.
 +
 +Transfer-Encoding differs slightly from the Content-Encoding you ask for with
 +\fICURLOPT_ACCEPT_ENCODING(3)\fP in that a Transfer-Encoding is strictly meant
 +to be for the transfer and thus MUST be decoded before the data arrives in the
 +client. Traditionally, Transfer-Encoding has been much less used and supported
 +by both HTTP clients and HTTP servers.
 +.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_TRANSFER_ENCODING, 1L);
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.21.6
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_ACCEPT_ENCODING "(3), " CURLOPT_HTTP_TRANSFER_DECODING "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_UNIX_SOCKET_PATH.3
index 355cf576e,000000000..3fb3b218d
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_UNRESTRICTED_AUTH.3
index d10940137,000000000..3877e8573
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_UNRESTRICTED_AUTH.3
+++ b/docs/libcurl/opts/GNURLOPT_UNRESTRICTED_AUTH.3
@@@ -1,60 -1,0 +1,60 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_UNRESTRICTED_AUTH 3 "17 Jun 2014" "libcurl 7.37.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_UNRESTRICTED_AUTH \- send credentials to other hosts too
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UNRESTRICTED_AUTH,
 +                          long goahead);
 +.SH DESCRIPTION
 +Set the long \fIgohead\fP parameter to 1L to make libcurl continue to send
 +authentication (user+password) credentials when following locations, even when
 +hostname changed. This option is meaningful only when setting
 +\fICURLOPT_FOLLOWLOCATION(3)\fP.
 +
 +By default, libcurl will only send given credentials to the initial host name
 +as given in the original URL, to avoid leaking username + password to other
 +sites.
 +.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";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +  curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
 +  curl_easy_setopt(curl, CURLOPT_UNRESTRICTED_AUTH, 1L);
 +  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), " CURLOPT_USERPWD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_UPKEEP_INTERVAL_MS.3
index 339f2c632,000000000..d4f7c8c2e
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_UPKEEP_INTERVAL_MS.3
+++ b/docs/libcurl/opts/GNURLOPT_UPKEEP_INTERVAL_MS.3
@@@ -1,73 -1,0 +1,73 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_UPKEEP_INTERVAL_MS 3 "31 Oct 2018" "libcurl 7.62.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_UPKEEP_INTERVAL_MS \- connection upkeep interval
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPKEEP_INTERVAL_MS, long 
upkeep_interval_ms);
 +.SH DESCRIPTION
 +Some protocols have "connection upkeep" mechanisms. These mechanisms usually
 +send some traffic on existing connections in order to keep them alive; this
 +can prevent connections from being closed due to overzealous firewalls, for
 +example.
 +
 +The user needs to explicitly call \fIcurl_easy_upkeep(3)\fP in order to
 +perform the upkeep work.
 +
 +Currently the only protocol with a connection upkeep mechanism is HTTP/2: when
 +the connection upkeep interval is exceeded and \fIcurl_easy_upkeep(3)\fP
 +is called, an HTTP/2 PING frame is sent on the connection.
 +
 +.SH DEFAULT
 +CURL_UPKEEP_INTERVAL_DEFAULT (currently defined as 60000L, which is 60 
seconds)
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  /* Make a connection to an HTTP/2 server. */
 +  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* Set the interval to 30000ms / 30s */
 +  curl_easy_setopt(curl, CURLOPT_UPKEEP_INTERVAL_MS, 30000L);
 +
 +  curl_easy_perform(curl);
 +
 +  /* Perform more work here. */
 +
 +  /* While the connection is being held open, curl_easy_upkeep() can be
 +     called. If curl_easy_upkeep() is called and the time since the last
 +     upkeep exceeds the interval, then an HTTP/2 PING is sent. */
 +  curl_easy_upkeep(curl);
 +
 +  /* Perform more work here. */
 +
 +  /* always cleanup */
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.62.0
 +.SH RETURN VALUE
 +Returns CURLE_OK
diff --cc docs/libcurl/opts/GNURLOPT_UPLOAD.3
index 970b1281c,000000000..840cf2dec
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_UPLOAD_BUFFERSIZE.3
index 9cc3f6cac,000000000..a974f3c89
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_UPLOAD_BUFFERSIZE.3
+++ b/docs/libcurl/opts/GNURLOPT_UPLOAD_BUFFERSIZE.3
@@@ -1,69 -1,0 +1,69 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_BUFFERSIZE 3 "18 Aug 2018" "libcurl 7.62.0" 
"curl_easy_setopt options"
 +.SH NAME
 +CURLOPT_UPLOAD_BUFFERSIZE \- set preferred upload buffer size
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_UPLOAD_BUFFERSIZE, long size);
 +.SH DESCRIPTION
 +Pass a long specifying your preferred \fIsize\fP (in bytes) for the upload
 +buffer in libcurl. It makes libcurl uses a larger buffer that gets passed to
 +the next layer in the stack to get sent off. In some setups and for some
 +protocols, there's a huge performance benefit of having a larger upload
 +buffer.
 +
 +This is just treated as a request, not an order. You cannot be guaranteed to
 +actually get the given size.
 +
 +The upload buffer size is by default 64 kilobytes. The maximum buffer size
 +allowed to be set is 2 megabytes. The minimum buffer size allowed to be set is
 +16 kilobytes.
 +
 +Since curl 7.61.1 the upload buffer is allocated on-demand - so if the handle
 +isn't used for upload, this buffer will not be allocated at all.
 +.SH DEFAULT
 +64 kB
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
 +  curl_easy_setopt(curl, CURLOPT_URL, "sftp://example.com/foo.bin";);
 +
 +  /* ask libcurl to allocate a larger upload buffer */
 +  curl_easy_setopt(curl, CURLOPT_UPLOAD_BUFFERSIZE, 120000L);
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Added in 7.62.0.
 +.SH RETURN VALUE
 +Returns CURLE_OK if the option is supported, and CURLE_UNKNOWN_OPTION if not.
 +.SH "SEE ALSO"
 +.BR CURLOPT_BUFFERSIZE "(3), " CURLOPT_READFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_URL.3
index 580438d3a,000000000..053adaefe
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_URL.3
+++ b/docs/libcurl/opts/GNURLOPT_URL.3
@@@ -1,360 -1,0 +1,359 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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:password@www.example.com
 +
 +ftp://user:password@ftp.example.com
 +
 +smb://domain%2fuser:password@server.example.com
 +
 +imap://user:password;options@mail.example.com
 +
 +pop3://user:password;options@mail.example.com
 +
 +smtp://user:password;options@mail.example.com
 +
 +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:password@ftp.example.com/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:password@ftp.example.com//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:password@mail.example.com - This lists the available messages for
 +the user
 +
 +pop3://user:password@mail.example.com/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:password@mail.example.com - Performs a top level folder list
 +
 +imap://user:password@mail.example.com/INBOX - Performs a folder list on the
 +user's inbox
 +
 +imap://user:password@mail.example.com/INBOX/;UID=1 - Selects the user's inbox
 +and fetches message with uid = 1
 +
 +imap://user:password@mail.example.com/INBOX/;MAILINDEX=1 - Selects the user's 
inbox
 +and fetches the first message in the mail box
 +
 +imap://user:password@mail.example.com/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:password@mail.example.com/INBOX/;UID=3/;SECTION=TEXT - Selects the
 +user's inbox and fetches the text portion of message 3
 +
 +imap://user:password@mail.example.com/INBOX/;UID=4/;PARTIAL=0.1024 - Selects
 +the user's inbox and fetches the first 1024 octets of message 4
 +
 +imap://user:password@mail.example.com/INBOX?NEW - Selects the user's inbox and
 +checks for NEW messages
 +
 +imap://user:password@mail.example.com/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
++The path part of an SCP URL specifies the path and file to retrieve or
++upload. 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://user@example.com/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.
++The path part of an SFTP URL specifies the file to retrieve or upload. 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:password@example.com/etc/issue - This specifies the file
 +/etc/issue
 +
 +sftp://user@example.com/~/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_setopt(curl, CURLOPT_URL, "https://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 5b28bb322,000000000..13777f309
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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_URL, "https://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_USERNAME.3
index b4f36423c,000000000..b79f9eccb
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_USERNAME.3
+++ b/docs/libcurl/opts/GNURLOPT_USERNAME.3
@@@ -1,85 -1,0 +1,85 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_USERNAME 3 "19 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_USERNAME \- user name to use in authentication
 +.SH SYNOPSIS
 +.nf
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERNAME,
 +                          char *username);
 +.SH DESCRIPTION
 +Pass a char * as parameter, which should be pointing to the null-terminated
 +user name to use for the transfer.
 +
 +\fICURLOPT_USERNAME(3)\fP sets the user name to be used in protocol
 +authentication. You should not use this option together with the (older)
 +\fICURLOPT_USERPWD(3)\fP option.
 +
 +When using Kerberos V5 authentication with a Windows based server, you should
 +include the domain name in order for the server to successfully obtain a
 +Kerberos Ticket. If you don't then the initial part of the authentication
 +handshake may fail.
 +
 +When using NTLM, the user name can be specified simply as the user name
 +without the domain name should the server be part of a single domain and
 +forest.
 +
 +To include the domain name use either Down-Level Logon Name or UPN (User
 +Principal Name) formats. For example, EXAMPLE\\user and user@example.com
 +respectively.
 +
 +Some HTTP servers (on Windows) support inclusion of the domain for Basic
 +authentication as well.
 +
 +To specify the password and login options, along with the user name, use the
 +\fICURLOPT_PASSWORD(3)\fP and \fICURLOPT_LOGIN_OPTIONS(3)\fP options.
 +
 +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_URL, "https://example.com/foo.bin";);
 +
 +  curl_easy_setopt(curl, CURLOPT_USERNAME, "clark");
 +
 +  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_PASSWORD "(3), "
 +.BR CURLOPT_HTTPAUTH "(3), " CURLOPT_PROXYAUTH "(3)"
diff --cc docs/libcurl/opts/GNURLOPT_USERPWD.3
index 0fd4d394f,000000000..c8f95329b
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_USERPWD.3
+++ b/docs/libcurl/opts/GNURLOPT_USERPWD.3
@@@ -1,91 -1,0 +1,91 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_USERPWD 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_USERPWD \- user name and password to use in authentication
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_USERPWD, char *userpwd);
 +.SH DESCRIPTION
 +Pass a char * as parameter, pointing to a null-terminated login details string
 +for the connection. The format of which is: [user name]:[password].
 +
 +When using Kerberos V5 authentication with a Windows based server, you should
 +specify the user name part with the domain name in order for the server to
 +successfully obtain a Kerberos Ticket. If you don't then the initial part of
 +the authentication handshake may fail.
 +
 +When using NTLM, the user name can be specified simply as the user name
 +without the domain name should the server be part of a single domain and
 +forest.
 +
 +To specify the domain name use either Down-Level Logon Name or UPN (User
 +Principal Name) formats. For example, EXAMPLE\\user and user@example.com
 +respectively.
 +
 +Some HTTP servers (on Windows) support inclusion of the domain for Basic
 +authentication as well.
 +
 +When using HTTP and \fICURLOPT_FOLLOWLOCATION(3)\fP, libcurl might perform
 +several requests to possibly different hosts. libcurl will only send this user
 +and password information to hosts using the initial host name (unless
 +\fICURLOPT_UNRESTRICTED_AUTH(3)\fP is set), so if libcurl follows locations to
 +other hosts it will not send the user and password to those. This is enforced
 +to prevent accidental information leakage.
 +
 +Use \fICURLOPT_HTTPAUTH(3)\fP to specify the authentication method for HTTP
 +based connections or \fICURLOPT_LOGIN_OPTIONS(3)\fP to control IMAP, POP3 and
 +SMTP options.
 +
 +The user and password strings are not URL decoded, so there's no way to send
 +in a user name containing a colon using this option. Use
 +\fICURLOPT_USERNAME(3)\fP for that, or include it in the URL.
 +
 +The application does not have to keep the string around after setting this
 +option.
 +.SH DEFAULT
 +NULL
 +.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_URL, "https://example.com/foo.bin";);
 +
 +  curl_easy_setopt(curl, CURLOPT_USERPWD, "clark:kent");
 +
 +  ret = curl_easy_perform(curl);
 +
 +  curl_easy_cleanup(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK on success or
 +CURLE_OUT_OF_MEMORY if there was insufficient heap space.
 +.SH "SEE ALSO"
 +.BR CURLOPT_USERNAME "(3), " CURLOPT_PASSWORD "(3), "
 +.BR CURLOPT_PROXYUSERPWD "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_USE_SSL.3
index ee1f1c7e2,000000000..b39e6f53b
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_VERBOSE.3
index c2d6523c4,000000000..e490be032
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_VERBOSE.3
+++ b/docs/libcurl/opts/GNURLOPT_VERBOSE.3
@@@ -1,64 -1,0 +1,64 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_VERBOSE 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_VERBOSE \- set verbose mode on/off
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_VERBOSE, long onoff);
 +.SH DESCRIPTION
 +Set the \fIonoff\fP parameter to 1 to make the library display a lot of
 +verbose information about its operations on this \fIhandle\fP. Very useful for
 +libcurl and/or protocol debugging and understanding. The verbose information
 +will be sent to stderr, or the stream set with \fICURLOPT_STDERR(3)\fP.
 +
 +You hardly ever want this set in production use, you will almost always want
 +this when you debug/report problems.
 +
 +To also get all the protocol data sent and received, consider using the
 +\fICURLOPT_DEBUGFUNCTION(3)\fP.
 +.SH DEFAULT
 +0, meaning disabled.
 +.SH PROTOCOLS
 +All
 +.SH EXAMPLE
 +.nf
 +CURL *curl = curl_easy_init();
 +if(curl) {
-   curl_easy_setopt(curl, CURLOPT_URL, "http://example.com";);
++  curl_easy_setopt(curl, CURLOPT_URL, "https://example.com";);
 +
 +  /* ask libcurl to show us the verbose output */
 +  curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
 +
 +  /* Perform the request */
 +  curl_easy_perform(curl);
 +}
 +.fi
 +.SH AVAILABILITY
 +Always
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_STDERR "(3), " CURLOPT_DEBUGFUNCTION "(3), "
 +.BR CURLOPT_ERRORBUFFER "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_WILDCARDMATCH.3
index 8f15cd29d,000000000..2ec166de8
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_WILDCARDMATCH.3
+++ b/docs/libcurl/opts/GNURLOPT_WILDCARDMATCH.3
@@@ -1,87 -1,0 +1,87 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2018, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_WILDCARDMATCH 3 "16 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_WILDCARDMATCH \- enable directory wildcard transfers
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_WILDCARDMATCH, long onoff);
 +.SH DESCRIPTION
 +Set \fIonoff\fP to 1 if you want to transfer multiple files according to a
 +file name pattern. The pattern can be specified as part of the
 +\fICURLOPT_URL(3)\fP option, using an fnmatch-like pattern (Shell Pattern
 +Matching) in the last part of URL (file name).
 +
 +By default, libcurl uses its internal wildcard matching implementation. You
 +can provide your own matching function by the
 +\fICURLOPT_FNMATCH_FUNCTION(3)\fP option.
 +
 +A brief introduction of its syntax follows:
 +.RS
 +.IP "* - ASTERISK"
 +\&ftp://example.com/some/path/\fB*.txt\fP (for all txt's from the root
 +directory). Only two asterisks are allowed within the same pattern string.
 +.RE
 +.RS
 +.IP "? - QUESTION MARK"
 +Question mark matches any (exactly one) character.
 +
 +\&ftp://example.com/some/path/\fBphoto?.jpeg\fP
 +.RE
 +.RS
 +.IP "[ - BRACKET EXPRESSION"
 +The left bracket opens a bracket expression. The question mark and asterisk 
have
 +no special meaning in a bracket expression. Each bracket expression ends by 
the
 +right bracket and matches exactly one character. Some examples follow:
 +
 +\fB[a-zA-Z0\-9]\fP or \fB[f\-gF\-G]\fP \- character interval
 +
 +\fB[abc]\fP - character enumeration
 +
 +\fB[^abc]\fP or \fB[!abc]\fP - negation
 +
 +\fB[[:\fP\fIname\fP\fB:]]\fP class expression. Supported classes are
 +\fBalnum\fP,\fBlower\fP, \fBspace\fP, \fBalpha\fP, \fBdigit\fP, \fBprint\fP,
 +\fBupper\fP, \fBblank\fP, \fBgraph\fP, \fBxdigit\fP.
 +
 +\fB[][-!^]\fP - special case \- matches only '\-', ']', '[', '!' or '^'. These
 +characters have no special purpose.
 +
 +\fB[\\[\\]\\\\]\fP - escape syntax. Matches '[', ']' or '\\'.
 +
 +Using the rules above, a file name pattern can be constructed:
 +
 +\&ftp://example.com/some/path/\fB[a-z[:upper:]\\\\].jpeg\fP
 +.RE
 +.PP
 +.SH PROTOCOLS
 +This feature is only supported for FTP download.
 +.SH EXAMPLE
- See https://curl.haxx.se/libcurl/c/ftp-wildcard.html
++See https://curl.se/libcurl/c/ftp-wildcard.html
 +.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_FNMATCH_FUNCTION "(3), " CURLOPT_URL "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_WRITEDATA.3
index f875f40ee,000000000..55c69a0f5
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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
++https://curl.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 ba10cde52,000000000..48e7330e4
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_WRITEFUNCTION.3
+++ b/docs/libcurl/opts/GNURLOPT_WRITEFUNCTION.3
@@@ -1,112 -1,0 +1,115 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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.
++
++This option doesn't enable HSTS, you need to use \fICURLOPT_HSTS_CTRL(3)\fP to
++do that.
 +.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
- .NF
++.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
++.fi
 +.SH "SEE ALSO"
 +.BR CURLOPT_WRITEDATA "(3), " CURLOPT_READFUNCTION "(3), "
 +.BR CURLOPT_HEADERFUNCTION "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_XFERINFODATA.3
index e09b9599d,000000000..f27e944cd
mode 100644,000000..100644
--- a/docs/libcurl/opts/GNURLOPT_XFERINFODATA.3
+++ b/docs/libcurl/opts/GNURLOPT_XFERINFODATA.3
@@@ -1,46 -1,0 +1,46 @@@
 +.\" **************************************************************************
 +.\" *                                  _   _ ____  _
 +.\" *  Project                     ___| | | |  _ \| |
 +.\" *                             / __| | | | |_) | |
 +.\" *                            | (__| |_| |  _ <| |___
 +.\" *                             \___|\___/|_| \_\_____|
 +.\" *
 +.\" * Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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_XFERINFODATA 3 "17 Jun 2014" "libcurl 7.37.0" "curl_easy_setopt 
options"
 +.SH NAME
 +CURLOPT_XFERINFODATA \- custom pointer passed to the progress callback
 +.SH SYNOPSIS
 +#include <gnurl/curl.h>
 +
 +CURLcode curl_easy_setopt(CURL *handle, CURLOPT_XFERINFODATA, 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_XFERINFOFUNCTION(3)\fP.
 +
 +This is an alias for \fICURLOPT_PROGRESSDATA(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
++https://curl.se/libcurl/c/progressfunc.html
 +.SH AVAILABILITY
 +Added in 7.32.0
 +.SH RETURN VALUE
 +Returns CURLE_OK
 +.SH "SEE ALSO"
 +.BR CURLOPT_XFERINFOFUNCTION "(3), " CURLOPT_VERBOSE "(3), "
diff --cc docs/libcurl/opts/GNURLOPT_XFERINFOFUNCTION.3
index 777732b21,000000000..99cf02d50
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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
++https://curl.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 d77dfa167,000000000..8f0b3a7fd
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 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++.\" * are also available at https://curl.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 null-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 docs/mk-ca-bundle.1
index d491cb914,3502ade8d..94f752d12
--- a/docs/mk-ca-bundle.1
+++ b/docs/mk-ca-bundle.1
@@@ -103,51 -78,42 +103,51 @@@ ALL, DIGITAL_SIGNATURE, NON_REPUDIATION
  DATA_ENCIPHERMENT, KEY_AGREEMENT, KEY_CERT_SIGN, CRL_SIGN,
  SERVER_AUTH (default), CLIENT_AUTH, CODE_SIGNING, EMAIL_PROTECTION,
  IPSEC_END_SYSTEM, IPSEC_TUNNEL, IPSEC_USER, TIME_STAMPING, STEP_UP_APPROVED
 -.RE
 -.IP
 +.Ed
 +.sp
  Valid trust levels are:
 -.RS
 +.Bd -literal -offset indent -compact
  ALL, TRUSTED_DELEGATOR (default), NOT_TRUSTED, MUST_VERIFY_TRUST, TRUSTED
 -.RE
 -.IP -q
 +.Ed
 +.sp
 +.It Fl q
  be really quiet (no progress output at all)
 -.IP -t
 +.It Fl t
  include plain text listing of certificates
 -.IP "-s [algorithms]"
 +.It Fl s\ [algorithms]
  comma separated list of signature algorithms with which to hash/fingerprint
  each certificate and output when run in plain text mode.
 -
 +.sp
  (Added in version 1.21, Perl only)
 -
 +.sp
  Valid algorithms are:
 -.RS
 +.Bd -literal -offset indent -compact
  ALL, NONE, MD5 (default), SHA1, SHA256, SHA384, SHA512
 -.RE
 -.IP -u
 +.Ed
 +.It Fl u
  unlink (remove) certdata.txt after processing
 -.IP -v
 +.It Fl v
  be verbose and print out processed CAs
 -.SH EXIT STATUS
 -Returns 0 on success. Returns 1 if it fails to download data.
 -.SH CERTDATA FORMAT
 +.El
 +.Sh EXIT STATUS
 +Returns 0 on success.
 +Returns 1 if it fails to download data.
 +.Sh AUTHORS
 +This manual page was initially written by
 +.An Jan Schaumann Aq Mt jschauma@netmeister.org
 +and converted to mdoc format by
- .An Nils Gillmann Aq Mt ng0@n0.is .
++.An Nikita Gillmann Aq Mt nikita@n0.is .
 +.Sh SEE ALSO
 +.Xr curl 1
 +.Sh STANDARDS
  The file format used by Mozilla for this trust information seems to be 
documented here:
 -.nf
 
-https://p11-glue.freedesktop.org/doc/storing-trust-policy/storing-trust-existing.html
 -.fi
 -.SH SEE ALSO
 -.BR curl (1)
 -.SH HISTORY
 -\fBmk-ca-bundle\fP is a command line tool that is shipped as part of every
 -curl and libcurl release (see https://curl.se/). It was originally based
 +.Lk 
https://p11-glue.freedesktop.org/doc/storing-trust-policy/storing-trust-existing.html
 +.Sh HISTORY
 +.Nm
 +is a command line tool that is shipped as part of every
 +curl and libcurl release (see
- .Lk https://curl.haxx.se/
++.Lk https://curl.se/
 +).
 +It was originally based
  on the parse-certs script written by Roland Krikava and was later much
 -improved by Guenter Knauf.  This manual page was initially written by Jan
 -Schaumann \&<jschauma@netmeister.org>.
 +improved by Guenter Knauf.
diff --cc gnurl-config.in
index e5621da20,000000000..bec64b892
mode 100644,000000..100644
--- a/gnurl-config.in
+++ b/gnurl-config.in
@@@ -1,194 -1,0 +1,194 @@@
 +#! /bin/sh
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2001 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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=@prefix@
 +exec_prefix=@exec_prefix@
 +includedir=@includedir@
 +cppflag_gnurl_staticlib=@CPPFLAG_CURL_STATICLIB@
 +
 +usage()
 +{
 +    cat <<EOF
 +Usage: gnurl-config [OPTION]
 +
 +Available values for OPTION include:
 +
 +  --built-shared says 'yes' if libgnurl was built shared
 +  --ca        ca bundle install path
 +  --cc        compiler
 +  --cflags    pre-processor and compiler flags
 +  --checkfor [version] check for (lib)gnurl of the specified version
 +  --configure the arguments given to configure when building gnurl
 +  --features  newline separated list of enabled features
 +  --help      display this help and exit
 +  --libs      library linking information
 +  --prefix    gnurl install prefix
 +  --protocols newline separated list of enabled protocols
 +  --ssl-backends output the SSL backends libcurl was built to support
 +  --static-libs static libgnurl library linking information
 +  --version   output version information
 +  --vernum    output the version information as a number (hexadecimal)
 +EOF
 +
 +    exit $1
 +}
 +
 +if test $# -eq 0; then
 +    usage 1
 +fi
 +
 +while test $# -gt 0; do
 +    case "$1" in
 +    # this deals with options in the style
 +    # --option=value and extracts the value part
 +    # [not currently used]
 +    -*=*) value=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
 +    *) value= ;;
 +    esac
 +
 +    case "$1" in
 +    --built-shared)
 +        echo @ENABLE_SHARED@
 +        ;;
 +
 +    --ca)
 +        echo @CURL_CA_BUNDLE@
 +        ;;
 +
 +    --cc)
 +        echo "@CC@"
 +        ;;
 +
 +    --prefix)
 +        echo "$prefix"
 +        ;;
 +
 +    --feature|--features)
 +        for feature in @SUPPORT_FEATURES@ ""; do
 +            test -n "$feature" && echo "$feature"
 +        done
 +        ;;
 +
 +    --protocols)
 +        for protocol in @SUPPORT_PROTOCOLS@; do
 +            echo "$protocol"
 +        done
 +        ;;
 +
 +    --version)
 +        echo libgnurl @CURLVERSION@
 +        exit 0
 +        ;;
 +
 +    --checkfor)
 +        checkfor=$2
 +        cmajor=`echo $checkfor | cut -d. -f1`
 +        cminor=`echo $checkfor | cut -d. -f2`
 +        # when extracting the patch part we strip off everything after a
 +        # dash as that's used for things like version 1.2.3-CVS
 +        cpatch=`echo $checkfor | cut -d. -f3 | cut -d- -f1`
 +
 +        vmajor=`echo @CURLVERSION@ | cut -d. -f1`
 +        vminor=`echo @CURLVERSION@ | cut -d. -f2`
 +        # when extracting the patch part we strip off everything after a
 +        # dash as that's used for things like version 1.2.3-CVS
 +        vpatch=`echo @CURLVERSION@ | cut -d. -f3 | cut -d- -f1`
 +
 +        if test "$vmajor" -gt "$cmajor"; then
 +            exit 0;
 +        fi
 +        if test "$vmajor" -eq "$cmajor"; then
 +            if test "$vminor" -gt "$cminor"; then
 +                exit 0
 +            fi
 +            if test "$vminor" -eq "$cminor"; then
 +                if test "$cpatch" -le "$vpatch"; then
 +                    exit 0
 +                fi
 +            fi
 +        fi
 +
 +        echo "requested version $checkfor is newer than existing 
@CURLVERSION@"
 +        exit 1
 +        ;;
 +
 +    --vernum)
 +        echo @VERSIONNUM@
 +        exit 0
 +        ;;
 +
 +    --help)
 +        usage 0
 +        ;;
 +
 +    --cflags)
 +        if test "X$cppflag_gnurl_staticlib" = "X-DCURL_STATICLIB"; then
 +          CPPFLAG_CURL_STATICLIB="-DCURL_STATICLIB "
 +        else
 +          CPPFLAG_CURL_STATICLIB=""
 +        fi
 +        if test "X@includedir@" = "X/usr/include"; then
 +          echo "$CPPFLAG_CURL_STATICLIB"
 +        else
 +          echo "${CPPFLAG_CURL_STATICLIB}-I@includedir@"
 +        fi
 +        ;;
 +
 +    --libs)
 +        if test "X@libdir@" != "X/usr/lib" -a "X@libdir@" != "X/usr/lib64"; 
then
 +           CURLLIBDIR="-L@libdir@ "
 +        else
 +           CURLLIBDIR=""
 +        fi
 +        if test "X@ENABLE_SHARED@" = "Xno" -o "X@REQUIRE_LIB_DEPS@" = "Xyes"; 
then
 +          echo @LDFLAGS@ ${CURLLIBDIR}-lgnurl @LIBCURL_LIBS@
 +        else
 +          echo @LDFLAGS@ ${CURLLIBDIR}-lgnurl
 +        fi
 +        ;;
 +    --ssl-backends)
 +        echo "@SSL_BACKENDS@"
 +        ;;
 +
 +    --static-libs)
 +        if test "X@ENABLE_STATIC@" != "Xno" ; then
 +          echo @libdir@/libgnurl.@libext@ @LDFLAGS@ @LIBCURL_LIBS@
 +        else
 +          echo "gnurl was built with static libraries disabled" >&2
 +          exit 1
 +        fi
 +        ;;
 +
 +    --configure)
 +        echo @CONFIGURE_OPTIONS@
 +        ;;
 +
 +    *)
 +        echo "unknown option: $1"
 +        usage 1
 +        ;;
 +    esac
 +    shift
 +done
 +
 +exit 0
diff --cc include/Makefile.am
index 1f722ddda,a334fdcae..01e795828
--- a/include/Makefile.am
+++ b/include/Makefile.am
@@@ -19,8 -19,8 +19,8 @@@
  # KIND, either express or implied.
  #
  ###########################################################################
 -SUBDIRS = curl
 +SUBDIRS = gnurl
  
- EXTRA_DIST = README
+ EXTRA_DIST = README.md
  
  AUTOMAKE_OPTIONS = foreign no-dependencies
diff --cc include/gnurl/Makefile.am
index b8298f29b,000000000..387a14461
mode 100644,000000..100644
--- a/include/gnurl/Makefile.am
+++ b/include/gnurl/Makefile.am
@@@ -1,39 -1,0 +1,39 @@@
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
- # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +pkginclude_HEADERS = \
 +  curl.h curlver.h easy.h mprintf.h stdcheaders.h multi.h \
-   typecheck-gcc.h system.h urlapi.h
++  typecheck-gcc.h system.h urlapi.h options.h
 +
 +pkgincludedir= $(includedir)/gnurl
 +
 +CHECKSRC = $(CS_$(V))
 +CS_0 = @echo "  RUN     " $@;
 +CS_1 =
 +CS_ = $(CS_0)
 +
 +checksrc:
 +      $(CHECKSRC)@PERL@ $(top_srcdir)/lib/checksrc.pl 
-D$(top_srcdir)/include/gnurl $(pkginclude_HEADERS)
 +
 +if CURLDEBUG
 +# for debug builds, we scan the sources on all regular make invokes
 +all-local: checksrc
 +endif
diff --cc include/gnurl/multi.h
index 4ea8b267c,000000000..87d74144a
mode 100644,000000..100644
--- a/include/gnurl/multi.h
+++ b/include/gnurl/multi.h
@@@ -1,456 -1,0 +1,456 @@@
 +#ifndef CURLINC_MULTI_H
 +#define CURLINC_MULTI_H
 +/***************************************************************************
 + *                                  _   _ ____  _
 + *  Project                     ___| | | |  _ \| |
 + *                             / __| | | | |_) | |
 + *                            | (__| |_| |  _ <| |___
 + *                             \___|\___/|_| \_\_____|
 + *
 + * Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++ * are also available at https://curl.se/docs/copyright.html.
 + *
 + * You may opt to use, copy, modify, merge, publish, distribute and/or sell
 + * copies of the Software, and permit persons to whom the Software is
 + * furnished to do so, under the terms of the COPYING file.
 + *
 + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 + * KIND, either express or implied.
 + *
 + ***************************************************************************/
 +/*
 +  This is an "external" header file. Don't give away any internals here!
 +
 +  GOALS
 +
 +  o Enable a "pull" interface. The application that uses libcurl decides where
 +    and when to ask libcurl to get/send data.
 +
 +  o Enable multiple simultaneous transfers in the same thread without making 
it
 +    complicated for the application.
 +
 +  o Enable the application to select() on its own file descriptors and curl's
 +    file descriptors simultaneous easily.
 +
 +*/
 +
 +/*
 + * This header file should not really need to include "curl.h" since curl.h
 + * itself includes this file and we expect user applications to do #include
 + * <gnurl/curl.h> without the need for especially including multi.h.
 + *
 + * For some reason we added this include here at one point, and rather than to
 + * break existing (wrongly written) libcurl applications, we leave it as-is
 + * but with this warning attached.
 + */
 +#include "curl.h"
 +
 +#ifdef  __cplusplus
 +extern "C" {
 +#endif
 +
 +#if defined(BUILDING_LIBCURL) || defined(CURL_STRICTER)
 +typedef struct Curl_multi CURLM;
 +#else
 +typedef void CURLM;
 +#endif
 +
 +typedef enum {
 +  CURLM_CALL_MULTI_PERFORM = -1, /* please call curl_multi_perform() or
 +                                    curl_multi_socket*() soon */
 +  CURLM_OK,
 +  CURLM_BAD_HANDLE,      /* the passed-in handle is not a valid CURLM handle 
*/
 +  CURLM_BAD_EASY_HANDLE, /* an easy handle was not good/valid */
 +  CURLM_OUT_OF_MEMORY,   /* if you ever get this, you're in deep sh*t */
 +  CURLM_INTERNAL_ERROR,  /* this is a libcurl bug */
 +  CURLM_BAD_SOCKET,      /* the passed in socket argument did not match */
 +  CURLM_UNKNOWN_OPTION,  /* curl_multi_setopt() with unsupported option */
 +  CURLM_ADDED_ALREADY,   /* an easy handle already added to a multi handle was
 +                            attempted to get added - again */
 +  CURLM_RECURSIVE_API_CALL, /* an api function was called from inside a
 +                               callback */
 +  CURLM_WAKEUP_FAILURE,  /* wakeup is unavailable or failed */
 +  CURLM_BAD_FUNCTION_ARGUMENT,  /* function called with a bad parameter */
 +  CURLM_LAST
 +} CURLMcode;
 +
 +/* just to make code nicer when using curl_multi_socket() you can now check
 +   for CURLM_CALL_MULTI_SOCKET too in the same style it works for
 +   curl_multi_perform() and CURLM_CALL_MULTI_PERFORM */
 +#define CURLM_CALL_MULTI_SOCKET CURLM_CALL_MULTI_PERFORM
 +
 +/* bitmask bits for CURLMOPT_PIPELINING */
 +#define CURLPIPE_NOTHING   0L
 +#define CURLPIPE_HTTP1     1L
 +#define CURLPIPE_MULTIPLEX 2L
 +
 +typedef enum {
 +  CURLMSG_NONE, /* first, not used */
 +  CURLMSG_DONE, /* This easy handle has completed. 'result' contains
 +                   the CURLcode of the transfer */
 +  CURLMSG_LAST /* last, not used */
 +} CURLMSG;
 +
 +struct CURLMsg {
 +  CURLMSG msg;       /* what this message means */
 +  CURL *easy_handle; /* the handle it concerns */
 +  union {
 +    void *whatever;    /* message-specific data */
 +    CURLcode result;   /* return code for transfer */
 +  } data;
 +};
 +typedef struct CURLMsg CURLMsg;
 +
 +/* Based on poll(2) structure and values.
 + * We don't use pollfd and POLL* constants explicitly
 + * to cover platforms without poll(). */
 +#define CURL_WAIT_POLLIN    0x0001
 +#define CURL_WAIT_POLLPRI   0x0002
 +#define CURL_WAIT_POLLOUT   0x0004
 +
 +struct curl_waitfd {
 +  curl_socket_t fd;
 +  short events;
 +  short revents; /* not supported yet */
 +};
 +
 +/*
 + * Name:    curl_multi_init()
 + *
 + * Desc:    inititalize multi-style curl usage
 + *
 + * Returns: a new CURLM handle to use in all 'curl_multi' functions.
 + */
 +CURL_EXTERN CURLM *curl_multi_init(void);
 +
 +/*
 + * Name:    curl_multi_add_handle()
 + *
 + * Desc:    add a standard curl handle to the multi stack
 + *
 + * Returns: CURLMcode type, general multi error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_add_handle(CURLM *multi_handle,
 +                                            CURL *curl_handle);
 +
 + /*
 +  * Name:    curl_multi_remove_handle()
 +  *
 +  * Desc:    removes a curl handle from the multi stack again
 +  *
 +  * Returns: CURLMcode type, general multi error code.
 +  */
 +CURL_EXTERN CURLMcode curl_multi_remove_handle(CURLM *multi_handle,
 +                                               CURL *curl_handle);
 +
 + /*
 +  * Name:    curl_multi_fdset()
 +  *
 +  * Desc:    Ask curl for its fd_set sets. The app can use these to select() 
or
 +  *          poll() on. We want curl_multi_perform() called as soon as one of
 +  *          them are ready.
 +  *
 +  * Returns: CURLMcode type, general multi error code.
 +  */
 +CURL_EXTERN CURLMcode curl_multi_fdset(CURLM *multi_handle,
 +                                       fd_set *read_fd_set,
 +                                       fd_set *write_fd_set,
 +                                       fd_set *exc_fd_set,
 +                                       int *max_fd);
 +
 +/*
 + * Name:     curl_multi_wait()
 + *
 + * Desc:     Poll on all fds within a CURLM set as well as any
 + *           additional fds passed to the function.
 + *
 + * Returns:  CURLMcode type, general multi error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_wait(CURLM *multi_handle,
 +                                      struct curl_waitfd extra_fds[],
 +                                      unsigned int extra_nfds,
 +                                      int timeout_ms,
 +                                      int *ret);
 +
 +/*
 + * Name:     curl_multi_poll()
 + *
 + * Desc:     Poll on all fds within a CURLM set as well as any
 + *           additional fds passed to the function.
 + *
 + * Returns:  CURLMcode type, general multi error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_poll(CURLM *multi_handle,
 +                                      struct curl_waitfd extra_fds[],
 +                                      unsigned int extra_nfds,
 +                                      int timeout_ms,
 +                                      int *ret);
 +
 +/*
 + * Name:     curl_multi_wakeup()
 + *
 + * Desc:     wakes up a sleeping curl_multi_poll call.
 + *
 + * Returns:  CURLMcode type, general multi error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_wakeup(CURLM *multi_handle);
 +
 + /*
 +  * Name:    curl_multi_perform()
 +  *
 +  * Desc:    When the app thinks there's data available for curl it calls this
 +  *          function to read/write whatever there is right now. This returns
 +  *          as soon as the reads and writes are done. This function does not
 +  *          require that there actually is data available for reading or that
 +  *          data can be written, it can be called just in case. It returns
 +  *          the number of handles that still transfer data in the second
 +  *          argument's integer-pointer.
 +  *
 +  * Returns: CURLMcode type, general multi error code. *NOTE* that this only
 +  *          returns errors etc regarding the whole multi stack. There might
 +  *          still have occurred problems on individual transfers even when
 +  *          this returns OK.
 +  */
 +CURL_EXTERN CURLMcode curl_multi_perform(CURLM *multi_handle,
 +                                         int *running_handles);
 +
 + /*
 +  * Name:    curl_multi_cleanup()
 +  *
 +  * Desc:    Cleans up and removes a whole multi stack. It does not free or
 +  *          touch any individual easy handles in any way. We need to define
 +  *          in what state those handles will be if this function is called
 +  *          in the middle of a transfer.
 +  *
 +  * Returns: CURLMcode type, general multi error code.
 +  */
 +CURL_EXTERN CURLMcode curl_multi_cleanup(CURLM *multi_handle);
 +
 +/*
 + * Name:    curl_multi_info_read()
 + *
 + * Desc:    Ask the multi handle if there's any messages/informationals from
 + *          the individual transfers. Messages include informationals such as
 + *          error code from the transfer or just the fact that a transfer is
 + *          completed. More details on these should be written down as well.
 + *
 + *          Repeated calls to this function will return a new struct each
 + *          time, until a special "end of msgs" struct is returned as a signal
 + *          that there is no more to get at this point.
 + *
 + *          The data the returned pointer points to will not survive calling
 + *          curl_multi_cleanup().
 + *
 + *          The 'CURLMsg' struct is meant to be very simple and only contain
 + *          very basic information. If more involved information is wanted,
 + *          we will provide the particular "transfer handle" in that struct
 + *          and that should/could/would be used in subsequent
 + *          curl_easy_getinfo() calls (or similar). The point being that we
 + *          must never expose complex structs to applications, as then we'll
 + *          undoubtably get backwards compatibility problems in the future.
 + *
 + * Returns: A pointer to a filled-in struct, or NULL if it failed or ran out
 + *          of structs. It also writes the number of messages left in the
 + *          queue (after this read) in the integer the second argument points
 + *          to.
 + */
 +CURL_EXTERN CURLMsg *curl_multi_info_read(CURLM *multi_handle,
 +                                          int *msgs_in_queue);
 +
 +/*
 + * Name:    curl_multi_strerror()
 + *
 + * Desc:    The curl_multi_strerror function may be used to turn a CURLMcode
 + *          value into the equivalent human readable error string.  This is
 + *          useful for printing meaningful error messages.
 + *
 + * Returns: A pointer to a null-terminated error message.
 + */
 +CURL_EXTERN const char *curl_multi_strerror(CURLMcode);
 +
 +/*
 + * Name:    curl_multi_socket() and
 + *          curl_multi_socket_all()
 + *
 + * Desc:    An alternative version of curl_multi_perform() that allows the
 + *          application to pass in one of the file descriptors that have been
 + *          detected to have "action" on them and let libcurl perform.
 + *          See man page for details.
 + */
 +#define CURL_POLL_NONE   0
 +#define CURL_POLL_IN     1
 +#define CURL_POLL_OUT    2
 +#define CURL_POLL_INOUT  3
 +#define CURL_POLL_REMOVE 4
 +
 +#define CURL_SOCKET_TIMEOUT CURL_SOCKET_BAD
 +
 +#define CURL_CSELECT_IN   0x01
 +#define CURL_CSELECT_OUT  0x02
 +#define CURL_CSELECT_ERR  0x04
 +
 +typedef int (*curl_socket_callback)(CURL *easy,      /* easy handle */
 +                                    curl_socket_t s, /* socket */
 +                                    int what,        /* see above */
 +                                    void *userp,     /* private callback
 +                                                        pointer */
 +                                    void *socketp);  /* private socket
 +                                                        pointer */
 +/*
 + * Name:    curl_multi_timer_callback
 + *
 + * Desc:    Called by libcurl whenever the library detects a change in the
 + *          maximum number of milliseconds the app is allowed to wait before
 + *          curl_multi_socket() or curl_multi_perform() must be called
 + *          (to allow libcurl's timed events to take place).
 + *
 + * Returns: The callback should return zero.
 + */
 +typedef int (*curl_multi_timer_callback)(CURLM *multi,    /* multi handle */
 +                                         long timeout_ms, /* see above */
 +                                         void *userp);    /* private callback
 +                                                             pointer */
 +
 +CURL_EXTERN CURLMcode curl_multi_socket(CURLM *multi_handle, curl_socket_t s,
 +                                        int *running_handles);
 +
 +CURL_EXTERN CURLMcode curl_multi_socket_action(CURLM *multi_handle,
 +                                               curl_socket_t s,
 +                                               int ev_bitmask,
 +                                               int *running_handles);
 +
 +CURL_EXTERN CURLMcode curl_multi_socket_all(CURLM *multi_handle,
 +                                            int *running_handles);
 +
 +#ifndef CURL_ALLOW_OLD_MULTI_SOCKET
 +/* This macro below was added in 7.16.3 to push users who recompile to use
 +   the new curl_multi_socket_action() instead of the old curl_multi_socket()
 +*/
 +#define curl_multi_socket(x,y,z) curl_multi_socket_action(x,y,0,z)
 +#endif
 +
 +/*
 + * Name:    curl_multi_timeout()
 + *
 + * Desc:    Returns the maximum number of milliseconds the app is allowed to
 + *          wait before curl_multi_socket() or curl_multi_perform() must be
 + *          called (to allow libcurl's timed events to take place).
 + *
 + * Returns: CURLM error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_timeout(CURLM *multi_handle,
 +                                         long *milliseconds);
 +
 +typedef enum {
 +  /* This is the socket callback function pointer */
 +  CURLOPT(CURLMOPT_SOCKETFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 1),
 +
 +  /* This is the argument passed to the socket callback */
 +  CURLOPT(CURLMOPT_SOCKETDATA, CURLOPTTYPE_OBJECTPOINT, 2),
 +
 +    /* set to 1 to enable pipelining for this multi handle */
 +  CURLOPT(CURLMOPT_PIPELINING, CURLOPTTYPE_LONG, 3),
 +
 +   /* This is the timer callback function pointer */
 +  CURLOPT(CURLMOPT_TIMERFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 4),
 +
 +  /* This is the argument passed to the timer callback */
 +  CURLOPT(CURLMOPT_TIMERDATA, CURLOPTTYPE_OBJECTPOINT, 5),
 +
 +  /* maximum number of entries in the connection cache */
 +  CURLOPT(CURLMOPT_MAXCONNECTS, CURLOPTTYPE_LONG, 6),
 +
 +  /* maximum number of (pipelining) connections to one host */
 +  CURLOPT(CURLMOPT_MAX_HOST_CONNECTIONS, CURLOPTTYPE_LONG, 7),
 +
 +  /* maximum number of requests in a pipeline */
 +  CURLOPT(CURLMOPT_MAX_PIPELINE_LENGTH, CURLOPTTYPE_LONG, 8),
 +
 +  /* a connection with a content-length longer than this
 +     will not be considered for pipelining */
 +  CURLOPT(CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 9),
 +
 +  /* a connection with a chunk length longer than this
 +     will not be considered for pipelining */
 +  CURLOPT(CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE, CURLOPTTYPE_OFF_T, 10),
 +
 +  /* a list of site names(+port) that are blocked from pipelining */
 +  CURLOPT(CURLMOPT_PIPELINING_SITE_BL, CURLOPTTYPE_OBJECTPOINT, 11),
 +
 +  /* a list of server types that are blocked from pipelining */
 +  CURLOPT(CURLMOPT_PIPELINING_SERVER_BL, CURLOPTTYPE_OBJECTPOINT, 12),
 +
 +  /* maximum number of open connections in total */
 +  CURLOPT(CURLMOPT_MAX_TOTAL_CONNECTIONS, CURLOPTTYPE_LONG, 13),
 +
 +   /* This is the server push callback function pointer */
 +  CURLOPT(CURLMOPT_PUSHFUNCTION, CURLOPTTYPE_FUNCTIONPOINT, 14),
 +
 +  /* This is the argument passed to the server push callback */
 +  CURLOPT(CURLMOPT_PUSHDATA, CURLOPTTYPE_OBJECTPOINT, 15),
 +
 +  /* maximum number of concurrent streams to support on a connection */
 +  CURLOPT(CURLMOPT_MAX_CONCURRENT_STREAMS, CURLOPTTYPE_LONG, 16),
 +
 +  CURLMOPT_LASTENTRY /* the last unused */
 +} CURLMoption;
 +
 +
 +/*
 + * Name:    curl_multi_setopt()
 + *
 + * Desc:    Sets options for the multi handle.
 + *
 + * Returns: CURLM error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_setopt(CURLM *multi_handle,
 +                                        CURLMoption option, ...);
 +
 +
 +/*
 + * Name:    curl_multi_assign()
 + *
 + * Desc:    This function sets an association in the multi handle between the
 + *          given socket and a private pointer of the application. This is
 + *          (only) useful for curl_multi_socket uses.
 + *
 + * Returns: CURLM error code.
 + */
 +CURL_EXTERN CURLMcode curl_multi_assign(CURLM *multi_handle,
 +                                        curl_socket_t sockfd, void *sockp);
 +
 +
 +/*
 + * Name: curl_push_callback
 + *
 + * Desc: This callback gets called when a new stream is being pushed by the
 + *       server. It approves or denies the new stream. It can also decide
 + *       to completely fail the connection.
 + *
 + * Returns: CURL_PUSH_OK, CURL_PUSH_DENY or CURL_PUSH_ERROROUT
 + */
 +#define CURL_PUSH_OK       0
 +#define CURL_PUSH_DENY     1
 +#define CURL_PUSH_ERROROUT 2 /* added in 7.72.0 */
 +
 +struct curl_pushheaders;  /* forward declaration only */
 +
 +CURL_EXTERN char *curl_pushheader_bynum(struct curl_pushheaders *h,
 +                                        size_t num);
 +CURL_EXTERN char *curl_pushheader_byname(struct curl_pushheaders *h,
 +                                         const char *name);
 +
 +typedef int (*curl_push_callback)(CURL *parent,
 +                                  CURL *easy,
 +                                  size_t num_headers,
 +                                  struct curl_pushheaders *headers,
 +                                  void *userp);
 +
 +#ifdef __cplusplus
 +} /* end of extern "C" */
 +#endif
 +
 +#endif
diff --cc include/gnurl/options.h
index 000000000,14373b551..14373b551
mode 000000,100644..100644
--- a/include/gnurl/options.h
+++ b/include/gnurl/options.h
diff --cc lib/Makefile.am
index ada137ffe,b51796f91..57d1ea4d5
--- 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_5 = config-os400.h setup-os400.h
 +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-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/altsvc.c
index b1c5db833,4ab77fdfc..d0aa00b80
--- a/lib/altsvc.c
+++ b/lib/altsvc.c
@@@ -25,8 -25,8 +25,8 @@@
   */
  #include "curl_setup.h"
  
- #if !defined(CURL_DISABLE_HTTP) && defined(USE_ALTSVC)
+ #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_ALTSVC)
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  #include "urldata.h"
  #include "altsvc.h"
  #include "curl_get_line.h"
diff --cc lib/altsvc.h
index cdf137aff,2ab89e705..bf368c9fa
--- a/lib/altsvc.h
+++ b/lib/altsvc.h
@@@ -23,8 -23,8 +23,8 @@@
   ***************************************************************************/
  #include "curl_setup.h"
  
- #if !defined(CURL_DISABLE_HTTP) && defined(USE_ALTSVC)
+ #if !defined(CURL_DISABLE_HTTP) && !defined(CURL_DISABLE_ALTSVC)
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  #include "llist.h"
  
  enum alpnid {
diff --cc lib/libgnurl.plist
index 33c2fdefa,000000000..ae24a69ff
mode 100644,000000..100644
--- a/lib/libgnurl.plist
+++ b/lib/libgnurl.plist
@@@ -1,35 -1,0 +1,35 @@@
 +<?xml version="1.0" encoding="UTF-8"?>
 +<!DOCTYPE plist SYSTEM 
"file://localhost/System/Library/DTDs/PropertyList.dtd">
 +<plist version="0.9">
 +<dict>
 +      <key>CFBundleInfoDictionaryVersion</key>
 +      <string>6.0</string>
 +
 +      <key>CFBundleDevelopmentRegion</key>
 +      <string>English</string>
 +
 +      <key>CFBundleExecutable</key>
 +      <string>gnurl</string>
 +
 +      <key>CFBundleIdentifier</key>
-       <string>se.haxx.curl.libcurl</string>
++      <string>se.curl.libcurl</string>
 +
 +      <key>CFBundleVersion</key>
 +      <string>7.12.3</string>
 +
 +      <key>CFBundleName</key>
 +      <string>libgnurl</string>
 +
 +      <key>CFBundlePackageType</key>
 +      <string>FMWK</string>
 +
 +      <key>CFBundleSignature</key>
 +      <string>????</string>
 +
 +      <key>CFBundleShortVersionString</key>
 +      <string>libcurl 7.12.3</string>
 +
 +      <key>CFBundleGetInfoString</key>
 +      <string>libgnurl.plist 7.12.3</string>
 +</dict>
 +</plist>
diff --cc lib/mqtt.c
index 0baffe2a7,e324ec3dd..dfcb04c88
--- a/lib/mqtt.c
+++ b/lib/mqtt.c
@@@ -23,10 -23,10 +23,10 @@@
  
  #include "curl_setup.h"
  
- #ifdef CURL_ENABLE_MQTT
+ #ifndef CURL_DISABLE_MQTT
  
  #include "urldata.h"
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  #include "transfer.h"
  #include "sendf.h"
  #include "progress.h"
diff --cc lib/sendf.c
index 8ac46db0c,04cc725f5..aefbe7bfe
--- a/lib/sendf.c
+++ b/lib/sendf.c
@@@ -28,9 -28,11 +28,11 @@@
  
  #ifdef HAVE_LINUX_TCP_H
  #include <linux/tcp.h>
+ #elif defined(HAVE_NETINET_TCP_H)
+ #include <netinet/tcp.h>
  #endif
  
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  
  #include "urldata.h"
  #include "sendf.h"
diff --cc lib/urldata.h
index 5bfa412a2,4679c9d46..1be7ddc39
--- a/lib/urldata.h
+++ b/lib/urldata.h
@@@ -207,12 -205,8 +205,9 @@@ struct ssl_backend_data
  
  /* struct for data related to each SSL connection */
  struct ssl_connect_data {
-   /* Use ssl encrypted communications TRUE/FALSE, not necessarily using it atm
-      but at least asked to or meaning to use it. See 'state' for the exact
-      current state of the connection. */
    ssl_connection_state state;
    ssl_connect_state connecting_state;
 +
  #if defined(USE_SSL)
    struct ssl_backend_data *backend;
  #endif
diff --cc libgnurl.pc.in
index c41c73026,000000000..b7ce570db
mode 100644,000000..100644
--- a/libgnurl.pc.in
+++ b/libgnurl.pc.in
@@@ -1,39 -1,0 +1,39 @@@
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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/
++URL: https://gnunet.org/en/gnurl.html
 +Description: Library to transfer files with http or https
 +Version: @CURLVERSION@
 +Libs: -L${libdir} -lgnurl @LIBCURL_NO_SHARED@
 +Libs.private: @LIBCURL_LIBS@
 +Cflags: -I${includedir} @CPPFLAG_CURL_STATICLIB@
diff --cc src/CMakeLists.txt
index 2f4f2c5b1,0982cfe6e..d2faa8fe1
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@@ -78,20 -78,26 +78,26 @@@ if(CURL_HAS_LTO
      INTERPROCEDURAL_OPTIMIZATION_RELWITHDEBINFO TRUE)
  endif()
  
+ if(ENABLE_UNICODE AND MINGW)
+   target_link_libraries(${EXE_NAME} -municode)
+   # GCC doesn't know about wmain
+   set_source_files_properties(tool_main.c PROPERTIES COMPILE_FLAGS 
"-Wno-missing-prototypes -Wno-missing-declarations")
+ endif()
+ 
 -source_group("curlX source files" FILES ${CURLX_CFILES})
 -source_group("curl source files" FILES ${CURL_CFILES})
 -source_group("curl header files" FILES ${CURL_HFILES})
 +source_group("curlX source files" FILES ${GNURLX_CFILES})
 +source_group("curl source files" FILES ${GNURL_CFILES})
 +source_group("curl header files" FILES ${GNURL_HFILES})
  
  include_directories(
 -  ${CURL_SOURCE_DIR}/lib        # To be able to reach "curl_setup_once.h"
 -  ${CURL_BINARY_DIR}/lib        # To be able to reach "curl_config.h"
 -  ${CURL_BINARY_DIR}/include    # To be able to reach "curl/curl.h"
 +  ${GNURL_SOURCE_DIR}/lib        # To be able to reach "curl_setup_once.h"
 +  ${GNURL_BINARY_DIR}/lib        # To be able to reach "curl_config.h"
 +  ${GNURL_BINARY_DIR}/include    # To be able to reach "gnurl/curl.h"
    # This is needed as tool_hugehelp.c is generated in the binary dir
 -  ${CURL_SOURCE_DIR}/src        # To be able to reach "tool_hugehelp.h"
 +  ${GNURL_SOURCE_DIR}/src        # To be able to reach "tool_hugehelp.h"
    )
  
 -#Build curl executable
 -target_link_libraries(${EXE_NAME} libcurl ${CURL_LIBS})
 +#Build gnurl executable
 +target_link_libraries(${EXE_NAME} libgnurl ${GNURL_LIBS})
  
  
################################################################################
  
diff --cc src/Makefile.am
index 0623ba116,dff248fe3..cfe21f6e4
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@@ -84,24 -84,13 +84,24 @@@ CLEANFILES = tool_hugehelp.
  # embedded text.
  NROFF=env LC_ALL=C @NROFF@ @MANOPT@ # figured out by the configure script
  
 -EXTRA_DIST = mkhelp.pl makefile.dj                                     \
 +EXTRA_DIST = mkhelp.pl.in makefile.dj                                  \
   Makefile.m32 macos/curl.mcp.xml.sit.hqx macos/MACINSTALL.TXT          \
   macos/src/curl_GUSIConfig.cpp macos/src/macos_main.cpp makefile.amiga \
-  curl.rc Makefile.netware Makefile.inc Makefile.Watcom
+  curl.rc Makefile.netware Makefile.inc CMakeLists.txt
  
 +do_subst_perl = $(AWK) -v perl=$(PERL) '{gsub("AWKPERL",perl,$$0); print $$0}'
 +
 +SUFFIXES = .pl.in .pl
 +
 +mkhelp.pl: mkhelp.pl.in Makefile
 +      $(do_subst_perl) < $(srcdir)/mkhelp.pl.in > mkhelp.pl
 +      @chmod +x mkhelp.pl
 +
 +noinst_SCRIPTS = mkhelp.pl
 +CLEANFILES += mkhelp.pl
 +
  # Use absolute directory to disable VPATH
 -MANPAGE=$(abs_top_builddir)/docs/curl.1
 +MANPAGE=$(abs_top_builddir)/docs/gnurl.1
  MKHELP=$(top_srcdir)/src/mkhelp.pl
  HUGE=tool_hugehelp.c
  
diff --cc src/Makefile.inc
index b5a3fb2e3,329afacfa..f21be0d30
--- a/src/Makefile.inc
+++ b/src/Makefile.inc
@@@ -36,18 -36,20 +36,20 @@@ GNURLX_CFILES = 
    ../lib/warnless.c \
    ../lib/curl_ctype.c \
    ../lib/curl_multibyte.c \
-   ../lib/version_win32.c
+   ../lib/version_win32.c \
+   ../lib/dynbuf.c
  
 -CURLX_HFILES = \
 +GNURLX_HFILES = \
    ../lib/curl_setup.h \
    ../lib/strtoofft.h \
    ../lib/nonblock.h \
    ../lib/warnless.h \
    ../lib/curl_ctype.h \
    ../lib/curl_multibyte.h \
-   ../lib/version_win32.h
+   ../lib/version_win32.h \
+   ../lib/dynbuf.h
  
 -CURL_CFILES = \
 +GNURL_CFILES = \
    slist_wc.c \
    tool_binmode.c \
    tool_bname.c \
diff --cc src/Makefile.m32
index f5864ebe3,03c2b676c..f32bf9ef4
--- a/src/Makefile.m32
+++ b/src/Makefile.m32
@@@ -231,13 -248,17 +248,17 @@@ ifdef SS
      CFLAGS += -DCURL_WITH_MULTI_SSL
    endif
  endif
+ ifdef UNICODE
+   CFLAGS += -DUNICODE -D_UNICODE
+   LDFLAGS += -municode
+ endif
  
  ifdef DYN
 -  curl_DEPENDENCIES = $(PROOT)/lib/libcurldll.a $(PROOT)/lib/libcurl.dll
 -  curl_LDADD = -L$(PROOT)/lib -lcurldll
 +  curl_DEPENDENCIES = $(PROOT)/lib/libgnurldll.a $(PROOT)/lib/libgnurl.dll
 +  curl_LDADD = -L$(PROOT)/lib -lgnurldll
  else
 -  curl_DEPENDENCIES = $(PROOT)/lib/libcurl.a
 -  curl_LDADD = -L$(PROOT)/lib -lcurl
 +  curl_DEPENDENCIES = $(PROOT)/lib/libgnurl.a
 +  curl_LDADD = -L$(PROOT)/lib -lgnurl
    CFLAGS += -DCURL_STATICLIB
    LDFLAGS += -static
  endif
diff --cc src/mkhelp.pl.in
index 5422ee165,000000000..21be40f5b
mode 100755,000000..100755
--- a/src/mkhelp.pl.in
+++ b/src/mkhelp.pl.in
@@@ -1,235 -1,0 +1,235 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
- # Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +
 +# Yeah, I know, probably 1000 other persons already wrote a script like
 +# this, but I'll tell ya:
 +
 +# THEY DON'T FIT ME :-)
 +
 +# Get readme file as parameter:
 +
 +if($ARGV[0] eq "-c") {
 +    $c=1;
 +    shift @ARGV;
 +}
 +
 +push @out, "                                  _   _ ____  _\n";
 +push @out, "  Project                     ___| | | |  _ \\| |\n";
 +push @out, "                             / __| | | | |_) | |\n";
 +push @out, "                            | (__| |_| |  _ <| |___\n";
 +push @out, "                             \\___|\\___/|_| \\_\\_____|\n";
 +
 +my $olen=0;
 +while (<STDIN>) {
 +    my $line = $_;
 +
 +    # this should be removed:
 +    $line =~ s/(.|_)//g;
 +
 +    # remove trailing CR from line. msysgit checks out files as line+CRLF
 +    $line =~ s/\r$//;
 +
 +    if($line =~ /^([ \t]*\n|curl)/i) {
 +        # cut off headers and empty lines
 +        $wline++; # count number of cut off lines
 +        next;
 +    }
 +
 +    my $text = $line;
 +    $text =~ s/^\s+//g; # cut off preceding...
 +    $text =~ s/\s+$//g; # and trailing whitespaces
 +
 +    $tlen = length($text);
 +
 +    if($wline && ($olen == $tlen)) {
 +        # if the previous line with contents was exactly as long as
 +        # this line, then we ignore the newlines!
 +
 +        # We do this magic because a header may abort a paragraph at
 +        # any line, but we don't want that to be noticed in the output
 +        # here
 +        $wline=0;
 +    }
 +    $olen = $tlen;
 +
 +    if($wline) {
 +        # we only make one empty line max
 +        $wline = 0;
 +        push @out, "\n";
 +    }
 +    push @out, $line;
 +}
 +push @out, "\n"; # just an extra newline
 +
 +print <<HEAD
 +/*
 + * NEVER EVER edit this manually, fix the mkhelp.pl script instead!
 + */
 +#ifdef USE_MANUAL
 +#include "tool_hugehelp.h"
 +HEAD
 +    ;
 +if($c) {
 +    # If compression requested, check that the Gzip module is available
 +    # or else disable compression
 +    $c = eval
 +    {
 +      require IO::Compress::Gzip;
 +      IO::Compress::Gzip->import();
 +      1;
 +    };
 +    print STDERR "Warning: compression requested but Gzip is not available\n" 
if (!$c)
 +}
 +
 +if($c)
 +{
 +    my $content = join("", @out);
 +    my $gzippedContent;
 +    IO::Compress::Gzip::gzip(
 +        \$content, \$gzippedContent, Level => 9, TextFlag => 1, Time=>0) or 
die "gzip failed:";
 +    $gzip = length($content);
 +    $gzipped = length($gzippedContent);
 +
 +    print <<HEAD
 +#include <zlib.h>
 +#include "memdebug.h" /* keep this as LAST include */
 +static const unsigned char hugehelpgz[] = {
 +  /* This mumbo-jumbo is the huge help text compressed with gzip.
 +     Thanks to this operation, the size of this data shrank from $gzip
 +     to $gzipped bytes. You can disable the use of compressed help
 +     texts by NOT passing -c to the mkhelp.pl tool. */
 +HEAD
 +;
 +
 +    my $c=0;
 +    print " ";
 +    for(split(//, $gzippedContent)) {
 +        my $num=ord($_);
 +        printf(" 0x%02x,", 0+$num);
 +        if(!(++$c % 12)) {
 +            print "\n ";
 +        }
 +    }
 +    print "\n};\n";
 +
 +    print <<EOF
 +#define BUF_SIZE 0x10000
 +static voidpf zalloc_func(voidpf opaque, unsigned int items, unsigned int 
size)
 +{
 +  (void) opaque;
 +  /* not a typo, keep it calloc() */
 +  return (voidpf) calloc(items, size);
 +}
 +static void zfree_func(voidpf opaque, voidpf ptr)
 +{
 +  (void) opaque;
 +  free(ptr);
 +}
 +/* Decompress and send to stdout a gzip-compressed buffer */
 +void hugehelp(void)
 +{
 +  unsigned char* buf;
 +  int status,headerlen;
 +  z_stream z;
 +
 +  /* Make sure no gzip options are set */
 +  if (hugehelpgz[3] & 0xfe)
 +    return;
 +
 +  headerlen = 10;
 +  memset(&z, 0, sizeof(z_stream));
 +  z.zalloc = (alloc_func)zalloc_func;
 +  z.zfree = (free_func)zfree_func;
 +  z.avail_in = (unsigned int)(sizeof(hugehelpgz) - headerlen);
 +  z.next_in = (unsigned char *)hugehelpgz + headerlen;
 +
 +  if (inflateInit2(&z, -MAX_WBITS) != Z_OK)
 +    return;
 +
 +  buf = malloc(BUF_SIZE);
 +  if (buf) {
 +    while(1) {
 +      z.avail_out = BUF_SIZE;
 +      z.next_out = buf;
 +      status = inflate(&z, Z_SYNC_FLUSH);
 +      if (status == Z_OK || status == Z_STREAM_END) {
 +        fwrite(buf, BUF_SIZE - z.avail_out, 1, stdout);
 +        if (status == Z_STREAM_END)
 +          break;
 +      }
 +      else
 +        break;    /* Error */
 +    }
 +    free(buf);
 +  }
 +  inflateEnd(&z);
 +}
 +EOF
 +    ;
 +foot();
 +exit;
 +}
 +else {
 +    print <<HEAD
 +void hugehelp(void)
 +{
 +   fputs(
 +HEAD
 +         ;
 +}
 +
 +$outsize=0;
 +for(@out) {
 +    chop;
 +
 +    $new = $_;
 +
 +    $outsize += length($new)+1; # one for the newline
 +
 +    $new =~ s/\\/\\\\/g;
 +    $new =~ s/\"/\\\"/g;
 +
 +    # gcc 2.96 claims ISO C89 only is required to support 509 letter strings
 +    if($outsize > 500) {
 +        # terminate and make another fputs() call here
 +        print ", stdout);\n fputs(\n";
 +        $outsize=length($new)+1;
 +    }
 +    printf("\"%s\\n\"\n", $new);
 +
 +}
 +
 +print ", stdout) ;\n}\n";
 +
 +foot();
 +
 +sub foot {
 +  print <<FOOT
 +#else /* !USE_MANUAL */
 +/* built-in manual is disabled, blank function */
 +#include "tool_hugehelp.h"
 +void hugehelp(void) {}
 +#endif /* USE_MANUAL */
 +FOOT
 +  ;
 +}
diff --cc src/tool_easysrc.c
index e8f514fc3,246d81469..86c113b34
--- a/src/tool_easysrc.c
+++ b/src/tool_easysrc.c
@@@ -48,9 -48,9 +48,9 @@@ int easysrc_slist_count = 0
  static const char *const srchead[]={
    "/********* Sample code generated by the curl command line tool **********",
    " * All curl_easy_setopt() options are documented at:",
-   " * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html";,
+   " * https://curl.se/libcurl/c/curl_easy_setopt.html";,
    " 
************************************************************************/",
 -  "#include <curl/curl.h>",
 +  "#include <gnurl/curl.h>",
    "",
    "int main(int argc, char *argv[])",
    "{",
diff --cc src/tool_homedir.c
index 54c92ba6e,632bdcc4f..c232be2b3
--- a/src/tool_homedir.c
+++ b/src/tool_homedir.c
@@@ -25,7 -26,14 +26,14 @@@
  #  include <pwd.h>
  #endif
  
+ #ifdef HAVE_SYS_STAT_H
+ #include <sys/stat.h>
+ #endif
+ #ifdef HAVE_FCNTL_H
+ #include <fcntl.h>
+ #endif
+ 
 -#include <curl/mprintf.h>
 +#include <gnurl/mprintf.h>
  
  #include "tool_homedir.h"
  
diff --cc src/tool_operate.c
index 97508e874,90522e1e9..90d33e5c3
--- a/src/tool_operate.c
+++ b/src/tool_operate.c
@@@ -2524,12 -2560,10 +2560,12 @@@ CURLcode operate(struct GlobalConfig *g
  
        /* Check if we were asked for the help */
        if(res == PARAM_HELP_REQUESTED)
-         tool_help();
+         tool_help(global->help_category);
        /* Check if we were asked for the manual */
 +      /*
        else if(res == PARAM_MANUAL_REQUESTED)
          hugehelp();
 +      */
        /* Check if we were asked for the version information */
        else if(res == PARAM_VERSION_INFO_REQUESTED)
          tool_version_info();
diff --cc tests/Makefile.am
index 1c46c3982,8f47bb017..8ca223763
--- a/tests/Makefile.am
+++ b/tests/Makefile.am
@@@ -20,22 -20,19 +20,21 @@@
  #
  ###########################################################################
  
 -HTMLPAGES = testcurl.html runtests.html
 -PDFPAGES = testcurl.pdf runtests.pdf
  MANDISTPAGES = runtests.1.dist testcurl.1.dist
  
 -EXTRA_DIST = ftpserver.pl httpserver.pl secureserver.pl runtests.pl           
\
 - getpart.pm FILEFORMAT.md README.md 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 util.py                                      
\
 - disable-scan.pl manpage-syntax.pl error-codes.pl badsymbols.pl               
\
 - azure.pm appveyor.pm version-scan.pl options-scan.pl
 +ED_1 = ftpserver.pl.in httpserver.pl.in secureserver.pl.in runtests.pl.in
- ED_2 = getpart.pm FILEFORMAT.md README stunnel.pem memanalyze.pl.in 
testcurl.pl.in
++ED_2 = getpart.pm FILEFORMAT.md README.md stunnel.pem memanalyze.pl.in 
testcurl.pl.in
 +ED_3 = valgrind.pm ftp.pm sshserver.pl.in sshhelp.pm pathhelp.pm testcurl.1 
runtests.1
 +ED_4 = serverhelp.pm tftpserver.pl.in rtspserver.pl.in directories.pm 
symbol-scan.pl.in
 +ED_5 = CMakeLists.txt mem-include-scan.pl.in valgrind.supp extern-scan.pl.in
 +ED_6 = manpage-scan.pl.in nroff-scan.pl.in http2-server.pl.in dictserver.py.in
- ED_7 = negtelnetserver.py.in smbserver.py.in curl_test_data.py.in
- ED_8 = objnames-test08.sh objnames-test10.sh objnames.inc
- ED_9 = disable-scan.pl.in error-codes.pl.in badsymbols.pl.in
- ED_10 = azure.pm appveyor.pm version-scan.pl.in options-scan.pl
++ED_7 = negtelnetserver.py.in smbserver.py.in util.py.in
++ED_8 = disable-scan.pl.in error-codes.pl.in badsymbols.pl.in
++ED_9 = azure.pm appveyor.pm version-scan.pl.in options-scan.pl
 +
- EXTRA_DIST = $(ED_1) $(ED_2) $(ED_3) $(ED_4) $(ED_5) $(ED_6) $(ED_7) $(ED_8) 
$(ED_9) $(ED_10)
++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
++check_SCRIPTS = smbserver.py util.py negtelnetserver.py dictserver.py
  
  DISTCLEANFILES = configurehelp.pm
  
@@@ -57,78 -54,7 +56,78 @@@ PERLFLAGS = -I$(srcdir
  
  CLEANFILES = .http.pid .https.pid .ftp.pid .ftps.pid $(MANDISTPAGES)
  
 -MAN2HTML= roffit $< >$@
 +do_subst = $(AWK) -v python=$(PYTHON) '{gsub("AWKPYTHON",python,$$0); print 
$$0}'
 +do_subst_perl = $(AWK) -v perl=$(PERL) '{gsub("AWKPERL",perl,$$0); print $$0}'
 +
 +SUFFIXES = .py.in .py .pl.in .pl
 +
 +.pl.in.pl:
 +      $(do_subst_perl) < $< > $@
 +      @chmod +x $@
 +
 +noinst_SCRIPTS = convsrctest.pl \
 +              disable-scan.pl \
 +              error-codes.pl \
 +              extern-scan.pl \
 +              ftpserver.pl \
 +              http2-server.pl \
 +              httpserver.pl \
 +              keywords.pl \
 +              manpage-scan.pl \
 +              mem-include-scan.pl \
 +              memanalyze.pl \
 +              nroff-scan.pl \
 +              rtspserver.pl \
 +              runtests.pl \
 +              secureserver.pl \
 +              sshserver.pl \
 +              symbol-scan.pl \
 +              testcurl.pl \
 +              tftpserver.pl \
 +              badsymbols.pl \
 +              version-scan.pl
 +
 +CLEANFILES += convsrctest.pl \
 +              disable-scan.pl \
 +              error-codes.pl \
 +              extern-scan.pl \
 +              ftpserver.pl \
 +              http2-server.pl \
 +              httpserver.pl \
 +              keywords.pl \
 +              manpage-scan.pl \
 +              mem-include-scan.pl \
 +              memanalyze.pl \
 +              nroff-scan.pl \
 +              rtspserver.pl \
 +              runtests.pl \
 +              secureserver.pl \
 +              sshserver.pl \
 +              symbol-scan.pl \
 +              testcurl.pl \
 +              tftpserver.pl \
 +              badsymbols.pl \
 +              version-scan.pl
 +
 +.py.in.py:
 +      $(do_subst) < $< > $@
 +      @chmod +x $@
 +
 +smbserver.py: smbserver.py.in Makefile
 +      $(do_subst) < $(srcdir)/smbserver.py.in > smbserver.py
 +      @chmod +x smbserver.py
 +
- curl_test_data.py: curl_test_data.py.in Makefile
-       $(do_subst) < $(srcdir)/curl_test_data.py.in > curl_test_data.py
-       @chmod +x curl_test_data.py
++util.py: util.py.in Makefile
++      $(do_subst) < $(srcdir)/util.py.in > util.py
++      @chmod +x util.py
 +
 +negtelnetserver.py: negtelnetserver.py.in Makefile
 +      $(do_subst) < $(srcdir)/negtelnetserver.py.in > negtelnetserver.py
 +      @chmod +x negtelnetserver.py
 +
 +dictserver.py: dictserver.py.in Makefile
 +      $(do_subst) < $(srcdir)/dictserver.py.in > dictserver.py
 +      @chmod +x dictserver.py
  
  curl:
        @cd $(top_builddir) && $(MAKE)
diff --cc tests/badsymbols.pl.in
index 1ecc4f669,000000000..b8077529f
mode 100755,000000..100755
--- a/tests/badsymbols.pl.in
+++ b/tests/badsymbols.pl.in
@@@ -1,132 -1,0 +1,132 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2010-2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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 script grew out of help from Przemyslaw Iskra and Balint Szilakszi
 +# a late evening in the #curl IRC channel on freenode.
 +#
 +
 +use strict;
 +use warnings;
 +use vars qw($Cpreprocessor);
 +
 +#
 +# configurehelp perl module is generated by configure script
 +#
 +my $rc = eval {
 +    require configurehelp;
 +    configurehelp->import(qw(
 +        $Cpreprocessor
 +    ));
 +    1;
 +};
 +# Set default values if configure has not generated a configurehelp.pm file.
 +# This is the case with cmake.
 +if (!$rc) {
 +    $Cpreprocessor = 'cpp';
 +}
 +
 +# we may get the dir root pointed out
 +my $root=$ARGV[0] || ".";
 +
 +# need an include directory when building out-of-tree
 +my $i = ($ARGV[1]) ? "-I$ARGV[1] " : '';
 +
 +my $incdir = "$root/include/gnurl";
 +
 +my $verbose=0;
 +my $summary=0;
 +my $misses=0;
 +
 +my @syms;
 +my %doc;
 +my %rem;
 +
 +sub scanenums {
 +    my ($file)=@_;
 +    my $skipit = 0;
 +
 +    open H_IN, "-|", "$Cpreprocessor $i$file" || die "Cannot preprocess 
$file";
 +    while ( <H_IN> ) {
 +        if( /^#(line|) (\d+) \"(.*)\"/) {
 +            # if the included file isn't in our incdir, then we skip this 
section
 +            # until next #line
 +            #
 +            if($3 !~ /^$incdir/) {
 +                $skipit = 1;
 +                next;
 +            }
 +            # parse this!
 +            $skipit = 0;
 +            next;
 +        }
 +        if($skipit) {
 +            next;
 +        }
 +        if ( /enum\s+(\S+\s+)?{/ .. /}/ ) {
 +            s/^\s+//;
 +            chomp;
 +            s/[,\s].*//;
 +            if(($_ !~ /\}(;|)/) &&
 +               ($_ ne "typedef") &&
 +               ($_ ne "enum") &&
 +               ($_ !~ /^[ \t]*$/)) {
 +                push @syms, $_;
 +            }
 +        }
 +    }
 +    close H_IN || die "Error preprocessing $file";
 +}
 +
 +sub scanheader {
 +    my ($f)=@_;
 +    scanenums($f);
 +    open H, "<$f";
 +    while(<H>) {
 +        if (/^#define +([^ \n]*)/) {
 +            push @syms, $1;
 +        }
 +    }
 +    close H;
 +}
 +
 +
 +opendir(my $dh, $incdir) || die "Can't opendir: $!";
 +my @hfiles = grep { /\.h$/ } readdir($dh);
 +closedir $dh;
 +
 +for(@hfiles) {
 +    scanheader("$incdir/$_");
 +}
 +
 +my $errors = 0;
 +for my $s (@syms) {
 +    if($s !~ /^(lib|)curl/i) {
 +        print "Bad symbols in public header files:\n" if(!$errors);
 +        $errors++;
 +        print "  $s\n";
 +    }
 +}
 +if($errors) {
 +    exit 1;
 +}
 +printf "%d fine symbols found\n", scalar(@syms);
diff --cc tests/convsrctest.pl.in
index 4061ff3e2,000000000..0fca802ba
mode 100755,000000..100755
--- a/tests/convsrctest.pl.in
+++ b/tests/convsrctest.pl.in
@@@ -1,255 -1,0 +1,255 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +#***************************************************************************
 +
 +#=======================================================================
 +# Read a test definition which exercises curl's --libcurl option.
 +# Generate either compilable source code for a new test tool,
 +# or a new test definition which runs the tool and expects the
 +# same output.
 +# This should verify that the --libcurl code really does perform
 +# the same actions as the original curl invocation.
 +#-----------------------------------------------------------------------
 +# The output of curl's --libcurl option differs in several ways from
 +# the code needed to integrate with the test tool environment:
 +# - #include "test.h"
 +# - no call of curl_global_init & curl_global_cleanup
 +# - main() function vs. test() function
 +# - no checking of curl_easy_setopt calls vs. test_setopt wrapper
 +# - handling of stdout
 +# - variable names ret & hnd vs. res & curl
 +# - URL as literal string vs. passed as argument
 +#=======================================================================
 +use strict;
 +require "getpart.pm";
 +
 +# Boilerplate code for test tool
 +my $head =
 +'#include "test.h"
 +#include "memdebug.h"
 +
 +int test(char *URL)
 +{
 +  CURLcode res;
 +  CURL *curl;
 +';
 +# Other declarations from --libcurl come here
 +# e.g. curl_slist
 +my $init =
 +'
 +  if (curl_global_init(CURL_GLOBAL_ALL) != CURLE_OK) {
 +    fprintf(stderr, "curl_global_init() failed\n");
 +    return TEST_ERR_MAJOR_BAD;
 +  }
 +
 +  if ((curl = curl_easy_init()) == NULL) {
 +    fprintf(stderr, "curl_easy_init() failed\n");
 +    curl_global_cleanup();
 +    return TEST_ERR_MAJOR_BAD;
 +  }
 +';
 +# Option setting, perform and cleanup come here
 +my $exit =
 +'  curl_global_cleanup();
 +
 +  return (int)res;
 +}
 +';
 +
 +my $myname = leaf($0);
 +sub usage {die "Usage: $myname -c|-test=num testfile\n";}
 +
 +sub main {
 +    @ARGV == 2
 +        or usage;
 +    my($opt,$testfile) = @ARGV;
 +
 +    if(loadtest($testfile)) {
 +        die "$myname: $testfile doesn't look like a test case\n";
 +    }
 +
 +    my $comment = sprintf("DO NOT EDIT - generated from %s by %s",
 +                          leaf($testfile), $myname);
 +    if($opt eq '-c') {
 +        generate_c($comment);
 +    }
 +    elsif(my($num) = $opt =~ /^-test=(\d+)$/) {
 +        generate_test($comment, $num);
 +    }
 +    else {
 +        usage;
 +    }
 +}
 +
 +sub generate_c {
 +    my($comment) = @_;
 +    # Fetch the generated code, which is the output file checked by
 +    # the old test.
 +    my @libcurl = getpart("verify", "file")
 +        or die "$myname: no <verify><file> section found\n";
 +
 +    # Mangle the code into a suitable form for a test tool.
 +    # We want to extract the important parts (declarations,
 +    # URL, setopt calls, cleanup code) from the --libcurl
 +    # boilerplate and insert them into a new boilerplate.
 +    my(@decl,@code);
 +    # First URL passed in as argument, others as global
 +    my @urlvars = ('URL', 'libtest_arg2', 'libtest_arg3');
 +    my($seen_main,$seen_setopt,$seen_return);
 +    foreach (@libcurl) {
 +        # Check state changes first (even though it
 +        # duplicates some matches) so that the other tests
 +        # are in a logical order).
 +        if(/^int main/) {
 +            $seen_main = 1;
 +        }
 +        if($seen_main and /curl_easy_setopt/) {
 +            # Don't match 'curl_easy_setopt' in comment!
 +            $seen_setopt = 1;
 +        }
 +        if(/^\s*return/) {
 +            $seen_return = 1;
 +        }
 +
 +        # Now filter the code according to purpose
 +        if(! $seen_main) {
 +            next;
 +        }
 +        elsif(! $seen_setopt) {
 +            if(/^\s*(int main|\{|CURLcode |CURL |hnd = curl_easy_init)/) {
 +                # Initialisations handled by boilerplate
 +                next;
 +            }
 +            else {
 +                push @decl, $_;
 +            }
 +        }
 +        elsif(! $seen_return) {
 +            if(/CURLOPT_URL/) {
 +                # URL is passed in as argument or by global
 +              my $var = shift @urlvars;
 +                s/\"[^\"]*\"/$var/;
 +            }
 +          s/\bhnd\b/curl/;
 +            # Convert to macro wrapper
 +            s/curl_easy_setopt/test_setopt/;
 +          if(/curl_easy_perform/) {
 +              s/\bret\b/res/;
 +              push @code, $_;
 +              push @code, "test_cleanup:\n";
 +          }
 +          else {
 +              push @code, $_;
 +          }
 +        }
 +    }
 +
 +    print ("/* $comment */\n",
 +           $head,
 +           @decl,
 +           $init,
 +           @code,
 +           $exit);
 +}
 +
 +# Read the original test data file and transform it
 +# - add a "DO NOT EDIT comment"
 +# - replace CURLOPT_URL string with URL variable
 +# - remove <verify><file> section (was the --libcurl output)
 +# - insert a <client><tool> section with our new C program name
 +# - replace <client><command> section with the URL
 +sub generate_test {
 +    my($comment,$newnumber) = @_;
 +    my @libcurl = getpart("verify", "file")
 +        or die "$myname: no <verify><file> section found\n";
 +    # Scan the --libcurl code to find the URL used.
 +    my $url;
 +    foreach (@libcurl) {
 +        if(my($u) = /CURLOPT_URL, \"([^\"]*)\"/) {
 +            $url = $u;
 +        }
 +    }
 +    die "$myname: CURLOPT_URL not found\n"
 +        unless defined $url;
 +
 +    # Traverse the pseudo-XML transforming as required
 +    my @new;
 +    my(@path,$path,$skip);
 +    foreach (getall()) {
 +        if(my($end) = /\s*<(\/?)testcase>/) {
 +            push @new, $_;
 +            push @new, "# $comment\n"
 +                unless $end;
 +        }
 +        elsif(my($tag) = /^\s*<(\w+)/) {
 +            push @path, $tag;
 +            $path = join '/', @path;
 +            if($path eq 'verify/file') {
 +                $skip = 1;
 +            }
 +            push @new, $_
 +                unless $skip;
 +            if($path eq 'client') {
 +                push @new, ("<tool>\n",
 +                            "lib$newnumber\n",
 +                            "</tool>\n");
 +            }
 +            elsif($path eq 'client/command') {
 +                push @new, sh_quote($url)."\n";
 +            }
 +        }
 +        elsif(my($etag) = /^\s*<\/(\w+)/) {
 +            my $tag = pop @path;
 +            die "$myname: mismatched </$etag>\n"
 +                unless $tag eq $etag;
 +            push @new, $_
 +                unless $skip;
 +            $skip --
 +                if $path eq 'verify/file';
 +            $path = join '/', @path;
 +        }
 +        else {
 +            if($path eq 'client/command') {
 +                # Replaced above
 +            }
 +            else {
 +                push @new, $_
 +                    unless $skip;
 +            }
 +        }
 +    }
 +    print @new;
 +}
 +
 +sub leaf {
 +    # Works for POSIX filenames
 +    (my $path = shift) =~ s!.*/!!;
 +    return $path;
 +}
 +
 +sub sh_quote {
 +    my $word = shift;
 +    $word =~ s/[\$\"\'\\]/\\$&/g;
 +    return '"' . $word . '"';
 +}
 +
 +main;
diff --cc tests/data/DISABLED
index eb4407a6b,1806a5dbe..0d08d33af
--- a/tests/data/DISABLED
+++ b/tests/data/DISABLED
@@@ -10,30 -23,3 +23,13 @@@
  # test 1801 causes problems on Mac OS X and github
  # https://github.com/curl/curl/issues/380
  1801
- # test 1510 causes problems on the CI on github
- # example: https://travis-ci.org/curl/curl/builds/81633600
- 1510
- # Pipelining test that is causing false positives a little too often
- 1903
- # fnmatch differences are just too common to make testing them sensible
- 1307
- # Pipelining is deprecated
- 530
- 584
- 1900
- 1901
- 1902
- 2033
 +# Unused in gnurl
 +1173
 +# Skip in gnurl until we fix the manpages->mdocml
 +1177
 +# FIXME: fails randomly
 +1056
 +1448
 +# Uses SRP to "a server not supporting it" but modern stunnel versions
 +# will silently accept it and remain happy
 +323
diff --cc tests/data/test1400
index 9f6bd47a2,b7060eca5..5a910d19b
--- a/tests/data/test1400
+++ b/tests/data/test1400
@@@ -61,9 -58,9 +58,9 @@@ $_ = '' if /CURLOPT_INTERLEAVEDATA
  <file name="log/test1400.c" mode="text">
  /********* Sample code generated by the curl command line tool **********
   * All curl_easy_setopt() options are documented at:
-  * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+  * https://curl.se/libcurl/c/curl_easy_setopt.html
   ************************************************************************/
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  
  int main(int argc, char *argv[])
  {
diff --cc tests/data/test1401
index c414c4751,a2629683a..ad3f0c8d0
--- a/tests/data/test1401
+++ b/tests/data/test1401
@@@ -66,9 -63,9 +63,9 @@@ $_ = '' if /CURLOPT_INTERLEAVEDATA
  <file name="log/test1401.c" mode="text">
  /********* Sample code generated by the curl command line tool **********
   * All curl_easy_setopt() options are documented at:
-  * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+  * https://curl.se/libcurl/c/curl_easy_setopt.html
   ************************************************************************/
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  
  int main(int argc, char *argv[])
  {
diff --cc tests/data/test1402
index 56861a4ba,1bd55cb4e..40ac50af8
--- a/tests/data/test1402
+++ b/tests/data/test1402
@@@ -64,9 -61,9 +61,9 @@@ $_ = '' if /CURLOPT_INTERLEAVEDATA
  <file name="log/test1402.c" mode="text">
  /********* Sample code generated by the curl command line tool **********
   * All curl_easy_setopt() options are documented at:
-  * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+  * https://curl.se/libcurl/c/curl_easy_setopt.html
   ************************************************************************/
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  
  int main(int argc, char *argv[])
  {
diff --cc tests/data/test1403
index 4237c07c8,a7c9fcca3..c77f37fbf
--- a/tests/data/test1403
+++ b/tests/data/test1403
@@@ -61,9 -58,9 +58,9 @@@ $_ = '' if /CURLOPT_INTERLEAVEDATA
  <file name="log/test1403.c" mode="text">
  /********* Sample code generated by the curl command line tool **********
   * All curl_easy_setopt() options are documented at:
-  * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+  * https://curl.se/libcurl/c/curl_easy_setopt.html
   ************************************************************************/
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  
  int main(int argc, char *argv[])
  {
diff --cc tests/data/test1404
index 35e1ee91b,1d8e8cf77..93ab07cac
--- a/tests/data/test1404
+++ b/tests/data/test1404
@@@ -101,9 -101,9 +101,9 @@@ $_ = '' if /\/\* "value" \*\/
  <file name="log/test1404.c" mode="text">
  /********* Sample code generated by the curl command line tool **********
   * All curl_easy_setopt() options are documented at:
-  * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+  * https://curl.se/libcurl/c/curl_easy_setopt.html
   ************************************************************************/
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  
  int main(int argc, char *argv[])
  {
diff --cc tests/data/test1405
index a1902bb72,b4087704f..629dd2e5c
--- a/tests/data/test1405
+++ b/tests/data/test1405
@@@ -61,9 -61,9 +61,9 @@@ QUI
  <file name="log/test1405.c" mode="text">
  /********* Sample code generated by the curl command line tool **********
   * All curl_easy_setopt() options are documented at:
-  * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+  * https://curl.se/libcurl/c/curl_easy_setopt.html
   ************************************************************************/
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  
  int main(int argc, char *argv[])
  {
diff --cc tests/data/test1406
index dc8247dfa,38f68d11e..185eea407
--- a/tests/data/test1406
+++ b/tests/data/test1406
@@@ -60,9 -60,9 +60,9 @@@ bod
  <file name="log/test1406.c" mode="text">
  /********* Sample code generated by the curl command line tool **********
   * All curl_easy_setopt() options are documented at:
-  * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+  * https://curl.se/libcurl/c/curl_easy_setopt.html
   ************************************************************************/
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  
  int main(int argc, char *argv[])
  {
diff --cc tests/data/test1407
index bc25cebfb,a7e13ba75..1a50de75e
--- a/tests/data/test1407
+++ b/tests/data/test1407
@@@ -47,9 -47,9 +47,9 @@@ QUI
  <file name="log/test1407.c" mode="text">
  /********* Sample code generated by the curl command line tool **********
   * All curl_easy_setopt() options are documented at:
-  * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+  * https://curl.se/libcurl/c/curl_easy_setopt.html
   ************************************************************************/
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  
  int main(int argc, char *argv[])
  {
diff --cc tests/data/test1420
index 99d50c35b,4b8d7bbf4..0dcf91314
--- a/tests/data/test1420
+++ b/tests/data/test1420
@@@ -53,9 -53,9 +53,9 @@@ A005 LOGOU
  <file name="log/test1420.c" mode="text">
  /********* Sample code generated by the curl command line tool **********
   * All curl_easy_setopt() options are documented at:
-  * https://curl.haxx.se/libcurl/c/curl_easy_setopt.html
+  * https://curl.se/libcurl/c/curl_easy_setopt.html
   ************************************************************************/
 -#include <curl/curl.h>
 +#include <gnurl/curl.h>
  
  int main(int argc, char *argv[])
  {
diff --cc tests/dictserver.py.in
index e08617f5e,000000000..ea45ba80c
mode 100755,000000..100755
--- a/tests/dictserver.py.in
+++ b/tests/dictserver.py.in
@@@ -1,189 -1,0 +1,192 @@@
 +#!AWKPYTHON
 +# -*- coding: utf-8 -*-
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2008 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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 logging
 +import os
 +import sys
- import logging
++
++from util import ClosingFileHandler
++
 +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(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")
 +                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 = ClosingFileHandler(options.logfile)
 +        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/disable-scan.pl.in
index 12600f336,000000000..41fc14056
mode 100755,000000..100755
--- a/tests/disable-scan.pl.in
+++ b/tests/disable-scan.pl.in
@@@ -1,134 -1,0 +1,134 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
- # Copyright (C) 2010-2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++# Copyright (C) 2010 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +#
 +
 +use strict;
 +use warnings;
 +
 +# the DISABLE options that can be set by configure
 +my %disable;
 +# the DISABLE options that are used in C files
 +my %file;
 +# the DISABLE options that are documented
 +my %docs;
 +
 +# we may get the dir root pointed out
 +my $root=$ARGV[0] || ".";
 +my $DOCS="CURL-DISABLE.md";
 +
 +sub scan_configure {
 +    open S, "<$root/configure.ac";
 +    while(<S>) {
 +        if(/(CURL_DISABLE_[A-Z_]+)/g) {
 +            my ($sym)=($1);
 +            $disable{$sym} = 1;
 +        }
 +    }
 +    close S;
 +}
 +
 +sub scan_file {
 +    my ($source)=@_;
 +    open F, "<$source";
 +    while(<F>) {
 +        if(/(CURL_DISABLE_[A-Z_]+)/g) {
 +            my ($sym)=($1);
 +            $file{$sym} = $source;
 +        }
 +    }
 +    close F;
 +}
 +
 +sub scan_dir {
 +    my ($dir)=@_;
 +    opendir(my $dh, $dir) || die "Can't opendir $dir: $!";
 +    my @cfiles = grep { /\.c\z/ && -f "$dir/$_" } readdir($dh);
 +    closedir $dh;
 +    for my $f (sort @cfiles) {
 +        scan_file("$dir/$f");
 +    }
 +}
 +
 +sub scan_sources {
 +    scan_dir("$root/src");
 +    scan_dir("$root/lib");
 +    scan_dir("$root/lib/vtls");
 +    scan_dir("$root/lib/vauth");
 +}
 +
 +sub scan_docs {
 +    open F, "<$root/docs/$DOCS";
 +    my $line = 0;
 +    while(<F>) {
 +        $line++;
 +        if(/^## (CURL_DISABLE_[A-Z_]+)/g) {
 +            my ($sym)=($1);
 +            $docs{$sym} = $line;
 +        }
 +    }
 +    close F;
 +}
 +
 +scan_configure();
 +scan_sources();
 +scan_docs();
 +
 +
 +my $error = 0;
 +# Check the configure symbols for use in code
 +for my $s (sort keys %disable) {
 +    if(!$file{$s}) {
 +        printf "Present in configure.ac, not used by code: %s\n", $s;
 +        $error++;
 +    }
 +    if(!$docs{$s}) {
 +        printf "Present in configure.ac, not documented in $DOCS: %s\n", $s;
 +        $error++;
 +    }
 +}
 +
 +# Check the code symbols for use in configure
 +for my $s (sort keys %file) {
 +    if(!$disable{$s}) {
 +        printf "Not set by configure: %s (%s)\n", $s, $file{$s};
 +        $error++;
 +    }
 +    if(!$docs{$s}) {
 +        printf "Used in code, not documented in $DOCS: %s\n", $s;
 +        $error++;
 +    }
 +}
 +
 +# Check the documented symbols
 +for my $s (sort keys %docs) {
 +    if(!$disable{$s}) {
 +        printf "Documented but not in configure: %s\n", $s;
 +        $error++;
 +    }
 +    if(!$file{$s}) {
 +        printf "Documented, but not used by code: %s\n", $s;
 +        $error++;
 +    }
 +}
 +
 +exit $error;
diff --cc tests/error-codes.pl.in
index d9ddbcdfa,000000000..73873d393
mode 100644,000000..100644
--- a/tests/error-codes.pl.in
+++ b/tests/error-codes.pl.in
@@@ -1,80 -1,0 +1,80 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
- # Copyright (C) 2010-2019, Daniel Stenberg, <daniel@haxx.se>, et al.
++# Copyright (C) 2010 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +#
 +#
 +
 +use strict;
 +use warnings;
 +
 +# we may get the dir root pointed out
 +my $root=$ARGV[0] || ".";
 +
 +my %error; # from the include file
 +my %docs; # from libcurl-errors.3
 +
 +sub getdocserrors {
 +    open(F, "<$root/docs/libcurl/libcurl-errors.3");
 +    while(<F>) {
 +        if($_ =~ /^.IP \"(CURL[EM]_[^ \t\"]*)/) {
 +            my ($symbol) = ($1);
 +            if($symbol =~ /OBSOLETE/) {
 +                ;
 +            }
 +            else {
 +                $docs{$symbol}=1;
 +            }
 +        }
 +    }
 +    close(F);
 +}
 +
 +sub getincludeerrors {
 +    open(F, "<$root/docs/libcurl/symbols-in-versions");
 +    while(<F>) {
 +        if($_ =~ /^(CURL[EM]_[^ \t]*)[ \t]*([0-9.]+)[ \t]*(.*)/) {
 +            my ($symbol, $added, $rest) = ($1,$2,$3);
 +            if($rest =~ /^([0-9.]+)/) {
 +                # removed!
 +            }
 +            else {
 +                $error{$symbol}=$added;
 +            }
 +        }
 +    }
 +    close(F);
 +}
 +
 +getincludeerrors();
 +getdocserrors();
 +
 +for(sort keys %error) {
 +    if($error{$_} && !$docs{$_}) {
 +        print "$_ is not in libcurl-errors.3\n";
 +    }
 +}
 +
 +for(sort keys %docs) {
 +    if($docs{$_} && !$error{$_}) {
 +        print "$_ is not in symbols-in-versions\n";
 +    }
 +}
diff --cc tests/extern-scan.pl.in
index 53725dc9b,000000000..64282d504
mode 100755,000000..100755
--- a/tests/extern-scan.pl.in
+++ b/tests/extern-scan.pl.in
@@@ -1,62 -1,0 +1,62 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2010 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +#
 +#
 +
 +use strict;
 +use warnings;
 +
 +# we may get the dir root pointed out
 +my $root=$ARGV[0] || ".";
 +
 +my @incs = (
 +    "$root/include/gnurl/curl.h",
 +    "$root/include/gnurl/easy.h",
 +    "$root/include/gnurl/mprintf.h",
 +    "$root/include/gnurl/multi.h",
 +    );
 +
 +my $verbose=0;
 +my $summary=0;
 +my $misses=0;
 +
 +my @syms;
 +my %doc;
 +my %rem;
 +
 +sub scanheader {
 +    my ($f)=@_;
 +    open H, "<$f" || die;
 +    while(<H>) {
 +        if (/^(CURL_EXTERN.*)/) {
 +            my $decl = $1;
 +            $decl =~ s/\r$//;
 +            print "$decl\n";
 +        }
 +    }
 +    close H;
 +}
 +
 +foreach my $i (@incs) {
 +    scanheader($i);
 +}
diff --cc tests/ftpserver.pl.in
index ae9ac05f4,000000000..ed6868b1f
mode 100755,000000..100755
--- a/tests/ftpserver.pl.in
+++ b/tests/ftpserver.pl.in
@@@ -1,3306 -1,0 +1,3321 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.se/docs/copyright.html.
 +#
 +# You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +# copies of the Software, and permit persons to whom the Software is
 +# furnished to do so, under the terms of the COPYING file.
 +#
 +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 +# KIND, either express or implied.
 +#
 +###########################################################################
 +
 +# This is a server designed for the curl test suite.
 +#
 +# In December 2009 we started remaking the server to support more protocols
 +# that are similar in spirit. Like POP3, IMAP and SMTP in addition to the FTP
 +# it already supported since a long time. Note that it still only supports one
 +# protocol per invoke. You need to start multiple servers to support multiple
 +# protocols simultaneously.
 +#
 +# It is meant to exercise curl, it is not meant to be a fully working
 +# or even very standard compliant server.
 +#
 +# You may optionally specify port on the command line, otherwise it'll
 +# default to port 8921.
 +#
 +# All socket/network/TCP related stuff is done by the 'sockfilt' program.
 +#
 +
 +BEGIN {
 +    push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
 +    push(@INC, ".");
 +    # sub second timestamping needs Time::HiRes
 +    eval {
 +        no warnings "all";
 +        require Time::HiRes;
 +        import  Time::HiRes qw( gettimeofday );
 +    }
 +}
 +
 +use strict;
 +use warnings;
 +use IPC::Open2;
 +use Digest::MD5;
 +
 +require "getpart.pm";
 +require "ftp.pm";
 +require "directories.pm";
 +
 +use serverhelp qw(
 +    servername_str
 +    server_pidfilename
 +    server_logfilename
 +    mainsockf_pidfilename
 +    mainsockf_logfilename
 +    datasockf_pidfilename
 +    datasockf_logfilename
 +    );
 +
 +use sshhelp qw(
 +    exe_ext
 +    );
 +
 +#**********************************************************************
 +# global vars...
 +#
 +my $verbose = 0;    # set to 1 for debugging
 +my $idstr = "";     # server instance string
 +my $idnum = 1;      # server instance number
 +my $ipvnum = 4;     # server IPv number (4 or 6)
 +my $proto = 'ftp';  # default server protocol
 +my $srcdir;         # directory where ftpserver.pl is located
 +my $srvrname;       # server name for presentation purposes
 +my $cwd_testno;     # test case numbers extracted from CWD command
 +my $testno = 0;     # test case number (read from ftpserver.cmd)
 +my $path   = '.';
 +my $logdir = $path .'/log';
 +
 +#**********************************************************************
 +# global vars used for server address and primary listener port
 +#
 +my $port = 8921;               # default primary listener port
 +my $listenaddr = '127.0.0.1';  # default address for listener port
 +
 +#**********************************************************************
 +# global vars used for file names
 +#
 +my $pidfile;            # server pid file name
 +my $portfile=".ftpserver.port"; # server port file name
 +my $logfile;            # server log file name
 +my $mainsockf_pidfile;  # pid file for primary connection sockfilt process
 +my $mainsockf_logfile;  # log file for primary connection sockfilt process
 +my $datasockf_pidfile;  # pid file for secondary connection sockfilt process
 +my $datasockf_logfile;  # log file for secondary connection sockfilt process
 +
 +#**********************************************************************
 +# global vars used for server logs advisor read lock handling
 +#
 +my $SERVERLOGS_LOCK = 'log/serverlogs.lock';
 +my $serverlogslocked = 0;
 +
 +#**********************************************************************
 +# global vars used for child processes PID tracking
 +#
 +my $sfpid;        # PID for primary connection sockfilt process
 +my $slavepid;     # PID for secondary connection sockfilt process
 +
 +#**********************************************************************
 +# global typeglob filehandle vars to read/write from/to sockfilters
 +#
 +local *SFREAD;    # used to read from primary connection
 +local *SFWRITE;   # used to write to primary connection
 +local *DREAD;     # used to read from secondary connection
 +local *DWRITE;    # used to write to secondary connection
 +
 +my $sockfilt_timeout = 5;  # default timeout for sockfilter eXsysreads
 +
 +#**********************************************************************
 +# global vars which depend on server protocol selection
 +#
 +my %commandfunc;   # protocol command specific function callbacks
 +my %displaytext;   # text returned to client before callback runs
 +
 +#**********************************************************************
 +# global vars customized for each test from the server commands file
 +#
 +my $ctrldelay;     # set if server should throttle ctrl stream
 +my $datadelay;     # set if server should throttle data stream
 +my $retrweirdo;    # set if ftp server should use RETRWEIRDO
 +my $retrnosize;    # set if ftp server should use RETRNOSIZE
 +my $pasvbadip;     # set if ftp server should use PASVBADIP
 +my $nosave;        # set if ftp server should not save uploaded data
 +my $nodataconn;    # set if ftp srvr doesn't establish or accepts data channel
 +my $nodataconn425; # set if ftp srvr doesn't establish data ch and replies 425
 +my $nodataconn421; # set if ftp srvr doesn't establish data ch and replies 421
 +my $nodataconn150; # set if ftp srvr doesn't establish data ch and replies 150
++my $storeresp;
 +my @capabilities;  # set if server supports capability commands
 +my @auth_mechs;    # set if server supports authentication commands
 +my %fulltextreply; #
 +my %commandreply;  #
 +my %customcount;   #
 +my %delayreply;    #
 +
 +#**********************************************************************
 +# global variables for to test ftp wildcardmatching or other test that
 +# need flexible LIST responses.. and corresponding files.
 +# $ftptargetdir is keeping the fake "name" of LIST directory.
 +#
 +my $ftplistparserstate;
 +my $ftptargetdir="";
 +
 +#**********************************************************************
 +# global variables used when running a ftp server to keep state info
 +# relative to the secondary or data sockfilt process. Values of these
 +# variables should only be modified using datasockf_state() sub, given
 +# that they are closely related and relationship is a bit awkward.
 +#
 +my $datasockf_state = 'STOPPED'; # see datasockf_state() sub
 +my $datasockf_mode = 'none';     # ['none','active','passive']
 +my $datasockf_runs = 'no';       # ['no','yes']
 +my $datasockf_conn = 'no';       # ['no','yes']
 +
 +#**********************************************************************
 +# global vars used for signal handling
 +#
 +my $got_exit_signal = 0; # set if program should finish execution ASAP
 +my $exit_signal;         # first signal handled in exit_signal_handler
 +
 +#**********************************************************************
 +# Mail related definitions
 +#
 +my $TEXT_PASSWORD = "secret";
 +my $POP3_TIMESTAMP = "<1972.987654321\@curl>";
 +
 +#**********************************************************************
 +# exit_signal_handler will be triggered to indicate that the program
 +# should finish its execution in a controlled way as soon as possible.
 +# For now, program will also terminate from within this handler.
 +#
 +sub exit_signal_handler {
 +    my $signame = shift;
 +    # For now, simply mimic old behavior.
 +    killsockfilters($proto, $ipvnum, $idnum, $verbose);
 +    unlink($pidfile);
 +    unlink($portfile);
 +    if($serverlogslocked) {
 +        $serverlogslocked = 0;
 +        clear_advisor_read_lock($SERVERLOGS_LOCK);
 +    }
 +    exit;
 +}
 +
 +#**********************************************************************
 +# logmsg is general message logging subroutine for our test servers.
 +#
 +sub logmsg {
 +    my $now;
 +    # sub second timestamping needs Time::HiRes
 +    if($Time::HiRes::VERSION) {
 +        my ($seconds, $usec) = gettimeofday();
 +        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
 +            localtime($seconds);
 +        $now = sprintf("%02d:%02d:%02d.%06d ", $hour, $min, $sec, $usec);
 +    }
 +    else {
 +        my $seconds = time();
 +        my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
 +            localtime($seconds);
 +        $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec);
 +    }
 +    if(open(LOGFILEFH, ">>$logfile")) {
 +        print LOGFILEFH $now;
 +        print LOGFILEFH @_;
 +        close(LOGFILEFH);
 +    }
 +}
 +
 +sub ftpmsg {
 +  # append to the server.input file
 +  open(INPUT, ">>log/server$idstr.input") ||
 +    logmsg "failed to open log/server$idstr.input\n";
 +
 +  print INPUT @_;
 +  close(INPUT);
 +
 +  # use this, open->print->close system only to make the file
 +  # open as little as possible, to make the test suite run
 +  # better on windows/cygwin
 +}
 +
 +#**********************************************************************
 +# eXsysread is a wrapper around perl's sysread() function. This will
 +# repeat the call to sysread() until it has actually read the complete
 +# number of requested bytes or an unrecoverable condition occurs.
 +# On success returns a positive value, the number of bytes requested.
 +# On failure or timeout returns zero.
 +#
 +sub eXsysread {
 +    my $FH      = shift;
 +    my $scalar  = shift;
 +    my $nbytes  = shift;
 +    my $timeout = shift; # A zero timeout disables eXsysread() time limit
 +    #
 +    my $time_limited = 0;
 +    my $timeout_rest = 0;
 +    my $start_time = 0;
 +    my $nread  = 0;
 +    my $rc;
 +
 +    $$scalar = "";
 +
 +    if((not defined $nbytes) || ($nbytes < 1)) {
 +        logmsg "Error: eXsysread() failure: " .
 +               "length argument must be positive\n";
 +        return 0;
 +    }
 +    if((not defined $timeout) || ($timeout < 0)) {
 +        logmsg "Error: eXsysread() failure: " .
 +               "timeout argument must be zero or positive\n";
 +        return 0;
 +    }
 +    if($timeout > 0) {
 +        # caller sets eXsysread() time limit
 +        $time_limited = 1;
 +        $timeout_rest = $timeout;
 +        $start_time = int(time());
 +    }
 +
 +    while($nread < $nbytes) {
 +        if($time_limited) {
 +            eval {
 +                local $SIG{ALRM} = sub { die "alarm\n"; };
 +                alarm $timeout_rest;
 +                $rc = sysread($FH, $$scalar, $nbytes - $nread, $nread);
 +                alarm 0;
 +            };
 +            $timeout_rest = $timeout - (int(time()) - $start_time);
 +            if($timeout_rest < 1) {
 +                logmsg "Error: eXsysread() failure: timed out\n";
 +                return 0;
 +            }
 +        }
 +        else {
 +            $rc = sysread($FH, $$scalar, $nbytes - $nread, $nread);
 +        }
 +        if($got_exit_signal) {
 +            logmsg "Error: eXsysread() failure: signalled to die\n";
 +            return 0;
 +        }
 +        if(not defined $rc) {
 +            if($!{EINTR}) {
 +                logmsg "Warning: retrying sysread() interrupted system 
call\n";
 +                next;
 +            }
 +            if($!{EAGAIN}) {
 +                logmsg "Warning: retrying sysread() due to EAGAIN\n";
 +                next;
 +            }
 +            if($!{EWOULDBLOCK}) {
 +                logmsg "Warning: retrying sysread() due to EWOULDBLOCK\n";
 +                next;
 +            }
 +            logmsg "Error: sysread() failure: $!\n";
 +            return 0;
 +        }
 +        if($rc < 0) {
 +            logmsg "Error: sysread() failure: returned negative value $rc\n";
 +            return 0;
 +        }
 +        if($rc == 0) {
 +            logmsg "Error: sysread() failure: read zero bytes\n";
 +            return 0;
 +        }
 +        $nread += $rc;
 +    }
 +    return $nread;
 +}
 +
 +#**********************************************************************
 +# read_mainsockf attempts to read the given amount of output from the
 +# sockfilter which is in use for the main or primary connection. This
 +# reads untranslated sockfilt lingo which may hold data read from the
 +# main or primary socket. On success returns 1, otherwise zero.
 +#
 +sub read_mainsockf {
 +    my $scalar  = shift;
 +    my $nbytes  = shift;
 +    my $timeout = shift; # Optional argument, if zero blocks indefinitely
 +    my $FH = \*SFREAD;
 +
 +    if(not defined $timeout) {
 +        $timeout = $sockfilt_timeout + ($nbytes >> 12);
 +    }
 +    if(eXsysread($FH, $scalar, $nbytes, $timeout) != $nbytes) {
 +        my ($fcaller, $lcaller) = (caller)[1,2];
 +        logmsg "Error: read_mainsockf() failure at $fcaller " .
 +               "line $lcaller. Due to eXsysread() failure\n";
 +        return 0;
 +    }
 +    return 1;
 +}
 +
 +#**********************************************************************
 +# read_datasockf attempts to read the given amount of output from the
 +# sockfilter which is in use for the data or secondary connection. This
 +# reads untranslated sockfilt lingo which may hold data read from the
 +# data or secondary socket. On success returns 1, otherwise zero.
 +#
 +sub read_datasockf {
 +    my $scalar = shift;
 +    my $nbytes = shift;
 +    my $timeout = shift; # Optional argument, if zero blocks indefinitely
 +    my $FH = \*DREAD;
 +
 +    if(not defined $timeout) {
 +        $timeout = $sockfilt_timeout + ($nbytes >> 12);
 +    }
 +    if(eXsysread($FH, $scalar, $nbytes, $timeout) != $nbytes) {
 +        my ($fcaller, $lcaller) = (caller)[1,2];
 +        logmsg "Error: read_datasockf() failure at $fcaller " .
 +               "line $lcaller. Due to eXsysread() failure\n";
 +        return 0;
 +    }
 +    return 1;
 +}
 +
 +sub sysread_or_die {
 +    my $FH     = shift;
 +    my $scalar = shift;
 +    my $length = shift;
 +    my $fcaller;
 +    my $lcaller;
 +    my $result;
 +
 +    $result = sysread($$FH, $$scalar, $length);
 +
 +    if(not defined $result) {
 +        ($fcaller, $lcaller) = (caller)[1,2];
 +        logmsg "Failed to read input\n";
 +        logmsg "Error: $srvrname server, sysread error: $!\n";
 +        logmsg "Exited from sysread_or_die() at $fcaller " .
 +               "line $lcaller. $srvrname server, sysread error: $!\n";
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose);
 +        unlink($pidfile);
 +        unlink($portfile);
 +        if($serverlogslocked) {
 +            $serverlogslocked = 0;
 +            clear_advisor_read_lock($SERVERLOGS_LOCK);
 +        }
 +        exit;
 +    }
 +    elsif($result == 0) {
 +        ($fcaller, $lcaller) = (caller)[1,2];
 +        logmsg "Failed to read input\n";
 +        logmsg "Error: $srvrname server, read zero\n";
 +        logmsg "Exited from sysread_or_die() at $fcaller " .
 +               "line $lcaller. $srvrname server, read zero\n";
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose);
 +        unlink($pidfile);
 +        unlink($portfile);
 +        if($serverlogslocked) {
 +            $serverlogslocked = 0;
 +            clear_advisor_read_lock($SERVERLOGS_LOCK);
 +        }
 +        exit;
 +    }
 +
 +    return $result;
 +}
 +
 +sub startsf {
 +    my $mainsockfcmd = "./server/sockfilt".exe_ext('SRV')." " .
 +        "--ipv$ipvnum --port $port " .
 +        "--pidfile \"$mainsockf_pidfile\" " .
 +        "--portfile \"$portfile\" " .
 +        "--logfile \"$mainsockf_logfile\"";
 +    $sfpid = open2(*SFREAD, *SFWRITE, $mainsockfcmd);
 +
 +    print STDERR "$mainsockfcmd\n" if($verbose);
 +
 +    print SFWRITE "PING\n";
 +    my $pong;
 +    sysread_or_die(\*SFREAD, \$pong, 5);
 +
 +    if($pong !~ /^PONG/) {
 +        logmsg "Failed sockfilt command: $mainsockfcmd\n";
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose);
 +        unlink($pidfile);
 +        unlink($portfile);
 +        if($serverlogslocked) {
 +            $serverlogslocked = 0;
 +            clear_advisor_read_lock($SERVERLOGS_LOCK);
 +        }
 +        die "Failed to start sockfilt!";
 +    }
 +}
 +
 +#**********************************************************************
 +# Returns the given test's reply data
 +#
 +sub getreplydata {
 +    my ($num) = @_;
 +    my $testpart = "";
 +
 +    $num =~ s/^([^0-9]*)//;
 +    if($num > 10000) {
 +       $testpart = $num % 10000;
 +    }
 +
 +    my @data = getpart("reply", "data$testpart");
 +    if((!@data) && ($testpart ne "")) {
 +        @data = getpart("reply", "data");
 +    }
 +
 +    return @data;
 +}
 +
 +sub sockfilt {
 +    my $l;
 +    foreach $l (@_) {
 +        printf SFWRITE "DATA\n%04x\n", length($l);
 +        print SFWRITE $l;
 +    }
 +}
 +
 +sub sockfiltsecondary {
 +    my $l;
 +    foreach $l (@_) {
 +        printf DWRITE "DATA\n%04x\n", length($l);
 +        print DWRITE $l;
 +    }
 +}
 +
 +#**********************************************************************
 +# Send data to the client on the control stream, which happens to be plain
 +# stdout.
 +#
 +sub sendcontrol {
 +    if(!$ctrldelay) {
 +        # spit it all out at once
 +        sockfilt @_;
 +    }
 +    else {
 +        my $a = join("", @_);
 +        my @a = split("", $a);
 +
 +        for(@a) {
 +            sockfilt $_;
 +            portable_sleep(0.01);
 +        }
 +    }
 +    my $log;
 +    foreach $log (@_) {
 +        my $l = $log;
 +        $l =~ s/\r/[CR]/g;
 +        $l =~ s/\n/[LF]/g;
 +        logmsg "> \"$l\"\n";
 +    }
 +}
 +
 +#**********************************************************************
 +# Send data to the FTP client on the data stream when data connection
 +# is actually established. Given that this sub should only be called
 +# when a data connection is supposed to be established, calling this
 +# without a data connection is an indication of weak logic somewhere.
 +#
 +sub senddata {
 +    my $l;
 +    if($datasockf_conn eq 'no') {
 +        logmsg "WARNING: Detected data sending attempt without DATA 
channel\n";
 +        foreach $l (@_) {
 +            logmsg "WARNING: Data swallowed: $l\n"
 +        }
 +        return;
 +    }
 +
 +    foreach $l (@_) {
 +        if(!$datadelay) {
 +            # spit it all out at once
 +            sockfiltsecondary $l;
 +        }
 +        else {
 +            # pause between each byte
 +            for (split(//,$l)) {
 +                sockfiltsecondary $_;
 +                portable_sleep(0.01);
 +            }
 +        }
 +    }
 +}
 +
 +#**********************************************************************
 +# protocolsetup initializes the 'displaytext' and 'commandfunc' hashes
 +# for the given protocol. References to protocol command callbacks are
 +# stored in 'commandfunc' hash, and text which will be returned to the
 +# client before the command callback runs is stored in 'displaytext'.
 +#
 +sub protocolsetup {
 +    my $proto = $_[0];
 +
 +    if($proto eq 'ftp') {
 +        %commandfunc = (
 +            'PORT' => \&PORT_ftp,
 +            'EPRT' => \&PORT_ftp,
 +            'LIST' => \&LIST_ftp,
 +            'NLST' => \&NLST_ftp,
 +            'PASV' => \&PASV_ftp,
 +            'CWD'  => \&CWD_ftp,
 +            'PWD'  => \&PWD_ftp,
 +            'EPSV' => \&PASV_ftp,
 +            'RETR' => \&RETR_ftp,
 +            'SIZE' => \&SIZE_ftp,
 +            'REST' => \&REST_ftp,
 +            'STOR' => \&STOR_ftp,
 +            'APPE' => \&STOR_ftp, # append looks like upload
 +            'MDTM' => \&MDTM_ftp,
 +        );
 +        %displaytext = (
 +            'USER' => '331 We are happy you popped in!',
 +            'PASS' => '230 Welcome you silly person',
 +            'PORT' => '200 You said PORT - I say FINE',
 +            'TYPE' => '200 I modify TYPE as you wanted',
 +            'LIST' => '150 here comes a directory',
 +            'NLST' => '150 here comes a directory',
 +            'CWD'  => '250 CWD command successful.',
 +            'SYST' => '215 UNIX Type: L8', # just fake something
 +            'QUIT' => '221 bye bye baby', # just reply something
 +            'MKD'  => '257 Created your requested directory',
 +            'REST' => '350 Yeah yeah we set it there for you',
 +            'DELE' => '200 OK OK OK whatever you say',
 +            'RNFR' => '350 Received your order. Please provide more',
 +            'RNTO' => '250 Ok, thanks. File renaming completed.',
 +            'NOOP' => '200 Yes, I\'m very good at doing nothing.',
 +            'PBSZ' => '500 PBSZ not implemented',
 +            'PROT' => '500 PROT not implemented',
 +            'welcome' => join("",
 +            '220-        _   _ ____  _     '."\r\n",
 +            '220-    ___| | | |  _ \| |    '."\r\n",
 +            '220-   / __| | | | |_) | |    '."\r\n",
 +            '220-  | (__| |_| |  _ {| |___ '."\r\n",
 +            '220    \___|\___/|_| \_\_____|'."\r\n")
 +        );
 +    }
 +    elsif($proto eq 'pop3') {
 +        %commandfunc = (
 +            'APOP' => \&APOP_pop3,
 +            'AUTH' => \&AUTH_pop3,
 +            'CAPA' => \&CAPA_pop3,
 +            'DELE' => \&DELE_pop3,
 +            'LIST' => \&LIST_pop3,
 +            'NOOP' => \&NOOP_pop3,
 +            'PASS' => \&PASS_pop3,
 +            'QUIT' => \&QUIT_pop3,
 +            'RETR' => \&RETR_pop3,
 +            'RSET' => \&RSET_pop3,
 +            'STAT' => \&STAT_pop3,
 +            'TOP'  => \&TOP_pop3,
 +            'UIDL' => \&UIDL_pop3,
 +            'USER' => \&USER_pop3,
 +        );
 +        %displaytext = (
 +            'welcome' => join("",
 +            '        _   _ ____  _     '."\r\n",
 +            '    ___| | | |  _ \| |    '."\r\n",
 +            '   / __| | | | |_) | |    '."\r\n",
 +            '  | (__| |_| |  _ {| |___ '."\r\n",
 +            '   \___|\___/|_| \_\_____|'."\r\n",
 +            '+OK curl POP3 server ready to serve '."\r\n")
 +        );
 +    }
 +    elsif($proto eq 'imap') {
 +        %commandfunc = (
 +            'APPEND'     => \&APPEND_imap,
 +            'CAPABILITY' => \&CAPABILITY_imap,
 +            'CHECK'      => \&CHECK_imap,
 +            'CLOSE'      => \&CLOSE_imap,
 +            'COPY'       => \&COPY_imap,
 +            'CREATE'     => \&CREATE_imap,
 +            'DELETE'     => \&DELETE_imap,
 +            'EXAMINE'    => \&EXAMINE_imap,
 +            'EXPUNGE'    => \&EXPUNGE_imap,
 +            'FETCH'      => \&FETCH_imap,
 +            'LIST'       => \&LIST_imap,
 +            'LSUB'       => \&LSUB_imap,
 +            'LOGIN'      => \&LOGIN_imap,
 +            'LOGOUT'     => \&LOGOUT_imap,
 +            'NOOP'       => \&NOOP_imap,
 +            'RENAME'     => \&RENAME_imap,
 +            'SEARCH'     => \&SEARCH_imap,
 +            'SELECT'     => \&SELECT_imap,
 +            'STATUS'     => \&STATUS_imap,
 +            'STORE'      => \&STORE_imap,
 +            'UID'        => \&UID_imap,
 +        );
 +        %displaytext = (
 +            'welcome' => join("",
 +            '        _   _ ____  _     '."\r\n",
 +            '    ___| | | |  _ \| |    '."\r\n",
 +            '   / __| | | | |_) | |    '."\r\n",
 +            '  | (__| |_| |  _ {| |___ '."\r\n",
 +            '   \___|\___/|_| \_\_____|'."\r\n",
 +            '* OK curl IMAP server ready to serve'."\r\n")
 +        );
 +    }
 +    elsif($proto eq 'smtp') {
 +        %commandfunc = (
 +            'DATA' => \&DATA_smtp,
 +            'EHLO' => \&EHLO_smtp,
 +            'EXPN' => \&EXPN_smtp,
 +            'HELO' => \&HELO_smtp,
 +            'HELP' => \&HELP_smtp,
 +            'MAIL' => \&MAIL_smtp,
 +            'NOOP' => \&NOOP_smtp,
 +            'RSET' => \&RSET_smtp,
 +            'RCPT' => \&RCPT_smtp,
 +            'VRFY' => \&VRFY_smtp,
 +            'QUIT' => \&QUIT_smtp,
 +        );
 +        %displaytext = (
 +            'welcome' => join("",
 +            '220-        _   _ ____  _     '."\r\n",
 +            '220-    ___| | | |  _ \| |    '."\r\n",
 +            '220-   / __| | | | |_) | |    '."\r\n",
 +            '220-  | (__| |_| |  _ {| |___ '."\r\n",
 +            '220    \___|\___/|_| \_\_____|'."\r\n")
 +        );
 +    }
 +}
 +
 +sub close_dataconn {
 +    my ($closed)=@_; # non-zero if already disconnected
 +
 +    my $datapid = processexists($datasockf_pidfile);
 +
 +    logmsg "=====> Closing $datasockf_mode DATA connection...\n";
 +
 +    if(!$closed) {
 +        if($datapid > 0) {
 +            logmsg "Server disconnects $datasockf_mode DATA connection\n";
 +            print DWRITE "DISC\n";
 +            my $i;
 +            sysread DREAD, $i, 5;
 +            logmsg "Server disconnected $datasockf_mode DATA connection\n";
 +        }
 +        else {
 +            logmsg "Server finds $datasockf_mode DATA connection already ".
 +                   "disconnected\n";
 +        }
 +    }
 +    else {
 +        logmsg "Server knows $datasockf_mode DATA connection is already ".
 +               "disconnected\n";
 +    }
 +
 +    if($datapid > 0) {
 +        logmsg "DATA sockfilt for $datasockf_mode data channel quits ".
 +               "(pid $datapid)\n";
 +        print DWRITE "QUIT\n";
 +        pidwait($datapid, 0);
 +        unlink($datasockf_pidfile) if(-f $datasockf_pidfile);
 +        logmsg "DATA sockfilt for $datasockf_mode data channel quit ".
 +               "(pid $datapid)\n";
 +    }
 +    else {
 +        logmsg "DATA sockfilt for $datasockf_mode data channel already ".
 +               "dead\n";
 +    }
 +
 +    logmsg "=====> Closed $datasockf_mode DATA connection\n";
 +
 +    datasockf_state('STOPPED');
 +}
 +
 +################
 +################ SMTP commands
 +################
 +
 +# The type of server (SMTP or ESMTP)
 +my $smtp_type;
 +
 +# The client (which normally contains the test number)
 +my $smtp_client;
 +
 +sub EHLO_smtp {
 +    my ($client) = @_;
 +    my @data;
 +
 +    # TODO: Get the IP address of the client connection to use in the
 +    # EHLO response when the client doesn't specify one but for now use
 +    # 127.0.0.1
 +    if(!$client) {
 +        $client = "[127.0.0.1]";
 +    }
 +
 +    # Set the server type to ESMTP
 +    $smtp_type = "ESMTP";
 +
 +    # Calculate the EHLO response
 +    push @data, "$smtp_type pingpong test server Hello $client";
 +
 +    if((@capabilities) || (@auth_mechs)) {
 +        my $mechs;
 +
 +        for my $c (@capabilities) {
 +            push @data, $c;
 +        }
 +
 +        for my $am (@auth_mechs) {
 +            if(!$mechs) {
 +                $mechs = "$am";
 +            }
 +            else {
 +                $mechs .= " $am";
 +            }
 +        }
 +
 +        if($mechs) {
 +            push @data, "AUTH $mechs";
 +        }
 +    }
 +
 +    # Send the EHLO response
 +    for(my $i = 0; $i < @data; $i++) {
 +        my $d = $data[$i];
 +
 +        if($i < @data - 1) {
 +            sendcontrol "250-$d\r\n";
 +        }
 +        else {
 +            sendcontrol "250 $d\r\n";
 +        }
 +    }
 +
 +    # Store the client (as it may contain the test number)
 +    $smtp_client = $client;
 +
 +    return 0;
 +}
 +
 +sub HELO_smtp {
 +    my ($client) = @_;
 +
 +    # TODO: Get the IP address of the client connection to use in the HELO
 +    # response when the client doesn't specify one but for now use 127.0.0.1
 +    if(!$client) {
 +        $client = "[127.0.0.1]";
 +    }
 +
 +    # Set the server type to SMTP
 +    $smtp_type = "SMTP";
 +
 +    # Send the HELO response
 +    sendcontrol "250 $smtp_type pingpong test server Hello $client\r\n";
 +
 +    # Store the client (as it may contain the test number)
 +    $smtp_client = $client;
 +
 +    return 0;
 +}
 +
 +sub MAIL_smtp {
 +    my ($args) = @_;
 +
 +    logmsg "MAIL_smtp got $args\n";
 +
 +    if (!$args) {
 +        sendcontrol "501 Unrecognized parameter\r\n";
 +    }
 +    else {
 +        my $from;
 +        my $size;
 +        my $smtputf8 = grep /^SMTPUTF8$/, @capabilities;
 +        my @elements = split(/ /, $args);
 +
 +        # Get the FROM and SIZE parameters
 +        for my $e (@elements) {
 +            if($e =~ /^FROM:(.*)$/) {
 +                $from = $1;
 +            }
 +            elsif($e =~ /^SIZE=(\d+)$/) {
 +                $size = $1;
 +            }
 +        }
 +
 +        # this server doesn't "validate" MAIL FROM addresses
 +        if (length($from)) {
 +            my @found;
 +            my $valid = 1;
 +
 +            # Check the capabilities for SIZE and if the specified size is
 +            # greater than the message size then reject it
 +            if (@found = grep /^SIZE (\d+)$/, @capabilities) {
 +                if ($found[0] =~ /^SIZE (\d+)$/) {
 +                    if ($size > $1) {
 +                        $valid = 0;
 +                    }
 +                }
 +            }
 +
 +            if(!$valid) {
 +                sendcontrol "552 Message size too large\r\n";
 +            }
 +            else {
 +                sendcontrol "250 Sender OK\r\n";
 +            }
 +        }
 +        else {
 +            sendcontrol "501 Invalid address\r\n";
 +        }
 +    }
 +
 +    return 0;
 +}
 +
 +sub RCPT_smtp {
 +    my ($args) = @_;
 +
 +    logmsg "RCPT_smtp got $args\n";
 +
 +    # Get the TO parameter
 +    if($args !~ /^TO:(.*)/) {
 +        sendcontrol "501 Unrecognized parameter\r\n";
 +    }
 +    else {
 +        my $smtputf8 = grep /^SMTPUTF8$/, @capabilities;
 +        my $to = $1;
 +
 +        # Validate the to address (only a valid email address inside <> is
 +        # allowed, such as <user@example.com>)
 +        if ((!$smtputf8 && $to =~
 +              /^<([a-zA-Z0-9._%+-]+)\@(([a-zA-Z0-9-]+)\.)+([a-zA-Z]{2,4})>$/) 
||
 +            ($smtputf8 && $to =~
 +              
/^<([a-zA-Z0-9\x{80}-\x{ff}._%+-]+)\@(([a-zA-Z0-9\x{80}-\x{ff}-]+)\.)+([a-zA-Z]{2,4})>$/))
 {
 +            sendcontrol "250 Recipient OK\r\n";      
 +        }
 +        else {
 +            sendcontrol "501 Invalid address\r\n";
 +        }
 +    }
 +
 +    return 0;
 +}
 +
 +sub DATA_smtp {
 +    my ($args) = @_;
 +
 +    if ($args) {
 +        sendcontrol "501 Unrecognized parameter\r\n";
 +    }
 +    elsif ($smtp_client !~ /^(\d*)$/) {
 +        sendcontrol "501 Invalid arguments\r\n";
 +    }
 +    else {
 +        sendcontrol "354 Show me the mail\r\n";
 +
 +        my $testno = $smtp_client;
 +        my $filename = "log/upload.$testno";
 +
 +        logmsg "Store test number $testno in $filename\n";
 +
 +        open(FILE, ">$filename") ||
 +            return 0; # failed to open output
 +
 +        my $line;
 +        my $ulsize=0;
 +        my $disc=0;
 +        my $raw;
 +        while (5 == (sysread \*SFREAD, $line, 5)) {
 +            if($line eq "DATA\n") {
 +                my $i;
 +                my $eob;
 +                sysread \*SFREAD, $i, 5;
 +
 +                my $size = 0;
 +                if($i =~ /^([0-9a-fA-F]{4})\n/) {
 +                    $size = hex($1);
 +                }
 +
 +                read_mainsockf(\$line, $size);
 +
 +                $ulsize += $size;
 +                print FILE $line if(!$nosave);
 +
 +                $raw .= $line;
 +                if($raw =~ /(?:^|\x0d\x0a)\x2e\x0d\x0a/) {
 +                    # end of data marker!
 +                    $eob = 1;
 +                }
 +
 +                logmsg "> Appending $size bytes to file\n";
 +
 +                if($eob) {
 +                    logmsg "Found SMTP EOB marker\n";
 +                    last;
 +                }
 +            }
 +            elsif($line eq "DISC\n") {
 +                # disconnect!
 +                $disc=1;
 +                last;
 +            }
 +            else {
 +                logmsg "No support for: $line";
 +                last;
 +            }
 +        }
 +
 +        if($nosave) {
 +            print FILE "$ulsize bytes would've been stored here\n";
 +        }
 +
 +        close(FILE);
 +
 +        logmsg "received $ulsize bytes upload\n";
 +
 +        sendcontrol "250 OK, data received!\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub NOOP_smtp {
 +    my ($args) = @_;
 +
 +    if($args) {
 +        sendcontrol "501 Unrecognized parameter\r\n";
 +    }
 +    else {
 +        sendcontrol "250 OK\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub RSET_smtp {
 +    my ($args) = @_;
 +
 +    if($args) {
 +        sendcontrol "501 Unrecognized parameter\r\n";
 +    }
 +    else {
 +        sendcontrol "250 Resetting\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub HELP_smtp {
 +    my ($args) = @_;
 +
 +    # One argument is optional
 +    if($args) {
 +        logmsg "HELP_smtp got $args\n";
 +    }
 +
 +    if($smtp_client eq "verifiedserver") {
 +        # This is the secret command that verifies that this actually is
 +        # the curl test server
 +        sendcontrol "214 WE ROOLZ: $$\r\n";
 +
 +        if($verbose) {
 +            print STDERR "FTPD: We returned proof we are the test server\n";
 +        }
 +
 +        logmsg "return proof we are we\n";
 +    }
 +    else {
 +        sendcontrol "214-This server supports the following commands:\r\n";
 +
 +        if(@auth_mechs) {
 +            sendcontrol "214 HELO EHLO RCPT DATA RSET MAIL VRFY EXPN QUIT 
HELP AUTH\r\n";
 +        }
 +        else {
 +            sendcontrol "214 HELO EHLO RCPT DATA RSET MAIL VRFY EXPN QUIT 
HELP\r\n";
 +        }
 +    }
 +
 +    return 0;
 +}
 +
 +sub VRFY_smtp {
 +    my ($args) = @_;
 +    my ($username, $address) = split(/ /, $args, 2);
 +
 +    logmsg "VRFY_smtp got $args\n";
 +
 +    if($username eq "") {
 +        sendcontrol "501 Unrecognized parameter\r\n";
 +    }
 +    else {
 +        my $smtputf8 = grep /^SMTPUTF8$/, @capabilities;
 +
 +        # Validate the username (only a valid local or external username is
 +        # allowed, such as user or user@example.com)
 +        if ((!$smtputf8 && $username =~
 +            /^([a-zA-Z0-9._%+-]+)(\@(([a-zA-Z0-9-]+)\.)+([a-zA-Z]{2,4}))?$/) 
||
 +            ($smtputf8 && $username =~
 +            
/^([a-zA-Z0-9\x{80}-\x{ff}._%+-]+)(\@(([a-zA-Z0-9\x{80}-\x{ff}-]+)\.)+([a-zA-Z]{2,4}))?$/))
 {
 +
 +            my @data = getreplydata($smtp_client);
 +
 +            if(!@data) {
 +                if ($username !~
 +                    
/^([a-zA-Z0-9._%+-]+)\@(([a-zA-Z0-9-]+)\.)+([a-zA-Z]{2,4})$/) {
 +                  push @data, "250 <$username\@example.com>\r\n"
 +                }
 +                else {
 +                  push @data, "250 <$username>\r\n"
 +                }
 +            }
 +
 +            for my $d (@data) {
 +                sendcontrol $d;
 +            }
 +        }
 +        else {
 +            sendcontrol "501 Invalid address\r\n";
 +        }
 +    }
 +
 +    return 0;
 +}
 +
 +sub EXPN_smtp {
 +    my ($list_name) = @_;
 +
 +    logmsg "EXPN_smtp got $list_name\n";
 +
 +    if(!$list_name) {
 +        sendcontrol "501 Unrecognized parameter\r\n";
 +    }
 +    else {
 +        my @data = getreplydata($smtp_client);
 +
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +    }
 +
 +    return 0;
 +}
 +
 +sub QUIT_smtp {
 +    sendcontrol "221 curl $smtp_type server signing off\r\n";
 +
 +    return 0;
 +}
 +
 +# What was deleted by IMAP STORE / POP3 DELE commands
 +my @deleted;
 +
 +################
 +################ IMAP commands
 +################
 +
 +# global to allow the command functions to read it
 +my $cmdid;
 +
 +# what was picked by SELECT
 +my $selected;
 +
 +# Any IMAP parameter can come in escaped and in double quotes.
 +# This function is dumb (so far) and just removes the quotes if present.
 +sub fix_imap_params {
 +    foreach (@_) {
 +        $_ = $1 if /^"(.*)"$/;
 +    }
 +}
 +
 +sub CAPABILITY_imap {
 +    if((!@capabilities) && (!@auth_mechs)) {
 +        sendcontrol "$cmdid BAD Command\r\n";
 +    }
 +    else {
 +        my $data;
 +
 +        # Calculate the CAPABILITY response
 +        $data = "* CAPABILITY IMAP4";
 +
 +        for my $c (@capabilities) {
 +            $data .= " $c";
 +        }
 +
 +        for my $am (@auth_mechs) {
 +            $data .= " AUTH=$am";
 +        }
 +
 +        $data .= " pingpong test server\r\n";
 +
 +        # Send the CAPABILITY response
 +        sendcontrol $data;
 +        sendcontrol "$cmdid OK CAPABILITY completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub LOGIN_imap {
 +    my ($args) = @_;
 +    my ($user, $password) = split(/ /, $args, 2);
 +    fix_imap_params($user, $password);
 +
 +    logmsg "LOGIN_imap got $args\n";
 +
 +    if ($user eq "") {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        sendcontrol "$cmdid OK LOGIN completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub SELECT_imap {
 +    my ($mailbox) = @_;
 +    fix_imap_params($mailbox);
 +
 +    logmsg "SELECT_imap got test $mailbox\n";
 +
 +    if($mailbox eq "") {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        # Example from RFC 3501, 6.3.1. SELECT Command
 +        sendcontrol "* 172 EXISTS\r\n";
 +        sendcontrol "* 1 RECENT\r\n";
 +        sendcontrol "* OK [UNSEEN 12] Message 12 is first unseen\r\n";
 +        sendcontrol "* OK [UIDVALIDITY 3857529045] UIDs valid\r\n";
 +        sendcontrol "* OK [UIDNEXT 4392] Predicted next UID\r\n";
 +        sendcontrol "* FLAGS (\\Answered \\Flagged \\Deleted \\Seen 
\\Draft)\r\n";
 +        sendcontrol "* OK [PERMANENTFLAGS (\\Deleted \\Seen \\*)] 
Limited\r\n";
 +        sendcontrol "$cmdid OK [READ-WRITE] SELECT completed\r\n";
 +
 +        $selected = $mailbox;
 +    }
 +
 +    return 0;
 +}
 +
 +sub FETCH_imap {
 +    my ($args) = @_;
 +    my ($uid, $how) = split(/ /, $args, 2);
 +    fix_imap_params($uid, $how);
 +
 +    logmsg "FETCH_imap got $args\n";
 +
 +    if ($selected eq "") {
 +        sendcontrol "$cmdid BAD Command received in Invalid state\r\n";
 +    }
 +    else {
 +        my @data;
 +        my $size;
 +
 +        if($selected eq "verifiedserver") {
 +            # this is the secret command that verifies that this actually is
 +            # the curl test server
 +            my $response = "WE ROOLZ: $$\r\n";
 +            if($verbose) {
 +                print STDERR "FTPD: We returned proof we are the test 
server\n";
 +            }
 +            $data[0] = $response;
 +            logmsg "return proof we are we\n";
 +        }
 +        else {
 +            # send mail content
 +            logmsg "retrieve a mail\n";
 +
 +            @data = getreplydata($selected);
 +        }
 +
 +        for (@data) {
 +            $size += length($_);
 +        }
 +
 +        sendcontrol "* $uid FETCH ($how {$size}\r\n";
 +
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        sendcontrol ")\r\n";
 +        sendcontrol "$cmdid OK FETCH completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub APPEND_imap {
 +    my ($args) = @_;
 +
 +    logmsg "APPEND_imap got $args\r\n";
 +
 +    $args =~ /^([^ ]+) [^{]*\{(\d+)\}$/;
 +    my ($mailbox, $size) = ($1, $2);
 +    fix_imap_params($mailbox);
 +
 +    if($mailbox eq "") {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        sendcontrol "+ Ready for literal data\r\n";
 +
 +        my $testno = $mailbox;
 +        my $filename = "log/upload.$testno";
 +
 +        logmsg "Store test number $testno in $filename\n";
 +
 +        open(FILE, ">$filename") ||
 +            return 0; # failed to open output
 +
 +        my $received = 0;
 +        my $line;
 +        while(5 == (sysread \*SFREAD, $line, 5)) {
 +            if($line eq "DATA\n") {
 +                sysread \*SFREAD, $line, 5;
 +
 +                my $chunksize = 0;
 +                if($line =~ /^([0-9a-fA-F]{4})\n/) {
 +                    $chunksize = hex($1);
 +                }
 +
 +                read_mainsockf(\$line, $chunksize);
 +
 +                my $left = $size - $received;
 +                my $datasize = ($left > $chunksize) ? $chunksize : $left;
 +
 +                if($datasize > 0) {
 +                    logmsg "> Appending $datasize bytes to file\n";
 +                    print FILE substr($line, 0, $datasize) if(!$nosave);
 +                    $line = substr($line, $datasize);
 +
 +                    $received += $datasize;
 +                    if($received == $size) {
 +                        logmsg "Received all data, waiting for final CRLF.\n";
 +                    }
 +                }
 +
 +                if($received == $size && $line eq "\r\n") {
 +                    last;
 +                }
 +            }
 +            elsif($line eq "DISC\n") {
 +                logmsg "Unexpected disconnect!\n";
 +                last;
 +            }
 +            else {
 +                logmsg "No support for: $line";
 +                last;
 +            }
 +        }
 +
 +        if($nosave) {
 +            print FILE "$size bytes would've been stored here\n";
 +        }
 +
 +        close(FILE);
 +
 +        logmsg "received $size bytes upload\n";
 +
 +        sendcontrol "$cmdid OK APPEND completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub STORE_imap {
 +    my ($args) = @_;
 +    my ($uid, $what, $value) = split(/ /, $args, 3);
 +    fix_imap_params($uid);
 +
 +    logmsg "STORE_imap got $args\n";
 +
 +    if ($selected eq "") {
 +        sendcontrol "$cmdid BAD Command received in Invalid state\r\n";
 +    }
 +    elsif (($uid eq "") || ($what ne "+Flags") || ($value eq "")) {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        if($value eq "\\Deleted") {
 +            push(@deleted, $uid);
 +        }
 +
 +        sendcontrol "* $uid FETCH (FLAGS (\\Seen $value))\r\n";
 +        sendcontrol "$cmdid OK STORE completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub LIST_imap {
 +    my ($args) = @_;
 +    my ($reference, $mailbox) = split(/ /, $args, 2);
 +    fix_imap_params($reference, $mailbox);
 +
 +    logmsg "LIST_imap got $args\n";
 +
 +    if ($reference eq "") {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    elsif ($reference eq "verifiedserver") {
 +        # this is the secret command that verifies that this actually is
 +        # the curl test server
 +        sendcontrol "* LIST () \"/\" \"WE ROOLZ: $$\"\r\n";
 +        sendcontrol "$cmdid OK LIST Completed\r\n";
 +
 +        if($verbose) {
 +            print STDERR "FTPD: We returned proof we are the test server\n";
 +        }
 +
 +        logmsg "return proof we are we\n";
 +    }
 +    else {
 +        my @data = getreplydata($reference);
 +
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        sendcontrol "$cmdid OK LIST Completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub LSUB_imap {
 +    my ($args) = @_;
 +    my ($reference, $mailbox) = split(/ /, $args, 2);
 +    fix_imap_params($reference, $mailbox);
 +
 +    logmsg "LSUB_imap got $args\n";
 +
 +    if ($reference eq "") {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        my @data = getreplydata($reference);
 +
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        sendcontrol "$cmdid OK LSUB Completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub EXAMINE_imap {
 +    my ($mailbox) = @_;
 +    fix_imap_params($mailbox);
 +
 +    logmsg "EXAMINE_imap got $mailbox\n";
 +
 +    if ($mailbox eq "") {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        my @data = getreplydata($mailbox);
 +
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        sendcontrol "$cmdid OK [READ-ONLY] EXAMINE completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub STATUS_imap {
 +    my ($args) = @_;
 +    my ($mailbox, $what) = split(/ /, $args, 2);
 +    fix_imap_params($mailbox);
 +
 +    logmsg "STATUS_imap got $args\n";
 +
 +    if ($mailbox eq "") {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        my @data = getreplydata($mailbox);
 +
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        sendcontrol "$cmdid OK STATUS completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub SEARCH_imap {
 +    my ($what) = @_;
 +    fix_imap_params($what);
 +
 +    logmsg "SEARCH_imap got $what\n";
 +
 +    if ($selected eq "") {
 +        sendcontrol "$cmdid BAD Command received in Invalid state\r\n";
 +    }
 +    elsif ($what eq "") {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        my @data = getreplydata($selected);
 +
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        sendcontrol "$cmdid OK SEARCH completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub CREATE_imap {
 +    my ($args) = @_;
 +    fix_imap_params($args);
 +
 +    logmsg "CREATE_imap got $args\n";
 +
 +    if ($args eq "") {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        sendcontrol "$cmdid OK CREATE completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub DELETE_imap {
 +    my ($args) = @_;
 +    fix_imap_params($args);
 +
 +    logmsg "DELETE_imap got $args\n";
 +
 +    if ($args eq "") {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        sendcontrol "$cmdid OK DELETE completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub RENAME_imap {
 +    my ($args) = @_;
 +    my ($from_mailbox, $to_mailbox) = split(/ /, $args, 2);
 +    fix_imap_params($from_mailbox, $to_mailbox);
 +
 +    logmsg "RENAME_imap got $args\n";
 +
 +    if (($from_mailbox eq "") || ($to_mailbox eq "")) {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        sendcontrol "$cmdid OK RENAME completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub CHECK_imap {
 +    if ($selected eq "") {
 +        sendcontrol "$cmdid BAD Command received in Invalid state\r\n";
 +    }
 +    else {
 +        sendcontrol "$cmdid OK CHECK completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub CLOSE_imap {
 +    if ($selected eq "") {
 +        sendcontrol "$cmdid BAD Command received in Invalid state\r\n";
 +    }
 +    elsif (!@deleted) {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        sendcontrol "$cmdid OK CLOSE completed\r\n";
 +
 +        @deleted = ();
 +    }
 +
 +    return 0;
 +}
 +
 +sub EXPUNGE_imap {
 +    if ($selected eq "") {
 +        sendcontrol "$cmdid BAD Command received in Invalid state\r\n";
 +    }
 +    else {
 +        if (!@deleted) {
 +            # Report the number of existing messages as per the SELECT
 +            # command
 +            sendcontrol "* 172 EXISTS\r\n";
 +        }
 +        else {
 +            # Report the message UIDs being deleted
 +            for my $d (@deleted) {
 +                sendcontrol "* $d EXPUNGE\r\n";
 +            }
 +
 +            @deleted = ();
 +        }
 +
 +        sendcontrol "$cmdid OK EXPUNGE completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub COPY_imap {
 +    my ($args) = @_;
 +    my ($uid, $mailbox) = split(/ /, $args, 2);
 +    fix_imap_params($uid, $mailbox);
 +
 +    logmsg "COPY_imap got $args\n";
 +
 +    if (($uid eq "") || ($mailbox eq "")) {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        sendcontrol "$cmdid OK COPY completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub UID_imap {
 +    my ($args) = @_;
 +    my ($command) = split(/ /, $args, 1);
 +    fix_imap_params($command);
 +
 +    logmsg "UID_imap got $args\n";
 +
 +    if ($selected eq "") {
 +        sendcontrol "$cmdid BAD Command received in Invalid state\r\n";
 +    }
 +    elsif (substr($command, 0, 5) eq "FETCH"){
 +        my $func = $commandfunc{"FETCH"};
 +        if($func) {
 +            &$func($args, $command);
 +        }
 +    }
 +    elsif (($command ne "COPY") &&
 +           ($command ne "STORE") && ($command ne "SEARCH")) {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        my @data = getreplydata($selected);
 +
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        sendcontrol "$cmdid OK $command completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub NOOP_imap {
 +    my ($args) = @_;
 +    my @data = (
 +        "* 22 EXPUNGE\r\n",
 +        "* 23 EXISTS\r\n",
 +        "* 3 RECENT\r\n",
 +        "* 14 FETCH (FLAGS (\\Seen \\Deleted))\r\n",
 +    );
 +
 +    if ($args) {
 +        sendcontrol "$cmdid BAD Command Argument\r\n";
 +    }
 +    else {
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        sendcontrol "$cmdid OK NOOP completed\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub LOGOUT_imap {
 +    sendcontrol "* BYE curl IMAP server signing off\r\n";
 +    sendcontrol "$cmdid OK LOGOUT completed\r\n";
 +
 +    return 0;
 +}
 +
 +################
 +################ POP3 commands
 +################
 +
 +# Who is attempting to log in
 +my $username;
 +
 +sub CAPA_pop3 {
 +    my @list = ();
 +    my $mechs;
 +
 +    # Calculate the capability list based on the specified capabilities
 +    # (except APOP) and any authentication mechanisms
 +    for my $c (@capabilities) {
 +        push @list, "$c\r\n" unless $c eq "APOP";
 +    }
 +
 +    for my $am (@auth_mechs) {
 +        if(!$mechs) {
 +            $mechs = "$am";
 +        }
 +        else {
 +            $mechs .= " $am";
 +        }
 +    }
 +
 +    if($mechs) {
 +        push @list, "SASL $mechs\r\n";
 +    }
 +
 +    if(!@list) {
 +        sendcontrol "-ERR Unrecognized command\r\n";
 +    }
 +    else {
 +        my @data = ();
 +
 +        # Calculate the CAPA response
 +        push @data, "+OK List of capabilities follows\r\n";
 +
 +        for my $l (@list) {
 +            push @data, "$l\r\n";
 +        }
 +
 +        push @data, "IMPLEMENTATION POP3 pingpong test server\r\n";
 +
 +        # Send the CAPA response
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        # End with the magic 3-byte end of listing marker
 +        sendcontrol ".\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub APOP_pop3 {
 +    my ($args) = @_;
 +    my ($user, $secret) = split(/ /, $args, 2);
 +
 +    if (!grep /^APOP$/, @capabilities) {
 +        sendcontrol "-ERR Unrecognized command\r\n";
 +    }
 +    elsif (($user eq "") || ($secret eq "")) {
 +        sendcontrol "-ERR Protocol error\r\n";
 +    }
 +    else {
 +        my $digest = Digest::MD5::md5_hex($POP3_TIMESTAMP, $TEXT_PASSWORD);
 +
 +        if ($secret ne $digest) {
 +            sendcontrol "-ERR Login failure\r\n";
 +        }
 +        else {
 +            sendcontrol "+OK Login successful\r\n";
 +        }
 +    }
 +
 +    return 0;
 +}
 +
 +sub AUTH_pop3 {
 +    if(!@auth_mechs) {
 +        sendcontrol "-ERR Unrecognized command\r\n";
 +    }
 +    else {
 +        my @data = ();
 +
 +        # Calculate the AUTH response
 +        push @data, "+OK List of supported mechanisms follows\r\n";
 +
 +        for my $am (@auth_mechs) {
 +            push @data, "$am\r\n";
 +        }
 +
 +        # Send the AUTH response
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        # End with the magic 3-byte end of listing marker
 +        sendcontrol ".\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub USER_pop3 {
 +    my ($user) = @_;
 +
 +    logmsg "USER_pop3 got $user\n";
 +
 +    if (!$user) {
 +        sendcontrol "-ERR Protocol error\r\n";
 +    }
 +    else {
 +        $username = $user;
 +
 +        sendcontrol "+OK\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub PASS_pop3 {
 +    my ($password) = @_;
 +
 +    logmsg "PASS_pop3 got $password\n";
 +
 +    sendcontrol "+OK Login successful\r\n";
 +
 +    return 0;
 +}
 +
 +sub RETR_pop3 {
 +    my ($msgid) = @_;
 +    my @data;
 +
 +    if($msgid =~ /^verifiedserver$/) {
 +        # this is the secret command that verifies that this actually is
 +        # the curl test server
 +        my $response = "WE ROOLZ: $$\r\n";
 +        if($verbose) {
 +            print STDERR "FTPD: We returned proof we are the test server\n";
 +        }
 +        $data[0] = $response;
 +        logmsg "return proof we are we\n";
 +    }
 +    else {
 +        # send mail content
 +        logmsg "retrieve a mail\n";
 +
 +        @data = getreplydata($msgid);
 +    }
 +
 +    sendcontrol "+OK Mail transfer starts\r\n";
 +
 +    for my $d (@data) {
 +        sendcontrol $d;
 +    }
 +
 +    # end with the magic 3-byte end of mail marker, assumes that the
 +    # mail body ends with a CRLF!
 +    sendcontrol ".\r\n";
 +
 +    return 0;
 +}
 +
 +sub LIST_pop3 {
 +    # This is a built-in fake-message list
 +    my @data = (
 +        "1 100\r\n",
 +        "2 4294967400\r\n",   # > 4 GB
 +        "3 200\r\n",
 +    );
 +
 +    logmsg "retrieve a message list\n";
 +
 +    sendcontrol "+OK Listing starts\r\n";
 +
 +    for my $d (@data) {
 +        sendcontrol $d;
 +    }
 +
 +    # End with the magic 3-byte end of listing marker
 +    sendcontrol ".\r\n";
 +
 +    return 0;
 +}
 +
 +sub DELE_pop3 {
 +    my ($msgid) = @_;
 +
 +    logmsg "DELE_pop3 got $msgid\n";
 +
 +    if (!$msgid) {
 +        sendcontrol "-ERR Protocol error\r\n";
 +    }
 +    else {
 +        push (@deleted, $msgid);
 +
 +        sendcontrol "+OK\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub STAT_pop3 {
 +    my ($args) = @_;
 +
 +    if ($args) {
 +        sendcontrol "-ERR Protocol error\r\n";
 +    }
 +    else {
 +        # Send statistics for the built-in fake message list as
 +        # detailed in the LIST_pop3 function above
 +        sendcontrol "+OK 3 4294967800\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub NOOP_pop3 {
 +    my ($args) = @_;
 +
 +    if ($args) {
 +        sendcontrol "-ERR Protocol error\r\n";
 +    }
 +    else {
 +        sendcontrol "+OK\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub UIDL_pop3 {
 +    # This is a built-in fake-message UID list
 +    my @data = (
 +        "1 1\r\n",
 +        "2 2\r\n",
 +        "3 4\r\n", # Note that UID 3 is a simulated "deleted" message
 +    );
 +
 +    if (!grep /^UIDL$/, @capabilities) {
 +        sendcontrol "-ERR Unrecognized command\r\n";
 +    }
 +    else {
 +        logmsg "retrieve a message UID list\n";
 +
 +        sendcontrol "+OK Listing starts\r\n";
 +
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        # End with the magic 3-byte end of listing marker
 +        sendcontrol ".\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub TOP_pop3 {
 +    my ($args) = @_;
 +    my ($msgid, $lines) = split(/ /, $args, 2);
 +
 +    logmsg "TOP_pop3 got $args\n";
 +
 +    if (!grep /^TOP$/, @capabilities) {
 +        sendcontrol "-ERR Unrecognized command\r\n";
 +    }
 +    elsif (($msgid eq "") || ($lines eq "")) {
 +        sendcontrol "-ERR Protocol error\r\n";
 +    }
 +    else {
 +        if ($lines == "0") {
 +            logmsg "retrieve header of mail\n";
 +        }
 +        else {
 +            logmsg "retrieve top $lines lines of mail\n";
 +        }
 +
 +        my @data = getreplydata($msgid);
 +
 +        sendcontrol "+OK Mail transfer starts\r\n";
 +
 +        # Send mail content
 +        for my $d (@data) {
 +            sendcontrol $d;
 +        }
 +
 +        # End with the magic 3-byte end of mail marker, assumes that the
 +        # mail body ends with a CRLF!
 +        sendcontrol ".\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub RSET_pop3 {
 +    my ($args) = @_;
 +
 +    if ($args) {
 +        sendcontrol "-ERR Protocol error\r\n";
 +    }
 +    else {
 +        if (@deleted) {
 +            logmsg "resetting @deleted message(s)\n";
 +
 +            @deleted = ();
 +        }
 +
 +        sendcontrol "+OK\r\n";
 +    }
 +
 +    return 0;
 +}
 +
 +sub QUIT_pop3 {
 +    if(@deleted) {
 +        logmsg "deleting @deleted message(s)\n";
 +
 +        @deleted = ();
 +    }
 +
 +    sendcontrol "+OK curl POP3 server signing off\r\n";
 +
 +    return 0;
 +}
 +
 +################
 +################ FTP commands
 +################
 +my $rest=0;
 +sub REST_ftp {
 +    $rest = $_[0];
 +    logmsg "Set REST position to $rest\n"
 +}
 +
 +sub switch_directory_goto {
 +  my $target_dir = $_;
 +
 +  if(!$ftptargetdir) {
 +    $ftptargetdir = "/";
 +  }
 +
 +  if($target_dir eq "") {
 +    $ftptargetdir = "/";
 +  }
 +  elsif($target_dir eq "..") {
 +    if($ftptargetdir eq "/") {
 +      $ftptargetdir = "/";
 +    }
 +    else {
 +      $ftptargetdir =~ s/[[:alnum:]]+\/$//;
 +    }
 +  }
 +  else {
 +    $ftptargetdir .= $target_dir . "/";
 +  }
 +}
 +
 +sub switch_directory {
 +    my $target_dir = $_[0];
 +
 +    if($target_dir =~ /^test-(\d+)/) {
 +        $cwd_testno = $1;
 +    }
 +    elsif($target_dir eq "/") {
 +        $ftptargetdir = "/";
 +    }
 +    else {
 +        my @dirs = split("/", $target_dir);
 +        for(@dirs) {
 +          switch_directory_goto($_);
 +        }
 +    }
 +}
 +
 +sub CWD_ftp {
 +  my ($folder, $fullcommand) = $_[0];
 +  switch_directory($folder);
 +  if($ftptargetdir =~ /^\/fully_simulated/) {
 +    $ftplistparserstate = "enabled";
 +  }
 +  else {
 +    undef $ftplistparserstate;
 +  }
 +}
 +
 +sub PWD_ftp {
 +    my $mydir;
 +    $mydir = $ftptargetdir ? $ftptargetdir : "/";
 +
 +    if($mydir ne "/") {
 +        $mydir =~ s/\/$//;
 +    }
 +    sendcontrol "257 \"$mydir\" is current directory\r\n";
 +}
 +
 +sub LIST_ftp {
 +    #  print "150 ASCII data connection for /bin/ls (193.15.23.1,59196) (0 
bytes)\r\n";
 +
 +# this is a built-in fake-dir ;-)
 +my @ftpdir=("total 20\r\n",
 +"drwxr-xr-x   8 98       98           512 Oct 22 13:06 .\r\n",
 +"drwxr-xr-x   8 98       98           512 Oct 22 13:06 ..\r\n",
 +"drwxr-xr-x   2 98       98           512 May  2  1996 .NeXT\r\n",
 +"-r--r--r--   1 0        1             35 Jul 16  1996 README\r\n",
 +"lrwxrwxrwx   1 0        1              7 Dec  9  1999 bin -> usr/bin\r\n",
 +"dr-xr-xr-x   2 0        1            512 Oct  1  1997 dev\r\n",
 +"drwxrwxrwx   2 98       98           512 May 29 16:04 download.html\r\n",
 +"dr-xr-xr-x   2 0        1            512 Nov 30  1995 etc\r\n",
 +"drwxrwxrwx   2 98       1            512 Oct 30 14:33 pub\r\n",
 +"dr-xr-xr-x   5 0        1            512 Oct  1  1997 usr\r\n");
 +
 +    if($datasockf_conn eq 'no') {
 +        if($nodataconn425) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            sendcontrol "425 Can't open data connection\r\n";
 +        }
 +        elsif($nodataconn421) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            sendcontrol "421 Connection timed out\r\n";
 +        }
 +        elsif($nodataconn150) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            # client shall timeout
 +        }
 +        else {
 +            # client shall timeout
 +        }
 +        return 0;
 +    }
 +
 +    if($ftplistparserstate) {
 +      @ftpdir = ftp_contentlist($ftptargetdir);
 +    }
 +
 +    logmsg "pass LIST data on data connection\n";
 +
 +    if($cwd_testno) {
 +        loadtest("$logdir/test$cwd_testno") ||
 +            loadtest("$srcdir/data/test$cwd_testno");
 +
 +        my @data = getpart("reply", "data");
 +        for(@data) {
 +            my $send = $_;
 +            # convert all \n to \r\n for ASCII transfer
 +            $send =~ s/\r\n/\n/g;
 +            $send =~ s/\n/\r\n/g;
 +            logmsg "send $send as data\n";
 +            senddata $send;
 +        }
 +        $cwd_testno = 0; # forget it again
 +    }
 +    else {
 +        # old hard-coded style
 +        for(@ftpdir) {
 +            senddata $_;
 +        }
 +    }
 +    close_dataconn(0);
 +    sendcontrol "226 ASCII transfer complete\r\n";
 +    return 0;
 +}
 +
 +sub NLST_ftp {
 +    my @ftpdir=("file", "with space", "fake", "..", " ..", "funny", "README");
 +
 +    if($datasockf_conn eq 'no') {
 +        if($nodataconn425) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            sendcontrol "425 Can't open data connection\r\n";
 +        }
 +        elsif($nodataconn421) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            sendcontrol "421 Connection timed out\r\n";
 +        }
 +        elsif($nodataconn150) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            # client shall timeout
 +        }
 +        else {
 +            # client shall timeout
 +        }
 +        return 0;
 +    }
 +
 +    logmsg "pass NLST data on data connection\n";
 +    for(@ftpdir) {
 +        senddata "$_\r\n";
 +    }
 +    close_dataconn(0);
 +    sendcontrol "226 ASCII transfer complete\r\n";
 +    return 0;
 +}
 +
 +sub MDTM_ftp {
 +    my $testno = $_[0];
 +    my $testpart = "";
 +    if ($testno > 10000) {
 +        $testpart = $testno % 10000;
 +        $testno = int($testno / 10000);
 +    }
 +
 +    loadtest("$logdir/test$testno") ||
 +        loadtest("$srcdir/data/test$testno");
 +
 +    my @data = getpart("reply", "mdtm");
 +
 +    my $reply = $data[0];
 +    chomp $reply if($reply);
 +
 +    if($reply && ($reply =~ /^[+-]?\d+$/) && ($reply < 0)) {
 +        sendcontrol "550 $testno: no such file.\r\n";
 +    }
 +    elsif($reply) {
 +        sendcontrol "$reply\r\n";
 +    }
 +    else {
 +        sendcontrol "500 MDTM: no such command.\r\n";
 +    }
 +    return 0;
 +}
 +
 +sub SIZE_ftp {
 +    my $testno = $_[0];
 +    if($ftplistparserstate) {
 +        my $size = wildcard_filesize($ftptargetdir, $testno);
 +        if($size == -1) {
 +            sendcontrol "550 $testno: No such file or directory.\r\n";
 +        }
 +        else {
 +            sendcontrol "213 $size\r\n";
 +        }
 +        return 0;
 +    }
 +
 +    if($testno =~ /^verifiedserver$/) {
 +        my $response = "WE ROOLZ: $$\r\n";
 +        my $size = length($response);
 +        sendcontrol "213 $size\r\n";
 +        return 0;
 +    }
 +
 +    if($testno =~ /(\d+)\/?$/) {
 +        $testno = $1;
 +    }
 +    else {
 +        print STDERR "SIZE_ftp: invalid test number: $testno\n";
 +        return 1;
 +    }
 +
 +    my $testpart = "";
 +    if($testno > 10000) {
 +        $testpart = $testno % 10000;
 +        $testno = int($testno / 10000);
 +    }
 +
 +    loadtest("$logdir/test$testno") ||
 +        loadtest("$srcdir/data/test$testno");
 +
 +    my @data = getpart("reply", "size");
 +
 +    my $size = $data[0];
 +
 +    if($size) {
 +        if($size > -1) {
 +            sendcontrol "213 $size\r\n";
 +        }
 +        else {
 +            sendcontrol "550 $testno: No such file or directory.\r\n";
 +        }
 +    }
 +    else {
 +        $size=0;
 +        @data = getpart("reply", "data$testpart");
 +        for(@data) {
 +            $size += length($_);
 +        }
 +        if($size) {
 +            sendcontrol "213 $size\r\n";
 +        }
 +        else {
 +            sendcontrol "550 $testno: No such file or directory.\r\n";
 +        }
 +    }
 +    return 0;
 +}
 +
 +sub RETR_ftp {
 +    my ($testno) = @_;
 +
 +    if($datasockf_conn eq 'no') {
 +        if($nodataconn425) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            sendcontrol "425 Can't open data connection\r\n";
 +        }
 +        elsif($nodataconn421) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            sendcontrol "421 Connection timed out\r\n";
 +        }
 +        elsif($nodataconn150) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            # client shall timeout
 +        }
 +        else {
 +            # client shall timeout
 +        }
 +        return 0;
 +    }
 +
 +    if($ftplistparserstate) {
 +        my @content = wildcard_getfile($ftptargetdir, $testno);
 +        if($content[0] == -1) {
 +            #file not found
 +        }
 +        else {
 +            my $size = length $content[1];
 +            sendcontrol "150 Binary data connection for $testno ($size 
bytes).\r\n",
 +            senddata $content[1];
 +            close_dataconn(0);
 +            sendcontrol "226 File transfer complete\r\n";
 +        }
 +        return 0;
 +    }
 +
 +    if($testno =~ /^verifiedserver$/) {
 +        # this is the secret command that verifies that this actually is
 +        # the curl test server
 +        my $response = "WE ROOLZ: $$\r\n";
 +        my $len = length($response);
 +        sendcontrol "150 Binary junk ($len bytes).\r\n";
 +        senddata "WE ROOLZ: $$\r\n";
 +        close_dataconn(0);
 +        sendcontrol "226 File transfer complete\r\n";
 +        if($verbose) {
 +            print STDERR "FTPD: We returned proof we are the test server\n";
 +        }
 +        return 0;
 +    }
 +
 +    $testno =~ s/^([^0-9]*)//;
 +    my $testpart = "";
 +    if ($testno > 10000) {
 +        $testpart = $testno % 10000;
 +        $testno = int($testno / 10000);
 +    }
 +
 +    loadtest("$logdir/test$testno") ||
 +        loadtest("$srcdir/data/test$testno");
 +
 +    my @data = getpart("reply", "data$testpart");
 +
 +    my $size=0;
 +    for(@data) {
 +        $size += length($_);
 +    }
 +
 +    my %hash = getpartattr("reply", "data$testpart");
 +
 +    if($size || $hash{'sendzero'}) {
 +
 +        if($rest) {
 +            # move read pointer forward
 +            $size -= $rest;
 +            logmsg "REST $rest was removed from size, makes $size left\n";
 +            $rest = 0; # reset REST offset again
 +        }
 +        if($retrweirdo) {
 +            sendcontrol "150 Binary data connection for $testno () ($size 
bytes).\r\n",
 +            "226 File transfer complete\r\n";
 +
 +            for(@data) {
 +                my $send = $_;
 +                senddata $send;
 +            }
 +            close_dataconn(0);
 +            $retrweirdo=0; # switch off the weirdo again!
 +        }
 +        else {
 +            my $sz = "($size bytes)";
 +            if($retrnosize) {
 +                $sz = "size?";
 +            }
 +
 +            sendcontrol "150 Binary data connection for $testno () $sz.\r\n";
 +
 +            for(@data) {
 +                my $send = $_;
 +                senddata $send;
 +            }
 +            close_dataconn(0);
 +            sendcontrol "226 File transfer complete\r\n";
 +        }
 +    }
 +    else {
 +        sendcontrol "550 $testno: No such file or directory.\r\n";
 +    }
 +    return 0;
 +}
 +
 +sub STOR_ftp {
 +    my $testno=$_[0];
 +
 +    my $filename = "log/upload.$testno";
 +
 +    if($datasockf_conn eq 'no') {
 +        if($nodataconn425) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            sendcontrol "425 Can't open data connection\r\n";
 +        }
 +        elsif($nodataconn421) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            sendcontrol "421 Connection timed out\r\n";
 +        }
 +        elsif($nodataconn150) {
 +            sendcontrol "150 Opening data connection\r\n";
 +            # client shall timeout
 +        }
 +        else {
 +            # client shall timeout
 +        }
 +        return 0;
 +    }
 +
 +    logmsg "STOR test number $testno in $filename\n";
 +
 +    sendcontrol "125 Gimme gimme gimme!\r\n";
 +
 +    open(FILE, ">$filename") ||
 +        return 0; # failed to open output
 +
 +    my $line;
 +    my $ulsize=0;
 +    my $disc=0;
 +    while (5 == (sysread DREAD, $line, 5)) {
 +        if($line eq "DATA\n") {
 +            my $i;
 +            sysread DREAD, $i, 5;
 +
 +            my $size = 0;
 +            if($i =~ /^([0-9a-fA-F]{4})\n/) {
 +                $size = hex($1);
 +            }
 +
 +            read_datasockf(\$line, $size);
 +
 +            #print STDERR "  GOT: $size bytes\n";
 +
 +            $ulsize += $size;
 +            print FILE $line if(!$nosave);
 +            logmsg "> Appending $size bytes to file\n";
 +        }
 +        elsif($line eq "DISC\n") {
 +            # disconnect!
 +            $disc=1;
 +            last;
 +        }
 +        else {
 +            logmsg "No support for: $line";
 +            last;
 +        }
++        if($storeresp) {
++            # abort early
++            last;
++        }
 +    }
 +    if($nosave) {
 +        print FILE "$ulsize bytes would've been stored here\n";
 +    }
 +    close(FILE);
 +    close_dataconn($disc);
 +    logmsg "received $ulsize bytes upload\n";
-     sendcontrol "226 File transfer complete\r\n";
++    if($storeresp) {
++        sendcontrol "$storeresp\r\n";
++    }
++    else {
++        sendcontrol "226 File transfer complete\r\n";
++    }
 +    return 0;
 +}
 +
 +sub PASV_ftp {
 +    my ($arg, $cmd)=@_;
 +    my $pasvport;
 +    my $bindonly = ($nodataconn) ? '--bindonly' : '';
 +
 +    # kill previous data connection sockfilt when alive
 +    if($datasockf_runs eq 'yes') {
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
 +        logmsg "DATA sockfilt for $datasockf_mode data channel killed\n";
 +    }
 +    datasockf_state('STOPPED');
 +
 +    logmsg "====> Passive DATA channel requested by client\n";
 +
 +    logmsg "DATA sockfilt for passive data channel starting...\n";
 +
 +    # We fire up a new sockfilt to do the data transfer for us.
 +    my $datasockfcmd = "./server/sockfilt".exe_ext('SRV')." " .
 +        "--ipv$ipvnum $bindonly --port 0 " .
 +        "--pidfile \"$datasockf_pidfile\" " .
 +        "--logfile \"$datasockf_logfile\"";
 +    $slavepid = open2(\*DREAD, \*DWRITE, $datasockfcmd);
 +
 +    if($nodataconn) {
 +        datasockf_state('PASSIVE_NODATACONN');
 +    }
 +    else {
 +        datasockf_state('PASSIVE');
 +    }
 +
 +    print STDERR "$datasockfcmd\n" if($verbose);
 +
 +    print DWRITE "PING\n";
 +    my $pong;
 +    sysread_or_die(\*DREAD, \$pong, 5);
 +
 +    if($pong =~ /^FAIL/) {
 +        logmsg "DATA sockfilt said: FAIL\n";
 +        logmsg "DATA sockfilt for passive data channel failed\n";
 +        logmsg "DATA sockfilt not running\n";
 +        datasockf_state('STOPPED');
 +        sendcontrol "500 no free ports!\r\n";
 +        return;
 +    }
 +    elsif($pong !~ /^PONG/) {
 +        logmsg "DATA sockfilt unexpected response: $pong\n";
 +        logmsg "DATA sockfilt for passive data channel failed\n";
 +        logmsg "DATA sockfilt killed now\n";
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
 +        logmsg "DATA sockfilt not running\n";
 +        datasockf_state('STOPPED');
 +        sendcontrol "500 no free ports!\r\n";
 +        return;
 +    }
 +
 +    logmsg "DATA sockfilt for passive data channel started (pid $slavepid)\n";
 +
 +    # Find out on what port we listen on or have bound
 +    my $i;
 +    print DWRITE "PORT\n";
 +
 +    # READ the response code
 +    sysread_or_die(\*DREAD, \$i, 5);
 +
 +    # READ the response size
 +    sysread_or_die(\*DREAD, \$i, 5);
 +
 +    my $size = 0;
 +    if($i =~ /^([0-9a-fA-F]{4})\n/) {
 +        $size = hex($1);
 +    }
 +
 +    # READ the response data
 +    read_datasockf(\$i, $size);
 +
 +    # The data is in the format
 +    # IPvX/NNN
 +
 +    if($i =~ /IPv(\d)\/(\d+)/) {
 +        # FIX: deal with IP protocol version
 +        $pasvport = $2;
 +    }
 +
 +    if(!$pasvport) {
 +        logmsg "DATA sockfilt unknown listener port\n";
 +        logmsg "DATA sockfilt for passive data channel failed\n";
 +        logmsg "DATA sockfilt killed now\n";
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
 +        logmsg "DATA sockfilt not running\n";
 +        datasockf_state('STOPPED');
 +        sendcontrol "500 no free ports!\r\n";
 +        return;
 +    }
 +
 +    if($nodataconn) {
 +        my $str = nodataconn_str();
 +        logmsg "DATA sockfilt for passive data channel ($str) bound on port ".
 +               "$pasvport\n";
 +    }
 +    else {
 +        logmsg "DATA sockfilt for passive data channel listens on port ".
 +               "$pasvport\n";
 +    }
 +
 +    if($cmd ne "EPSV") {
 +        # PASV reply
 +        my $p=$listenaddr;
 +        $p =~ s/\./,/g;
 +        if($pasvbadip) {
 +            $p="1,2,3,4";
 +        }
 +        sendcontrol sprintf("227 Entering Passive Mode ($p,%d,%d)\n",
 +                            int($pasvport/256), int($pasvport%256));
 +    }
 +    else {
 +        # EPSV reply
 +        sendcontrol sprintf("229 Entering Passive Mode (|||%d|)\n", 
$pasvport);
 +    }
 +
 +    logmsg "Client has been notified that DATA conn ".
 +           "will be accepted on port $pasvport\n";
 +
 +    if($nodataconn) {
 +        my $str = nodataconn_str();
 +        logmsg "====> Client fooled ($str)\n";
 +        return;
 +    }
 +
 +    eval {
 +        local $SIG{ALRM} = sub { die "alarm\n" };
 +
 +        # assume swift operations unless explicitly slow
 +        alarm ($datadelay?20:10);
 +
 +        # Wait for 'CNCT'
 +        my $input;
 +
 +        # FIX: Monitor ctrl conn for disconnect
 +
 +        while(sysread(DREAD, $input, 5)) {
 +
 +            if($input !~ /^CNCT/) {
 +                # we wait for a connected client
 +                logmsg "Odd, we got $input from client\n";
 +                next;
 +            }
 +            logmsg "Client connects to port $pasvport\n";
 +            last;
 +        }
 +        alarm 0;
 +    };
 +    if ($@) {
 +        # timed out
 +        logmsg "$srvrname server timed out awaiting data connection ".
 +            "on port $pasvport\n";
 +        logmsg "accept failed or connection not even attempted\n";
 +        logmsg "DATA sockfilt killed now\n";
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
 +        logmsg "DATA sockfilt not running\n";
 +        datasockf_state('STOPPED');
 +        return;
 +    }
 +    else {
 +        logmsg "====> Client established passive DATA connection ".
 +               "on port $pasvport\n";
 +    }
 +
 +    return;
 +}
 +
 +#
 +# Support both PORT and EPRT here.
 +#
 +
 +sub PORT_ftp {
 +    my ($arg, $cmd) = @_;
 +    my $port;
 +    my $addr;
 +
 +    # kill previous data connection sockfilt when alive
 +    if($datasockf_runs eq 'yes') {
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
 +        logmsg "DATA sockfilt for $datasockf_mode data channel killed\n";
 +    }
 +    datasockf_state('STOPPED');
 +
 +    logmsg "====> Active DATA channel requested by client\n";
 +
 +    # We always ignore the given IP and use localhost.
 +
 +    if($cmd eq "PORT") {
 +        if($arg !~ /(\d+),(\d+),(\d+),(\d+),(\d+),(\d+)/) {
 +            logmsg "DATA sockfilt for active data channel not started ".
 +                   "(bad PORT-line: $arg)\n";
 +            sendcontrol "500 silly you, go away\r\n";
 +            return;
 +        }
 +        $port = ($5<<8)+$6;
 +        $addr = "$1.$2.$3.$4";
 +    }
 +    # EPRT |2|::1|49706|
 +    elsif($cmd eq "EPRT") {
 +        if($arg !~ /(\d+)\|([^\|]+)\|(\d+)/) {
 +            logmsg "DATA sockfilt for active data channel not started ".
 +                   "(bad EPRT-line: $arg)\n";
 +            sendcontrol "500 silly you, go away\r\n";
 +            return;
 +        }
 +        sendcontrol "200 Thanks for dropping by. We contact you later\r\n";
 +        $port = $3;
 +        $addr = $2;
 +    }
 +    else {
 +        logmsg "DATA sockfilt for active data channel not started ".
 +               "(invalid command: $cmd)\n";
 +        sendcontrol "500 we don't like $cmd now\r\n";
 +        return;
 +    }
 +
 +    if(!$port || $port > 65535) {
 +        logmsg "DATA sockfilt for active data channel not started ".
 +               "(illegal PORT number: $port)\n";
 +        return;
 +    }
 +
 +    if($nodataconn) {
 +        my $str = nodataconn_str();
 +        logmsg "DATA sockfilt for active data channel not started ($str)\n";
 +        datasockf_state('ACTIVE_NODATACONN');
 +        logmsg "====> Active DATA channel not established\n";
 +        return;
 +    }
 +
 +    logmsg "DATA sockfilt for active data channel starting...\n";
 +
 +    # We fire up a new sockfilt to do the data transfer for us.
 +    my $datasockfcmd = "./server/sockfilt".exe_ext('SRV')." " .
 +        "--ipv$ipvnum --connect $port --addr \"$addr\" " .
 +        "--pidfile \"$datasockf_pidfile\" " .
 +        "--logfile \"$datasockf_logfile\"";
 +    $slavepid = open2(\*DREAD, \*DWRITE, $datasockfcmd);
 +
 +    datasockf_state('ACTIVE');
 +
 +    print STDERR "$datasockfcmd\n" if($verbose);
 +
 +    print DWRITE "PING\n";
 +    my $pong;
 +    sysread_or_die(\*DREAD, \$pong, 5);
 +
 +    if($pong =~ /^FAIL/) {
 +        logmsg "DATA sockfilt said: FAIL\n";
 +        logmsg "DATA sockfilt for active data channel failed\n";
 +        logmsg "DATA sockfilt not running\n";
 +        datasockf_state('STOPPED');
 +        # client shall timeout awaiting connection from server
 +        return;
 +    }
 +    elsif($pong !~ /^PONG/) {
 +        logmsg "DATA sockfilt unexpected response: $pong\n";
 +        logmsg "DATA sockfilt for active data channel failed\n";
 +        logmsg "DATA sockfilt killed now\n";
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
 +        logmsg "DATA sockfilt not running\n";
 +        datasockf_state('STOPPED');
 +        # client shall timeout awaiting connection from server
 +        return;
 +    }
 +
 +    logmsg "DATA sockfilt for active data channel started (pid $slavepid)\n";
 +
 +    logmsg "====> Active DATA channel connected to client port $port\n";
 +
 +    return;
 +}
 +
 +#**********************************************************************
 +# datasockf_state is used to change variables that keep state info
 +# relative to the FTP secondary or data sockfilt process as soon as
 +# one of the five possible stable states is reached. Variables that
 +# are modified by this sub may be checked independently but should
 +# not be changed except by calling this sub.
 +#
 +sub datasockf_state {
 +    my $state = $_[0];
 +
 +  if($state eq 'STOPPED') {
 +    # Data sockfilter initial state, not running,
 +    # not connected and not used.
 +    $datasockf_state = $state;
 +    $datasockf_mode = 'none';
 +    $datasockf_runs = 'no';
 +    $datasockf_conn = 'no';
 +  }
 +  elsif($state eq 'PASSIVE') {
 +    # Data sockfilter accepted connection from client.
 +    $datasockf_state = $state;
 +    $datasockf_mode = 'passive';
 +    $datasockf_runs = 'yes';
 +    $datasockf_conn = 'yes';
 +  }
 +  elsif($state eq 'ACTIVE') {
 +    # Data sockfilter has connected to client.
 +    $datasockf_state = $state;
 +    $datasockf_mode = 'active';
 +    $datasockf_runs = 'yes';
 +    $datasockf_conn = 'yes';
 +  }
 +  elsif($state eq 'PASSIVE_NODATACONN') {
 +    # Data sockfilter bound port without listening,
 +    # client won't be able to establish data connection.
 +    $datasockf_state = $state;
 +    $datasockf_mode = 'passive';
 +    $datasockf_runs = 'yes';
 +    $datasockf_conn = 'no';
 +  }
 +  elsif($state eq 'ACTIVE_NODATACONN') {
 +    # Data sockfilter does not even run,
 +    # client awaits data connection from server in vain.
 +    $datasockf_state = $state;
 +    $datasockf_mode = 'active';
 +    $datasockf_runs = 'no';
 +    $datasockf_conn = 'no';
 +  }
 +  else {
 +      die "Internal error. Unknown datasockf state: $state!";
 +  }
 +}
 +
 +#**********************************************************************
 +# nodataconn_str returns string of effective nodataconn command. Notice
 +# that $nodataconn may be set alone or in addition to a $nodataconnXXX.
 +#
 +sub nodataconn_str {
 +    my $str;
 +    # order matters
 +    $str = 'NODATACONN' if($nodataconn);
 +    $str = 'NODATACONN425' if($nodataconn425);
 +    $str = 'NODATACONN421' if($nodataconn421);
 +    $str = 'NODATACONN150' if($nodataconn150);
 +    return "$str";
 +}
 +
 +#**********************************************************************
 +# customize configures test server operation for each curl test, reading
 +# configuration commands/parameters from server commands file each time
 +# a new client control connection is established with the test server.
 +# On success returns 1, otherwise zero.
 +#
 +sub customize {
 +    $ctrldelay = 0;     # default is no throttling of the ctrl stream
 +    $datadelay = 0;     # default is no throttling of the data stream
 +    $retrweirdo = 0;    # default is no use of RETRWEIRDO
 +    $retrnosize = 0;    # default is no use of RETRNOSIZE
 +    $pasvbadip = 0;     # default is no use of PASVBADIP
 +    $nosave = 0;        # default is to actually save uploaded data to file
 +    $nodataconn = 0;    # default is to establish or accept data channel
 +    $nodataconn425 = 0; # default is to not send 425 without data channel
 +    $nodataconn421 = 0; # default is to not send 421 without data channel
 +    $nodataconn150 = 0; # default is to not send 150 without data channel
++    $storeresp = "";    # send as ultimate STOR response
 +    @capabilities = (); # default is to not support capability commands
 +    @auth_mechs = ();   # default is to not support authentication commands
 +    %fulltextreply = ();#
 +    %commandreply = (); #
 +    %customcount = ();  #
 +    %delayreply = ();   #
 +
 +    open(CUSTOM, "<log/ftpserver.cmd") ||
 +        return 1;
 +
 +    logmsg "FTPD: Getting commands from log/ftpserver.cmd\n";
 +
 +    while(<CUSTOM>) {
 +        if($_ =~ /REPLY \"([A-Z]+ [A-Za-z0-9+-\/=\*. ]+)\" (.*)/) {
 +            $fulltextreply{$1}=eval "qq{$2}";
 +            logmsg "FTPD: set custom reply for $1\n";
 +        }
 +        elsif($_ =~ /REPLY(LF|) ([A-Za-z0-9+\/=\*]*) (.*)/) {
 +            $commandreply{$2}=eval "qq{$3}";
 +            if($1 ne "LF") {
 +                $commandreply{$2}.="\r\n";
 +            }
 +            else {
 +                $commandreply{$2}.="\n";
 +            }
 +            if($2 eq "") {
 +                logmsg "FTPD: set custom reply for empty command\n";
 +            }
 +            else {
 +                logmsg "FTPD: set custom reply for $2 command\n";
 +            }
 +        }
 +        elsif($_ =~ /COUNT ([A-Z]+) (.*)/) {
 +            # we blank the custom reply for this command when having
 +            # been used this number of times
 +            $customcount{$1}=$2;
 +            logmsg "FTPD: blank custom reply for $1 command after $2 uses\n";
 +        }
 +        elsif($_ =~ /DELAY ([A-Z]+) (\d*)/) {
 +            $delayreply{$1}=$2;
 +            logmsg "FTPD: delay reply for $1 with $2 seconds\n";
 +        }
 +        elsif($_ =~ /SLOWDOWN/) {
 +            $ctrldelay=1;
 +            $datadelay=1;
 +            logmsg "FTPD: send response with 0.01 sec delay between each 
byte\n";
 +        }
 +        elsif($_ =~ /RETRWEIRDO/) {
 +            logmsg "FTPD: instructed to use RETRWEIRDO\n";
 +            $retrweirdo=1;
 +        }
 +        elsif($_ =~ /RETRNOSIZE/) {
 +            logmsg "FTPD: instructed to use RETRNOSIZE\n";
 +            $retrnosize=1;
 +        }
 +        elsif($_ =~ /PASVBADIP/) {
 +            logmsg "FTPD: instructed to use PASVBADIP\n";
 +            $pasvbadip=1;
 +        }
 +        elsif($_ =~ /NODATACONN425/) {
 +            # applies to both active and passive FTP modes
 +            logmsg "FTPD: instructed to use NODATACONN425\n";
 +            $nodataconn425=1;
 +            $nodataconn=1;
 +        }
 +        elsif($_ =~ /NODATACONN421/) {
 +            # applies to both active and passive FTP modes
 +            logmsg "FTPD: instructed to use NODATACONN421\n";
 +            $nodataconn421=1;
 +            $nodataconn=1;
 +        }
 +        elsif($_ =~ /NODATACONN150/) {
 +            # applies to both active and passive FTP modes
 +            logmsg "FTPD: instructed to use NODATACONN150\n";
 +            $nodataconn150=1;
 +            $nodataconn=1;
 +        }
 +        elsif($_ =~ /NODATACONN/) {
 +            # applies to both active and passive FTP modes
 +            logmsg "FTPD: instructed to use NODATACONN\n";
 +            $nodataconn=1;
 +        }
++        elsif($_ =~ /^STOR (.*)/) {
++            $storeresp=$1;
++            logmsg "FTPD: instructed to use respond to STOR with 
'$storeresp'\n";
++        }
 +        elsif($_ =~ /CAPA (.*)/) {
 +            logmsg "FTPD: instructed to support CAPABILITY command\n";
 +            @capabilities = split(/ (?!(?:[^" ]|[^"] [^"])+")/, $1);
 +            foreach (@capabilities) {
 +                $_ = $1 if /^"(.*)"$/;
 +            }
 +        }
 +        elsif($_ =~ /AUTH (.*)/) {
 +            logmsg "FTPD: instructed to support AUTHENTICATION command\n";
 +            @auth_mechs = split(/ /, $1);
 +        }
 +        elsif($_ =~ /NOSAVE/) {
 +            # don't actually store the file we upload - to be used when
 +            # uploading insanely huge amounts
 +            $nosave = 1;
 +            logmsg "FTPD: NOSAVE prevents saving of uploaded data\n";
 +        }
 +        elsif($_ =~ /^Testnum (\d+)/){
 +            $testno = $1;
 +            logmsg "FTPD: run test case number: $testno\n";
 +        }
 +    }
 +    close(CUSTOM);
 +}
 +
 +#----------------------------------------------------------------------
 +#----------------------------------------------------------------------
 +#---------------------------  END OF SUBS  ----------------------------
 +#----------------------------------------------------------------------
 +#----------------------------------------------------------------------
 +
 +#**********************************************************************
 +# Parse command line options
 +#
 +# Options:
 +#
 +# --verbose   # verbose
 +# --srcdir    # source directory
 +# --id        # server instance number
 +# --proto     # server protocol
 +# --pidfile   # server pid file
 +# --portfile  # server port file
 +# --logfile   # server log file
 +# --ipv4      # server IP version 4
 +# --ipv6      # server IP version 6
 +# --port      # server listener port
 +# --addr      # server address for listener port binding
 +#
 +while(@ARGV) {
 +    if($ARGV[0] eq '--verbose') {
 +        $verbose = 1;
 +    }
 +    elsif($ARGV[0] eq '--srcdir') {
 +        if($ARGV[1]) {
 +            $srcdir = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--id') {
 +        if($ARGV[1] && ($ARGV[1] =~ /^(\d+)$/)) {
 +            $idnum = $1 if($1 > 0);
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--proto') {
 +        if($ARGV[1] && ($ARGV[1] =~ /^(ftp|imap|pop3|smtp)$/)) {
 +            $proto = $1;
 +            shift @ARGV;
 +        }
 +        else {
 +            die "unsupported protocol $ARGV[1]";
 +        }
 +    }
 +    elsif($ARGV[0] eq '--pidfile') {
 +        if($ARGV[1]) {
 +            $pidfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--portfile') {
 +        if($ARGV[1]) {
 +            $portfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--logfile') {
 +        if($ARGV[1]) {
 +            $logfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--ipv4') {
 +        $ipvnum = 4;
 +        $listenaddr = '127.0.0.1' if($listenaddr eq '::1');
 +    }
 +    elsif($ARGV[0] eq '--ipv6') {
 +        $ipvnum = 6;
 +        $listenaddr = '::1' if($listenaddr eq '127.0.0.1');
 +    }
 +    elsif($ARGV[0] eq '--port') {
 +        if($ARGV[1] =~ /^(\d+)$/) {
 +            $port = $1;
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--addr') {
 +        if($ARGV[1]) {
 +            my $tmpstr = $ARGV[1];
 +            if($tmpstr =~ /^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)$/) 
{
 +                $listenaddr = "$1.$2.$3.$4" if($ipvnum == 4);
 +            }
 +            elsif($ipvnum == 6) {
 +                $listenaddr = $tmpstr;
 +                $listenaddr =~ s/^\[(.*)\]$/$1/;
 +            }
 +            shift @ARGV;
 +        }
 +    }
 +    else {
 +        print STDERR "\nWarning: ftpserver.pl unknown parameter: $ARGV[0]\n";
 +    }
 +    shift @ARGV;
 +}
 +
 +#***************************************************************************
 +# Initialize command line option dependent variables
 +#
 +
 +if(!$srcdir) {
 +    $srcdir = $ENV{'srcdir'} || '.';
 +}
 +if(!$pidfile) {
 +    $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
 +}
 +if(!$logfile) {
 +    $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
 +}
 +
 +$mainsockf_pidfile = "$path/".
 +    mainsockf_pidfilename($proto, $ipvnum, $idnum);
 +$mainsockf_logfile =
 +    mainsockf_logfilename($logdir, $proto, $ipvnum, $idnum);
 +
 +if($proto eq 'ftp') {
 +    $datasockf_pidfile = "$path/".
 +        datasockf_pidfilename($proto, $ipvnum, $idnum);
 +    $datasockf_logfile =
 +        datasockf_logfilename($logdir, $proto, $ipvnum, $idnum);
 +}
 +
 +$srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +$idstr = "$idnum" if($idnum > 1);
 +
 +protocolsetup($proto);
 +
 +$SIG{INT} = \&exit_signal_handler;
 +$SIG{TERM} = \&exit_signal_handler;
 +
 +startsf();
 +
 +# actual port
 +if($portfile && !$port) {
 +    my $aport;
 +    open(P, "<$portfile");
 +    $aport = <P>;
 +    close(P);
 +    $port = 0 + $aport;
 +}
 +
 +logmsg sprintf("%s server listens on port IPv${ipvnum}/${port}\n", 
uc($proto));
 +
 +open(PID, ">$pidfile");
 +print PID $$."\n";
 +close(PID);
 +
 +logmsg("logged pid $$ in $pidfile\n");
 +
 +while(1) {
 +
 +    # kill previous data connection sockfilt when alive
 +    if($datasockf_runs eq 'yes') {
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose, 'data');
 +        logmsg "DATA sockfilt for $datasockf_mode data channel killed now\n";
 +    }
 +    datasockf_state('STOPPED');
 +
 +    #
 +    # We read 'sockfilt' commands.
 +    #
 +    my $input;
 +
 +    logmsg "Awaiting input\n";
 +    sysread_or_die(\*SFREAD, \$input, 5);
 +
 +    if($input !~ /^CNCT/) {
 +        # we wait for a connected client
 +        logmsg "MAIN sockfilt said: $input";
 +        next;
 +    }
 +    logmsg "====> Client connect\n";
 +
 +    set_advisor_read_lock($SERVERLOGS_LOCK);
 +    $serverlogslocked = 1;
 +
 +    # flush data:
 +    $| = 1;
 +
 +    &customize(); # read test control instructions
 +    loadtest("$logdir/test$testno") ||
 +        loadtest("$srcdir/data/test$testno");
 +
 +    my $welcome = $commandreply{"welcome"};
 +    if(!$welcome) {
 +        $welcome = $displaytext{"welcome"};
 +    }
 +    else {
 +        # clear it after use
 +        $commandreply{"welcome"}="";
 +        if($welcome !~ /\r\n\z/) {
 +            $welcome .= "\r\n";
 +        }
 +    }
 +    sendcontrol $welcome;
 +
 +    #remove global variables from last connection
 +    if($ftplistparserstate) {
 +      undef $ftplistparserstate;
 +    }
 +    if($ftptargetdir) {
 +      $ftptargetdir = "";
 +    }
 +
 +    if($verbose) {
 +        print STDERR "OUT: $welcome";
 +    }
 +
 +    my $full = "";
 +
 +    while(1) {
 +        my $i;
 +
 +        # Now we expect to read DATA\n[hex size]\n[prot], where the [prot]
 +        # part only is FTP lingo.
 +
 +        # COMMAND
 +        sysread_or_die(\*SFREAD, \$i, 5);
 +
 +        if($i !~ /^DATA/) {
 +            logmsg "MAIN sockfilt said $i";
 +            if($i =~ /^DISC/) {
 +                # disconnect
 +                last;
 +            }
 +            next;
 +        }
 +
 +        # SIZE of data
 +        sysread_or_die(\*SFREAD, \$i, 5);
 +
 +        my $size = 0;
 +        if($i =~ /^([0-9a-fA-F]{4})\n/) {
 +            $size = hex($1);
 +        }
 +
 +        # data
 +        read_mainsockf(\$input, $size);
 +
 +        ftpmsg $input;
 +
 +        $full .= $input;
 +
 +        # Loop until command completion
 +        next unless($full =~ /\r\n$/);
 +
 +        # Remove trailing CRLF.
 +        $full =~ s/[\n\r]+$//;
 +
 +        my $FTPCMD;
 +        my $FTPARG;
 +        if($proto eq "imap") {
 +            # IMAP is different with its identifier first on the command line
 +            if(($full =~ /^([^ ]+) ([^ ]+) (.*)/) ||
 +               ($full =~ /^([^ ]+) ([^ ]+)/)) {
 +                $cmdid=$1; # set the global variable
 +                $FTPCMD=$2;
 +                $FTPARG=$3;
 +            }
 +            # IMAP authentication cancellation
 +            elsif($full =~ /^\*$/) {
 +                # Command id has already been set
 +                $FTPCMD="*";
 +                $FTPARG="";
 +            }
 +            # IMAP long "commands" are base64 authentication data
 +            elsif($full =~ /^[A-Z0-9+\/]*={0,2}$/i) {
 +                # Command id has already been set
 +                $FTPCMD=$full;
 +                $FTPARG="";
 +            }
 +            else {
 +                sendcontrol "$full BAD Command\r\n";
 +                last;
 +            }
 +        }
 +        elsif($full =~ /^([A-Z]{3,4})(\s(.*))?$/i) {
 +            $FTPCMD=$1;
 +            $FTPARG=$3;
 +        }
 +        elsif($proto eq "pop3") {
 +            # POP3 authentication cancellation
 +            if($full =~ /^\*$/) {
 +                $FTPCMD="*";
 +                $FTPARG="";
 +            }
 +            # POP3 long "commands" are base64 authentication data
 +            elsif($full =~ /^[A-Z0-9+\/]*={0,2}$/i) {
 +                $FTPCMD=$full;
 +                $FTPARG="";
 +            }
 +            else {
 +                sendcontrol "-ERR Unrecognized command\r\n";
 +                last;
 +            }
 +        }
 +        elsif($proto eq "smtp") {
 +            # SMTP authentication cancellation
 +            if($full =~ /^\*$/) {
 +                $FTPCMD="*";
 +                $FTPARG="";
 +            }
 +            # SMTP long "commands" are base64 authentication data
 +            elsif($full =~ /^[A-Z0-9+\/]{0,512}={0,2}$/i) {
 +                $FTPCMD=$full;
 +                $FTPARG="";
 +            }
 +            else {
 +                sendcontrol "500 Unrecognized command\r\n";
 +                last;
 +            }
 +        }
 +        else {
 +            sendcontrol "500 Unrecognized command\r\n";
 +            last;
 +        }
 +
 +        logmsg "< \"$full\"\n";
 +
 +        if($verbose) {
 +            print STDERR "IN: $full\n";
 +        }
 +
 +        $full = "";
 +
 +        my $delay = $delayreply{$FTPCMD};
 +        if($delay) {
 +            # just go sleep this many seconds!
 +            logmsg("Sleep for $delay seconds\n");
 +            my $twentieths = $delay * 20;
 +            while($twentieths--) {
 +                portable_sleep(0.05) unless($got_exit_signal);
 +            }
 +        }
 +
 +        my $check = 1; # no response yet
 +
 +        # See if there is a custom reply for the full text
 +        my $fulltext = $FTPARG ? $FTPCMD . " " . $FTPARG : $FTPCMD;
 +        my $text = $fulltextreply{$fulltext};
 +        if($text && ($text ne "")) {
 +            sendcontrol "$text\r\n";
 +            $check = 0;
 +        }
 +        else {
 +            # See if there is a custom reply for the command
 +            $text = $commandreply{$FTPCMD};
 +            if($text && ($text ne "")) {
 +                if($customcount{$FTPCMD} && (!--$customcount{$FTPCMD})) {
 +                    # used enough times so blank the custom command reply
 +                    $commandreply{$FTPCMD}="";
 +                }
 +
 +                sendcontrol $text;
 +                $check = 0;
 +            }
 +            else {
 +                # See if there is any display text for the command
 +                $text = $displaytext{$FTPCMD};
 +                if($text && ($text ne "")) {
 +                    if($proto eq 'imap') {
 +                        sendcontrol "$cmdid $text\r\n";
 +                    }
 +                    else {
 +                        sendcontrol "$text\r\n";
 +                    }
 +
 +                    $check = 0;
 +                }
 +
 +                # only perform this if we're not faking a reply
 +                my $func = $commandfunc{uc($FTPCMD)};
 +                if($func) {
 +                    &$func($FTPARG, $FTPCMD);
 +                    $check = 0;
 +                }
 +            }
 +        }
 +
 +        if($check) {
 +            logmsg "$FTPCMD wasn't handled!\n";
 +            if($proto eq 'pop3') {
 +                sendcontrol "-ERR $FTPCMD is not dealt with!\r\n";
 +            }
 +            elsif($proto eq 'imap') {
 +                sendcontrol "$cmdid BAD $FTPCMD is not dealt with!\r\n";
 +            }
 +            else {
 +                sendcontrol "500 $FTPCMD is not dealt with!\r\n";
 +            }
 +        }
 +
 +    } # while(1)
 +    logmsg "====> Client disconnected\n";
 +
 +    if($serverlogslocked) {
 +        $serverlogslocked = 0;
 +        clear_advisor_read_lock($SERVERLOGS_LOCK);
 +    }
 +}
 +
 +killsockfilters($proto, $ipvnum, $idnum, $verbose);
 +unlink($pidfile);
 +if($serverlogslocked) {
 +    $serverlogslocked = 0;
 +    clear_advisor_read_lock($SERVERLOGS_LOCK);
 +}
 +
 +exit;
diff --cc tests/http2-server.pl.in
index 2358ad3fa,000000000..1dcc8a695
mode 100755,000000..100755
--- a/tests/http2-server.pl.in
+++ b/tests/http2-server.pl.in
@@@ -1,83 -1,0 +1,83 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2016 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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 script invokes nghttpx properly to have it serve HTTP/2 for us.
 +# nghttpx runs as a proxy in front of our "actual" HTTP/1 server.
 +
 +my $pidfile = "log/nghttpx.pid";
 +my $logfile = "log/http2.log";
 +my $nghttpx = "nghttpx";
 +my $listenport = 9015;
 +my $connect = "127.0.0.1,8990";
 +
 +#***************************************************************************
 +# Process command line options
 +#
 +while(@ARGV) {
 +    if($ARGV[0] eq '--verbose') {
 +        $verbose = 1;
 +    }
 +    elsif($ARGV[0] eq '--pidfile') {
 +        if($ARGV[1]) {
 +            $pidfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--nghttpx') {
 +        if($ARGV[1]) {
 +            $nghttpx = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--port') {
 +        if($ARGV[1]) {
 +            $listenport = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--connect') {
 +        if($ARGV[1]) {
 +            $connect = $ARGV[1];
 +            $connect =~ s/:/,/;
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--logfile') {
 +        if($ARGV[1]) {
 +            $logfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    else {
 +        print STDERR "\nWarning: http2-server.pl unknown parameter: 
$ARGV[0]\n";
 +    }
 +    shift @ARGV;
 +}
 +
 +my $cmdline="$nghttpx --backend=$connect ".
 +    "--frontend=\"*,$listenport;no-tls\" ".
 +    "--log-level=INFO ".
 +    "--pid-file=$pidfile ".
 +    "--errorlog-file=$logfile";
 +print "RUN: $cmdline\n" if($verbose);
 +system("$cmdline 2>/dev/null");
diff --cc tests/httpserver.pl.in
index 051982243,000000000..3e4c7b5bc
mode 100755,000000..100755
--- a/tests/httpserver.pl.in
+++ b/tests/httpserver.pl.in
@@@ -1,155 -1,0 +1,155 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +#***************************************************************************
 +
 +BEGIN {
 +    push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
 +    push(@INC, ".");
 +}
 +
 +use strict;
 +use warnings;
 +
 +use serverhelp qw(
 +    server_pidfilename
 +    server_logfilename
 +    );
 +
 +use sshhelp qw(
 +    exe_ext
 +    );
 +
 +my $verbose = 0;     # set to 1 for debugging
 +my $port = 8990;     # just a default
 +my $unix_socket;     # location to place a listening Unix socket
 +my $ipvnum = 4;      # default IP version of http server
 +my $idnum = 1;       # default http server instance number
 +my $proto = 'http';  # protocol the http server speaks
 +my $pidfile;         # pid file
 +my $portfile;        # port number file
 +my $logfile;         # log file
 +my $connect;         # IP to connect to on CONNECT
 +my $srcdir;
 +my $gopher = 0;
 +
 +my $flags  = "";
 +my $path   = '.';
 +my $logdir = $path .'/log';
 +
 +while(@ARGV) {
 +    if($ARGV[0] eq '--pidfile') {
 +        if($ARGV[1]) {
 +            $pidfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--portfile') {
 +        if($ARGV[1]) {
 +            $portfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--logfile') {
 +        if($ARGV[1]) {
 +            $logfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--srcdir') {
 +        if($ARGV[1]) {
 +            $srcdir = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--ipv4') {
 +        $ipvnum = 4;
 +    }
 +    elsif($ARGV[0] eq '--ipv6') {
 +        $ipvnum = 6;
 +    }
 +    elsif($ARGV[0] eq '--unix-socket') {
 +        $ipvnum = 'unix';
 +        if($ARGV[1]) {
 +            $unix_socket = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--gopher') {
 +        $gopher = 1;
 +    }
 +    elsif($ARGV[0] eq '--port') {
 +        if($ARGV[1] =~ /^(\d+)$/) {
 +            $port = $1;
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--connect') {
 +        if($ARGV[1]) {
 +            $connect = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--id') {
 +        if($ARGV[1] =~ /^(\d+)$/) {
 +            $idnum = $1 if($1 > 0);
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--verbose') {
 +        $verbose = 1;
 +    }
 +    else {
 +        print STDERR "\nWarning: httpserver.pl unknown parameter: $ARGV[0]\n";
 +    }
 +    shift @ARGV;
 +}
 +
 +if(!$srcdir) {
 +    $srcdir = $ENV{'srcdir'} || '.';
 +}
 +if(!$pidfile) {
 +    $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
 +}
 +if(!$portfile) {
 +    $portfile = "$path/". server_portfilename($proto, $ipvnum, $idnum);
 +}
 +if(!$logfile) {
 +    $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
 +}
 +
 +$flags .= "--pidfile \"$pidfile\" ".
 +    "--logfile \"$logfile\" ".
 +    "--portfile \"$portfile\" ";
 +$flags .= "--gopher " if($gopher);
 +$flags .= "--connect $connect " if($connect);
 +if($ipvnum eq 'unix') {
 +    $flags .= "--unix-socket '$unix_socket' ";
 +} else {
 +    $flags .= "--ipv$ipvnum --port $port ";
 +}
 +$flags .= "--srcdir \"$srcdir\"";
 +
 +if($verbose) {
 +    print STDERR "RUN: server/sws".exe_ext('SRV')." $flags\n";
 +}
 +
 +exec("server/sws".exe_ext('SRV')." $flags");
diff --cc tests/keywords.pl.in
index 798f58194,000000000..51370fc9d
mode 100755,000000..100755
--- a/tests/keywords.pl.in
+++ b/tests/keywords.pl.in
@@@ -1,153 -1,0 +1,153 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +
 +use strict;
 +
 +push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
 +push(@INC, ".");
 +
 +require "getpart.pm"; # array functions
 +
 +my $srcdir = $ENV{'srcdir'} || '.';
 +my $TESTDIR="$srcdir/data";
 +
 +# Get all commands and find out their test numbers
 +opendir(DIR, $TESTDIR) || die "can't opendir $TESTDIR: $!";
 +my @cmds = grep { /^test([0-9]+)$/ && -f "$TESTDIR/$_" } readdir(DIR);
 +closedir DIR;
 +
 +my $TESTCASES; # start with no test cases
 +
 +# cut off everything but the digits
 +for(@cmds) {
 +    $_ =~ s/[a-z\/\.]*//g;
 +}
 +# the numbers from low to high
 +for(sort { $a <=> $b } @cmds) {
 +    $TESTCASES .= " $_";
 +}
 +
 +my $t;
 +
 +my %k; # keyword count
 +my %t; # keyword to test case mapping
 +my @miss; # test cases without keywords set
 +
 +my $count;
 +
 +my %errors;
 +
 +for $t (split(/ /, $TESTCASES)) {
 +    if(loadtest("${TESTDIR}/test${t}")) {
 +        # bad case
 +        next;
 +    }
 +
 +    my @ec = getpart("verify", "errorcode");
 +    if($ec[0]) {
 +        # count number of check error codes
 +        $errors{ 0 + $ec[0] } ++;
 +    }
 +
 +
 +    my @what = getpart("info", "keywords");
 +
 +    if(!$what[0]) {
 +        push @miss, $t;
 +        next;
 +    }
 +
 +    for(@what) {
 +        chomp;
 +        #print "Test $t: $_\n";
 +        $k{$_}++;
 +        $t{$_} .= "$t ";
 +    }
 +
 +
 +
 +
 +
 +
 +
 +
 +    $count++;
 +}
 +
 +sub show {
 +    my ($list)=@_;
 +    my @a = split(" ", $list);
 +    my $ret;
 +
 +    my $c;
 +    my @l = sort {rand(100) - 50} @a;
 +    my @ll;
 +
 +    for(1 .. 11) {
 +        my $v = shift @l;
 +        if($v) {
 +            push @ll, $v;
 +        }
 +    }
 +
 +    for (sort {$a <=> $b} @ll) {
 +        if($c++ == 10) {
 +            $ret .= "...";
 +            last;
 +        }
 +        $ret .= "$_ ";
 +    }
 +    return $ret;
 +}
 +
 +# sort alphabetically
 +my @mtest = reverse sort { lc($b) cmp lc($a) } keys %k;
 +
 +print <<TOP
 +<table><tr><th>Num</th><th>Keyword</th><th>Test Cases</th></tr>
 +TOP
 +    ;
 +for $t (@mtest) {
 +    printf "<tr><td>%d</td><td>$t</td><td>%s</td></tr>\n", $k{$t},
 +    show($t{$t});
 +}
 +printf "</table><p> $count out of %d tests (%d lack keywords)\n",
 +    scalar(@miss) + $count,
 +    scalar(@miss);
 +
 +for(@miss) {
 +    print "$_ ";
 +}
 +
 +print "\n";
 +
 +printf "<p> %d different error codes tested for:<br>\n",
 +    scalar(keys %errors);
 +
 +# numerically on amount, or alphebetically if same amount
 +my @etest = sort { $a <=> $b} keys %errors;
 +
 +for(@etest) {
 +    print "$_ ";
 +}
 +print "\n";
diff --cc tests/manpage-scan.pl.in
index 59d6ce817,000000000..ce0cc66d5
mode 100755,000000..100755
--- a/tests/manpage-scan.pl.in
+++ b/tests/manpage-scan.pl.in
@@@ -1,291 -1,0 +1,291 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2016 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +#
 +# Scan symbols-in-version (which is verified to be correct by test 1119), then
 +# verify that each option mention in there that should have its own man page
 +# actually does.
 +#
 +# In addition, make sure that every current option to curl_easy_setopt,
 +# curl_easy_getinfo and curl_multi_setopt are also mentioned in their
 +# corresponding main (index) man page.
 +#
 +# src/tool_getparam.c lists all options curl can parse
 +# docs/curl.1 documents all command line options
 +# src/tool_help.c outputs all options with curl -h
 +# - make sure they're all in sync
 +#
 +# Output all deviances to stderr.
 +
 +use strict;
 +use warnings;
 +
 +# we may get the dir roots pointed out
 +my $root=$ARGV[0] || ".";
 +my $buildroot=$ARGV[1] || ".";
 +my $syms = "$root/docs/libcurl/symbols-in-versions";
 +my $curlh = "$root/include/gnurl/curl.h";
 +my $errors=0;
 +
 +# the prepopulated alias list is the CURLINFO_* defines that are used for the
 +# debug function callback and the fact that they use the same prefix as the
 +# curl_easy_getinfo options was a mistake.
 +my %alias = (
 +    'CURLINFO_DATA_IN' => 'none',
 +    'CURLINFO_DATA_OUT' => 'none',
 +    'CURLINFO_END' => 'none',
 +    'CURLINFO_HEADER_IN' => 'none',
 +    'CURLINFO_HEADER_OUT' => 'none',
 +    'CURLINFO_LASTONE' => 'none',
 +    'CURLINFO_NONE' => 'none',
 +    'CURLINFO_SSL_DATA_IN' => 'none',
 +    'CURLINFO_SSL_DATA_OUT' => 'none',
 +    'CURLINFO_TEXT' => 'none'
 +    );
 +
 +sub scanmanpage {
 +    my ($file, @words) = @_;
 +
 +    open(M, "<$file");
 +    my @m = <M>;
 +    close(M);
 +
 +    foreach my $m (@words) {
 +
 +        my @g = grep(/^\.IP $m/, @m);
 +        if(!$g[0]) {
 +            print STDERR "Missing mention of $m in $file\n";
 +            $errors++;
 +        }
 +    }
 +}
 +
 +# check for define alises
 +open(R, "<$curlh") ||
 +    die "no curl.h";
 +while(<R>) {
 +    if(/^\#define (CURL(OPT|INFO|MOPT)_\w+) (.*)/) {
 +        $alias{$1}=$3;
 +    }
 +}
 +close(R);
 +
 +my @curlopt;
 +my @curlinfo;
 +my @curlmopt;
 +open(R, "<$syms") ||
 +    die "no input file";
 +while(<R>) {
 +    chomp;
 +    my $l= $_;
 +    if($l =~ /(CURL(OPT|INFO|MOPT)_\w+) *([0-9.]*) *([0-9.-]*) *([0-9.]*)/) {
 +        my ($opt, $type, $add, $dep, $rem) = ($1, $2, $3, $4, $5);
 +
 +        if($alias{$opt}) {
 +            #print "$opt => $alias{$opt}\n";
 +        }
 +        elsif($rem) {
 +            # $opt was removed in $rem
 +            # so don't check for that
 +        }
 +        else {
 +            if($type eq "OPT") {
 +                push @curlopt, $opt,
 +            }
 +            elsif($type eq "INFO") {
 +                push @curlinfo, $opt,
 +            }
 +            elsif($type eq "MOPT") {
 +                push @curlmopt, $opt,
 +            }
 +            if(! -f "$root/docs/libcurl/opts/$opt.3") {
 +                print STDERR "Missing $opt.3\n";
 +                $errors++;
 +            }
 +        }
 +    }
 +}
 +close(R);
 +
 +scanmanpage("$root/docs/libcurl/gnurl_easy_setopt.3", @curlopt);
 +scanmanpage("$root/docs/libcurl/gnurl_easy_getinfo.3", @curlinfo);
 +scanmanpage("$root/docs/libcurl/gnurl_multi_setopt.3", @curlmopt);
 +
 +# using this hash array, we can skip specific options
 +my %opts = (
 +    # pretend these --no options exists in tool_getparam.c
 +    '--no-alpn' => 1,
 +    '--no-npn' => 1,
 +    '-N, --no-buffer' => 1,
 +    '--no-sessionid' => 1,
 +    '--no-keepalive' => 1,
 +    '--no-progress-meter' => 1,
 +
 +    # pretend these options without -no exist in curl.1 and tool_help.c
 +    '--alpn' => 6,
 +    '--npn' => 6,
 +    '--eprt' => 6,
 +    '--epsv' => 6,
 +    '--keepalive' => 6,
 +    '-N, --buffer' => 6,
 +    '--sessionid' => 6,
 +    '--progress-meter' => 6,
 +
 +    # deprecated options do not need to be in tool_help.c nor curl.1
 +    '--krb4' => 6,
 +    '--ftp-ssl' => 6,
 +    '--ftp-ssl-reqd' => 6,
 +
 +    # for tests and debug only, can remain hidden
 +    '--test-event' => 6,
 +    '--wdebug' => 6,
 +    );
 +
 +
 +#########################################################################
 +# parse the curl code that parses the command line arguments!
 +open(R, "<$root/src/tool_getparam.c") ||
 +    die "no input file";
 +my $list;
 +my @getparam; # store all parsed parameters
 +
 +while(<R>) {
 +    chomp;
 +    my $l= $_;
 +    if(/struct LongShort aliases/) {
 +        $list=1;
 +    }
 +    elsif($list) {
 +        if( /^  \{([^,]*), *([^ ]*)/) {
 +            my ($s, $l)=($1, $2);
 +            my $sh;
 +            my $lo;
 +            my $title;
 +            if($l =~ /\"(.*)\"/) {
 +                # long option
 +                $lo = $1;
 +                $title="--$lo";
 +            }
 +            if($s =~ /\"(.)\"/) {
 +                # a short option
 +                $sh = $1;
 +                $title="-$sh, $title";
 +            }
 +            push @getparam, $title;
 +            $opts{$title} |= 1;
 +        }
 +    }
 +}
 +close(R);
 +
 +#########################################################################
 +# parse the curl.1 man page, extract all documented command line options
 +# The man page may or may not be rebuilt, so check both possible locations
 +open(R, "<$buildroot/docs/gnurl.1") || open(R, "<$root/docs/gnurl.1") ||
 +    die "no input file";
 +my @manpage; # store all parsed parameters
 +while(<R>) {
 +    chomp;
 +    my $l= $_;
 +    if(/^\.IP \"(-[^\"]*)\"/) {
 +        my $str = $1;
 +        my $combo;
 +        if($str =~ /^-(.), --([a-z0-9.-]*)/) {
 +            # figure out the -short, --long combo
 +            $combo = "-$1, --$2";
 +        }
 +        elsif($str =~ /^--([a-z0-9.-]*)/) {
 +            # figure out the --long name
 +            $combo = "--$1";
 +        }
 +        if($combo) {
 +            push @manpage, $combo;
 +            $opts{$combo} |= 2;
 +        }
 +    }
 +}
 +close(R);
 +
 +
 +#########################################################################
 +# parse the curl code that outputs the curl -h list
 +open(R, "<$root/src/tool_help.c") ||
 +    die "no input file";
 +my @toolhelp; # store all parsed parameters
 +while(<R>) {
 +    chomp;
 +    my $l= $_;
 +    if(/^  \{\" *(.*)/) {
 +        my $str=$1;
 +        my $combo;
 +        if($str =~ /^-(.), --([a-z0-9.-]*)/) {
 +            # figure out the -short, --long combo
 +            $combo = "-$1, --$2";
 +        }
 +        elsif($str =~ /^--([a-z0-9.-]*)/) {
 +            # figure out the --long name
 +            $combo = "--$1";
 +        }
 +        if($combo) {
 +            push @toolhelp, $combo;
 +            $opts{$combo} |= 4;
 +        }
 +
 +    }
 +}
 +close(R);
 +
 +#
 +# Now we have three arrays with options to cross-reference.
 +
 +foreach my $o (keys %opts) {
 +    my $where = $opts{$o};
 +
 +    if($where != 7) {
 +        # this is not in all three places
 +        $errors++;
 +        my $exists;
 +        my $missing;
 +        if($where & 1) {
 +            $exists=" tool_getparam.c";
 +        }
 +        else {
 +            $missing=" tool_getparam.c";
 +        }
 +        if($where & 2) {
 +            $exists.= " gnurl.1";
 +        }
 +        else {
 +            $missing.= " gnurl.1";
 +        }
 +        if($where & 4) {
 +            $exists .= " tool_help.c";
 +        }
 +        else {
 +            $missing .= " tool_help.c";
 +        }
 +
 +        print STDERR "$o is not in$missing (but in$exists)\n";
 +    }
 +}
 +
 +print STDERR "$errors\n";
diff --cc tests/mem-include-scan.pl.in
index a7ab544ed,000000000..d137e4fd1
mode 100755,000000..100755
--- a/tests/mem-include-scan.pl.in
+++ b/tests/mem-include-scan.pl.in
@@@ -1,96 -1,0 +1,96 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2010 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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 script scans C source files. If they seem to use memory functions,
 +# it also makes sure that it #includes the correct two header files!
 +#
 +# You can also mark a C source as fine by using 'mem-include-scan' anywhere in
 +# it.
 +#
 +
 +use strict;
 +use warnings;
 +
 +my $dir = $ARGV[0] || die "specify directory!";
 +
 +sub scanfile {
 +    my ($file) = @_;
 +    my $memfunc;
 +    my $memdebug;
 +    my $curlmem;
 +
 +    print STDERR "checking $file...\n";
 +
 +    open(F, "<$file");
 +    while(<F>) {
 +        if($_ =~ /(free|alloc|strdup)\(/) {
 +            $memfunc++;
 +        }
 +        elsif($_ =~ /^ *# *include \"memdebug.h\"/) {
 +            $memdebug++;
 +        }
 +        elsif($_ =~ /^ *# *include \"curl_memory.h\"/) {
 +            $curlmem++;
 +        }
 +        elsif($_ =~ /mem-include-scan/) {
 +            # free pass
 +            close(F);
 +            return 0;
 +        }
 +        if($memfunc && $memdebug && $curlmem) {
 +            last;
 +        }
 +    }
 +    close(F);
 +
 +
 +    if($memfunc) {
 +        if($memdebug && $curlmem) {
 +            return 0;
 +        }
 +        else {
 +            if(!$memdebug) {
 +                print STDERR "$file doesn't include \"memdebug.h\"!\n";
 +            }
 +            if(!$curlmem) {
 +                print STDERR "$file doesn't include \"curl_memory.h\"!\n";
 +            }
 +            return 1;
 +        }
 +    }
 +    return 0;
 +}
 +
 +opendir(my $dh, $dir) || die "can't opendir $dir: $!";
 +my @cfiles = grep { /\.c\z/ && -f "$dir/$_" } readdir($dh);
 +closedir $dh;
 +
 +my $errs;
 +for(@cfiles) {
 +    $errs += scanfile("$dir/$_");
 +}
 +
 +if($errs) {
 +    print STDERR "----\n$errs errors detected!\n";
 +    exit 2;
 +}
diff --cc tests/memanalyze.pl.in
index b16172d38,000000000..01915ebca
mode 100755,000000..100755
--- a/tests/memanalyze.pl.in
+++ b/tests/memanalyze.pl.in
@@@ -1,425 -1,0 +1,425 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
- # Copyright (C) 1998 - 2017, Daniel Stenberg, <daniel@haxx.se>, et al.
++# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +#
 +# Example input:
 +#
 +# MEM mprintf.c:1094 malloc(32) = e5718
 +# MEM mprintf.c:1103 realloc(e5718, 64) = e6118
 +# MEM sendf.c:232 free(f6520)
 +
 +my $mallocs=0;
 +my $callocs=0;
 +my $reallocs=0;
 +my $strdups=0;
 +my $wcsdups=0;
 +my $showlimit;
 +my $sends=0;
 +my $recvs=0;
 +my $sockets=0;
 +
 +while(1) {
 +    if($ARGV[0] eq "-v") {
 +        $verbose=1;
 +        shift @ARGV;
 +    }
 +    elsif($ARGV[0] eq "-t") {
 +        $trace=1;
 +        shift @ARGV;
 +    }
 +    elsif($ARGV[0] eq "-l") {
 +        # only show what alloc that caused a memlimit failure
 +        $showlimit=1;
 +        shift @ARGV;
 +    }
 +    else {
 +        last;
 +    }
 +}
 +
 +my $maxmem;
 +
 +sub newtotal {
 +    my ($newtot)=@_;
 +    # count a max here
 +
 +    if($newtot > $maxmem) {
 +        $maxmem= $newtot;
 +    }
 +}
 +
 +my $file = $ARGV[0];
 +
 +if(! -f $file) {
 +    print "Usage: memanalyze.pl [options] <dump file>\n",
 +    "Options:\n",
 +    " -l  memlimit failure displayed\n",
 +    " -v  Verbose\n",
 +    " -t  Trace\n";
 +    exit;
 +}
 +
 +open(FILE, "<$file");
 +
 +if($showlimit) {
 +    while(<FILE>) {
 +        if(/^LIMIT.*memlimit$/) {
 +            print $_;
 +            last;
 +        }
 +    }
 +    close(FILE);
 +    exit;
 +}
 +
 +
 +my $lnum=0;
 +while(<FILE>) {
 +    chomp $_;
 +    $line = $_;
 +    $lnum++;
 +    if($line =~ /^LIMIT ([^ ]*):(\d*) (.*)/) {
 +        # new memory limit test prefix
 +        my $i = $3;
 +        my ($source, $linenum) = ($1, $2);
 +        if($trace && ($i =~ /([^ ]*) reached memlimit/)) {
 +            print "LIMIT: $1 returned error at $source:$linenum\n";
 +        }
 +    }
 +    elsif($line =~ /^MEM ([^ ]*):(\d*) (.*)/) {
 +        # generic match for the filename+linenumber
 +        $source = $1;
 +        $linenum = $2;
 +        $function = $3;
 +
 +        if($function =~ /free\((\(nil\)|0x([0-9a-f]*))/) {
 +            $addr = $2;
 +            if($1 eq "(nil)") {
 +                ; # do nothing when free(NULL)
 +            }
 +            elsif(!exists $sizeataddr{$addr}) {
 +                print "FREE ERROR: No memory allocated: $line\n";
 +            }
 +            elsif(-1 == $sizeataddr{$addr}) {
 +                print "FREE ERROR: Memory freed twice: $line\n";
 +                print "FREE ERROR: Previously freed at: ".$getmem{$addr}."\n";
 +            }
 +            else {
 +                $totalmem -= $sizeataddr{$addr};
 +                if($trace) {
 +                    print "FREE: malloc at ".$getmem{$addr}." is freed again 
at $source:$linenum\n";
 +                    printf("FREE: %d bytes freed, left allocated: $totalmem 
bytes\n", $sizeataddr{$addr});
 +                }
 +
 +                newtotal($totalmem);
 +                $frees++;
 +
 +                $sizeataddr{$addr}=-1; # set -1 to mark as freed
 +                $getmem{$addr}="$source:$linenum";
 +
 +            }
 +        }
 +        elsif($function =~ /malloc\((\d*)\) = 0x([0-9a-f]*)/) {
 +            $size = $1;
 +            $addr = $2;
 +
 +            if($sizeataddr{$addr}>0) {
 +                # this means weeeeeirdo
 +                print "Mixed debug compile ($source:$linenum at line $lnum), 
rebuild curl now\n";
 +                print "We think $sizeataddr{$addr} bytes are already 
allocated at that memory address: $addr!\n";
 +            }
 +
 +            $sizeataddr{$addr}=$size;
 +            $totalmem += $size;
 +
 +            if($trace) {
 +                print "MALLOC: malloc($size) at $source:$linenum",
 +                " makes totally $totalmem bytes\n";
 +            }
 +
 +            newtotal($totalmem);
 +            $mallocs++;
 +
 +            $getmem{$addr}="$source:$linenum";
 +        }
 +        elsif($function =~ /calloc\((\d*),(\d*)\) = 0x([0-9a-f]*)/) {
 +            $size = $1*$2;
 +            $addr = $3;
 +
 +            $arg1 = $1;
 +            $arg2 = $2;
 +
 +            if($sizeataddr{$addr}>0) {
 +                # this means weeeeeirdo
 +                print "Mixed debug compile, rebuild curl now\n";
 +            }
 +
 +            $sizeataddr{$addr}=$size;
 +            $totalmem += $size;
 +
 +            if($trace) {
 +                print "CALLOC: calloc($arg1,$arg2) at $source:$linenum",
 +                " makes totally $totalmem bytes\n";
 +            }
 +
 +            newtotal($totalmem);
 +            $callocs++;
 +
 +            $getmem{$addr}="$source:$linenum";
 +        }
 +        elsif($function =~ /realloc\((\(nil\)|0x([0-9a-f]*)), (\d*)\) = 
0x([0-9a-f]*)/) {
 +            my ($oldaddr, $newsize, $newaddr) = ($2, $3, $4);
 +
 +            $totalmem -= $sizeataddr{$oldaddr};
 +            if($trace) {
 +                printf("REALLOC: %d less bytes and ", $sizeataddr{$oldaddr});
 +            }
 +            $sizeataddr{$oldaddr}=0;
 +
 +            $totalmem += $newsize;
 +            $sizeataddr{$newaddr}=$newsize;
 +
 +            if($trace) {
 +                printf("%d more bytes ($source:$linenum)\n", $newsize);
 +            }
 +
 +            newtotal($totalmem);
 +            $reallocs++;
 +
 +            $getmem{$oldaddr}="";
 +            $getmem{$newaddr}="$source:$linenum";
 +        }
 +        elsif($function =~ /strdup\(0x([0-9a-f]*)\) \((\d*)\) = 
0x([0-9a-f]*)/) {
 +            # strdup(a5b50) (8) = df7c0
 +
 +            $dup = $1;
 +            $size = $2;
 +            $addr = $3;
 +            $getmem{$addr}="$source:$linenum";
 +            $sizeataddr{$addr}=$size;
 +
 +            $totalmem += $size;
 +
 +            if($trace) {
 +                printf("STRDUP: $size bytes at %s, makes totally: %d bytes\n",
 +                       $getmem{$addr}, $totalmem);
 +            }
 +
 +            newtotal($totalmem);
 +            $strdups++;
 +        }
 +        elsif($function =~ /wcsdup\(0x([0-9a-f]*)\) \((\d*)\) = 
0x([0-9a-f]*)/) {
 +            # wcsdup(a5b50) (8) = df7c0
 +
 +            $dup = $1;
 +            $size = $2;
 +            $addr = $3;
 +            $getmem{$addr}="$source:$linenum";
 +            $sizeataddr{$addr}=$size;
 +
 +            $totalmem += $size;
 +
 +            if($trace) {
 +                printf("WCSDUP: $size bytes at %s, makes totally: %d bytes\n",
 +                       $getmem{$addr}, $totalmem);
 +            }
 +
 +            newtotal($totalmem);
 +            $wcsdups++;
 +        }
 +        else {
 +            print "Not recognized input line: $function\n";
 +        }
 +    }
 +    # FD url.c:1282 socket() = 5
 +    elsif($_ =~ /^FD ([^ ]*):(\d*) (.*)/) {
 +        # generic match for the filename+linenumber
 +        $source = $1;
 +        $linenum = $2;
 +        $function = $3;
 +
 +        if($function =~ /socket\(\) = (\d*)/) {
 +            $filedes{$1}=1;
 +            $getfile{$1}="$source:$linenum";
 +            $openfile++;
 +            $sockets++; # number of socket() calls
 +        }
 +        elsif($function =~ /socketpair\(\) = (\d*) (\d*)/) {
 +            $filedes{$1}=1;
 +            $getfile{$1}="$source:$linenum";
 +            $openfile++;
 +            $filedes{$2}=1;
 +            $getfile{$2}="$source:$linenum";
 +            $openfile++;
 +        }
 +        elsif($function =~ /accept\(\) = (\d*)/) {
 +            $filedes{$1}=1;
 +            $getfile{$1}="$source:$linenum";
 +            $openfile++;
 +        }
 +        elsif($function =~ /sclose\((\d*)\)/) {
 +            if($filedes{$1} != 1) {
 +                print "Close without open: $line\n";
 +            }
 +            else {
 +                $filedes{$1}=0; # closed now
 +                $openfile--;
 +            }
 +        }
 +    }
 +    # FILE url.c:1282 fopen("blabla") = 0x5ddd
 +    elsif($_ =~ /^FILE ([^ ]*):(\d*) (.*)/) {
 +        # generic match for the filename+linenumber
 +        $source = $1;
 +        $linenum = $2;
 +        $function = $3;
 +
 +        if($function =~ /f[d]*open\(\"(.*)\",\"([^\"]*)\"\) = 
(\(nil\)|0x([0-9a-f]*))/) {
 +            if($3 eq "(nil)") {
 +                ;
 +            }
 +            else {
 +                $fopen{$4}=1;
 +                $fopenfile{$4}="$source:$linenum";
 +                $fopens++;
 +            }
 +        }
 +        # fclose(0x1026c8)
 +        elsif($function =~ /fclose\(0x([0-9a-f]*)\)/) {
 +            if(!$fopen{$1}) {
 +                print "fclose() without fopen(): $line\n";
 +            }
 +            else {
 +                $fopen{$1}=0;
 +                $fopens--;
 +            }
 +        }
 +    }
 +    # GETNAME url.c:1901 getnameinfo()
 +    elsif($_ =~ /^GETNAME ([^ ]*):(\d*) (.*)/) {
 +        # not much to do
 +    }
 +    # SEND url.c:1901 send(83) = 83
 +    elsif($_ =~ /^SEND ([^ ]*):(\d*) (.*)/) {
 +        $sends++;
 +    }
 +    # RECV url.c:1901 recv(102400) = 256
 +    elsif($_ =~ /^RECV ([^ ]*):(\d*) (.*)/) {
 +        $recvs++;
 +    }
 +
 +    # ADDR url.c:1282 getaddrinfo() = 0x5ddd
 +    elsif($_ =~ /^ADDR ([^ ]*):(\d*) (.*)/) {
 +        # generic match for the filename+linenumber
 +        $source = $1;
 +        $linenum = $2;
 +        $function = $3;
 +
 +        if($function =~ /getaddrinfo\(\) = (\(nil\)|0x([0-9a-f]*))/) {
 +            my $add = $2;
 +            if($add eq "(nil)") {
 +                ;
 +            }
 +            else {
 +                $addrinfo{$add}=1;
 +                $addrinfofile{$add}="$source:$linenum";
 +                $addrinfos++;
 +            }
 +            if($trace) {
 +                printf("GETADDRINFO ($source:$linenum)\n");
 +            }
 +        }
 +        # fclose(0x1026c8)
 +        elsif($function =~ /freeaddrinfo\(0x([0-9a-f]*)\)/) {
 +            if(!$addrinfo{$1}) {
 +                print "freeaddrinfo() without getaddrinfo(): $line\n";
 +            }
 +            else {
 +                $addrinfo{$1}=0;
 +                $addrinfos--;
 +            }
 +            if($trace) {
 +                printf("FREEADDRINFO ($source:$linenum)\n");
 +            }
 +        }
 +
 +    }
 +    else {
 +        print "Not recognized prefix line: $line\n";
 +    }
 +}
 +close(FILE);
 +
 +if($totalmem) {
 +    print "Leak detected: memory still allocated: $totalmem bytes\n";
 +
 +    for(keys %sizeataddr) {
 +        $addr = $_;
 +        $size = $sizeataddr{$addr};
 +        if($size > 0) {
 +            print "At $addr, there's $size bytes.\n";
 +            print " allocated by ".$getmem{$addr}."\n";
 +        }
 +    }
 +}
 +
 +if($openfile) {
 +    for(keys %filedes) {
 +        if($filedes{$_} == 1) {
 +            print "Open file descriptor created at ".$getfile{$_}."\n";
 +        }
 +    }
 +}
 +
 +if($fopens) {
 +    print "Open FILE handles left at:\n";
 +    for(keys %fopen) {
 +        if($fopen{$_} == 1) {
 +            print "fopen() called at ".$fopenfile{$_}."\n";
 +        }
 +    }
 +}
 +
 +if($addrinfos) {
 +    print "IPv6-style name resolve data left at:\n";
 +    for(keys %addrinfofile) {
 +        if($addrinfo{$_} == 1) {
 +            print "getaddrinfo() called at ".$addrinfofile{$_}."\n";
 +        }
 +    }
 +}
 +
 +if($verbose) {
 +    print "Mallocs: $mallocs\n",
 +        "Reallocs: $reallocs\n",
 +        "Callocs: $callocs\n",
 +        "Strdups:  $strdups\n",
 +        "Wcsdups:  $wcsdups\n",
 +        "Frees: $frees\n",
 +        "Sends: $sends\n",
 +        "Recvs: $recvs\n",
 +        "Sockets: $sockets\n",
 +        "Allocations: ".($mallocs + $callocs + $reallocs + $strdups + 
$wcsdups)."\n",
 +        "Operations: ".($mallocs + $callocs + $reallocs + $strdups + $wcsdups 
+ $sends + $recvs + $sockets)."\n";
 +
 +    print "Maximum allocated: $maxmem\n";
 +}
diff --cc tests/negtelnetserver.py.in
index fbe3a5f63,000000000..afd48239d
mode 100755,000000..100755
--- a/tests/negtelnetserver.py.in
+++ b/tests/negtelnetserver.py.in
@@@ -1,364 -1,0 +1,368 @@@
 +#!AWKPYTHON
 +# -*- coding: utf-8 -*-
 +#
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2017 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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 logging
 +import os
 +import sys
- import logging
++
++from util import ClosingFileHandler
++
 +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('utf-8') in data:
 +                log.debug("Received verification request from test framework")
 +                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.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 = ClosingFileHandler(options.logfile)
 +        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/nroff-scan.pl.in
index 8f4f2a24c,000000000..7c1d90e2b
mode 100755,000000..100755
--- a/tests/nroff-scan.pl.in
+++ b/tests/nroff-scan.pl.in
@@@ -1,106 -1,0 +1,106 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2016 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +#
 +# scan nroff pages to find basic syntactic problems such as unbalanced \f
 +# codes or references to non-existing curl man pages.
 +
 +my $docsroot = $ARGV[0];
 +
 +if(!$docsroot || ($docsroot eq "-g")) {
 +    print "Usage: nroff-scan.pl <docs root dir> [nroff files]\n";
 +    exit;
 +}
 +
 +
 +shift @ARGV;
 +
 +my @f = @ARGV;
 +
 +my %manp;
 +
 +sub manpresent {
 +    my ($man) = @_;
 +    if($manp{$man}) {
 +        return 1;
 +    }
 +    elsif(-r "$docsroot/$man" ||
 +          -r "$docsroot/libcurl/$man" ||
 +          -r "$docsroot/libcurl/opts/$man") {
 +        $manp{$man}=1;
 +        return 1;
 +    }
 +    return 0;
 +}
 +
 +sub file {
 +    my ($f) = @_;
 +    open(F, "<$f") ||
 +        die "no file";
 +    my $line = 1;
 +    while(<F>) {
 +        chomp;
 +        my $l = $_;
 +        while($l =~ s/\\f(.)([^ ]*)\\f(.)//) {
 +            my ($pre, $str, $post)=($1, $2, $3);
 +            if($post ne "P") {
 +                print "error: $f:$line: missing \\fP after $str\n";
 +                $errors++;
 +            }
 +            if($str =~ /((libcurl|gnurl)([^ ]*))\(3\)/i) {
 +                my $man = "$1.3";
 +                if(!manpresent($man)) {
 +                    print "error: $f:$line: referring to non-existing man 
page $man\n";
 +                    $errors++;
 +                }
 +                if($pre ne "I") {
 +                    print "error: $f:$line: use \\fI before $str\n";
 +                    $errors++;
 +                }
 +            }
 +        }
 +        if($l =~ /(gnurl([^ ]*)\(3\))/i) {
 +            print "error: $f:$line: non-referencing $1\n";
 +            $errors++;
 +        }
 +        if($l =~ /^\.BR (.*)/) {
 +            my $i= $1;
 +            while($i =~ s/((lib|)gnurl([^ ]*)) *\"\(3\)(,|) *\" *//i ) {
 +                my $man = "$1.3";
 +                if(!manpresent($man)) {
 +                    print "error: $f:$line: referring to non-existing man 
page $man\n";
 +                    $errors++;
 +                }
 +            }
 +        }
 +        $line++;
 +    }
 +    close(F);
 +}
 +
 +foreach my $f (@f) {
 +    file($f);
 +}
 +
 +print "OK\n" if(!$errors);
 +
 +exit $errors?1:0;
diff --cc tests/rtspserver.pl.in
index 83d24b7fe,000000000..09daa0eb5
mode 100755,000000..100755
--- a/tests/rtspserver.pl.in
+++ b/tests/rtspserver.pl.in
@@@ -1,122 -1,0 +1,122 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +#***************************************************************************
 +
 +BEGIN {
 +    push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
 +    push(@INC, ".");
 +}
 +
 +use strict;
 +use warnings;
 +
 +use serverhelp qw(
 +    server_pidfilename
 +    server_logfilename
 +    );
 +
 +use sshhelp qw(
 +    exe_ext
 +    );
 +
 +my $verbose = 0;     # set to 1 for debugging
 +my $port = 8990;     # just a default
 +my $ipvnum = 4;      # default IP version of rtsp server
 +my $idnum = 1;       # default rtsp server instance number
 +my $proto = 'rtsp';  # protocol the rtsp server speaks
 +my $pidfile;         # rtsp server pid file
 +my $portfile;
 +my $logfile;         # rtsp server log file
 +my $srcdir;
 +
 +my $flags  = "";
 +my $path   = '.';
 +my $logdir = $path .'/log';
 +
 +while(@ARGV) {
 +    if($ARGV[0] eq '--pidfile') {
 +        if($ARGV[1]) {
 +            $pidfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--portfile') {
 +        if($ARGV[1]) {
 +            $portfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--logfile') {
 +        if($ARGV[1]) {
 +            $logfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--srcdir') {
 +        if($ARGV[1]) {
 +            $srcdir = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--ipv4') {
 +        $ipvnum = 4;
 +    }
 +    elsif($ARGV[0] eq '--ipv6') {
 +        $ipvnum = 6;
 +    }
 +    elsif($ARGV[0] eq '--port') {
 +        if($ARGV[1] =~ /^(\d+)$/) {
 +            $port = $1;
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--id') {
 +        if($ARGV[1] =~ /^(\d+)$/) {
 +            $idnum = $1 if($1 > 0);
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--verbose') {
 +        $verbose = 1;
 +    }
 +    else {
 +        print STDERR "\nWarning: rtspserver.pl unknown parameter: $ARGV[0]\n";
 +    }
 +    shift @ARGV;
 +}
 +
 +if(!$srcdir) {
 +    $srcdir = $ENV{'srcdir'} || '.';
 +}
 +if(!$pidfile) {
 +    $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
 +}
 +if(!$logfile) {
 +    $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
 +}
 +
 +$flags .= "--pidfile \"$pidfile\" ".
 +    "--portfile \"$portfile\" ".
 +    "--logfile \"$logfile\" ";
 +$flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
 +
 +exec("server/rtspd".exe_ext('SRV')." $flags");
diff --cc tests/runtests.pl.in
index a8bfe16c4,000000000..710132ed8
mode 100755,000000..100755
--- a/tests/runtests.pl.in
+++ b/tests/runtests.pl.in
@@@ -1,5825 -1,0 +1,5834 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +
 +# Experimental hooks are available to run tests remotely on machines that
 +# are able to run curl but are unable to run the test harness.
 +# The following sections need to be modified:
 +#
 +#  $HOSTIP, $HOST6IP - Set to the address of the host running the test suite
 +#  $CLIENTIP, $CLIENT6IP - Set to the address of the host running curl
 +#  runclient, runclientoutput - Modify to copy all the files in the log/
 +#    directory to the system running curl, run the given command remotely
 +#    and save the return code or returned stdout (respectively), then
 +#    copy all the files from the remote system's log/ directory back to
 +#    the host running the test suite.  This can be done a few ways, such
 +#    as using scp & ssh, rsync & telnet, or using a NFS shared directory
 +#    and ssh.
 +#
 +# 'make && make test' needs to be done on both machines before making the
 +# above changes and running runtests.pl manually.  In the shared NFS case,
 +# the contents of the tests/server/ directory must be from the host
 +# running the test suite, while the rest must be from the host running curl.
 +#
 +# Note that even with these changes a number of tests will still fail (mainly
 +# to do with cookies, those that set environment variables, or those that
 +# do more than touch the file system in a <precheck> or <postcheck>
 +# section). These can be added to the $TESTCASES line below,
 +# e.g. $TESTCASES="!8 !31 !63 !cookies..."
 +#
 +# Finally, to properly support -g and -n, checktestcmd needs to change
 +# to check the remote system's PATH, and the places in the code where
 +# the curl binary is read directly to determine its type also need to be
 +# fixed. As long as the -g option is never given, and the -n is always
 +# given, this won't be a problem.
 +
 +
 +# These should be the only variables that might be needed to get edited:
 +
 +BEGIN {
 +    # Define srcdir to the location of the tests source directory. This is
 +    # usually set by the Makefile, but for out-of-tree builds with direct
 +    # invocation of runtests.pl, it may not be set.
 +    if(!defined $ENV{'srcdir'}) {
 +        use File::Basename;
 +        $ENV{'srcdir'} = dirname(__FILE__);
 +    }
 +    push(@INC, $ENV{'srcdir'});
 +    # run time statistics needs Time::HiRes
 +    eval {
 +        no warnings "all";
 +        require Time::HiRes;
 +        import  Time::HiRes qw( time );
 +    }
 +}
 +
 +use strict;
 +use warnings;
 +use Cwd;
 +use Digest::MD5 qw(md5);
 +use MIME::Base64;
 +
 +# Subs imported from serverhelp module
 +use serverhelp qw(
 +    serverfactors
 +    servername_id
 +    servername_str
 +    servername_canon
 +    server_pidfilename
 +    server_portfilename
 +    server_logfilename
 +    );
 +
 +# Variables and subs imported from sshhelp module
 +use sshhelp qw(
 +    $sshdexe
 +    $sshexe
 +    $sftpexe
 +    $sshconfig
 +    $sftpconfig
 +    $sshdlog
 +    $sshlog
 +    $sftplog
 +    $sftpcmds
 +    display_sshdconfig
 +    display_sshconfig
 +    display_sftpconfig
 +    display_sshdlog
 +    display_sshlog
 +    display_sftplog
 +    exe_ext
 +    find_sshd
 +    find_ssh
 +    find_sftp
 +    find_httptlssrv
 +    sshversioninfo
 +    );
 +
 +use pathhelp;
 +
 +require "getpart.pm"; # array functions
 +require "valgrind.pm"; # valgrind report parser
 +require "ftp.pm";
 +require "azure.pm";
 +require "appveyor.pm";
 +
 +my $HOSTIP="127.0.0.1";   # address on which the test server listens
 +my $HOST6IP="[::1]";      # address on which the test server listens
 +my $CLIENTIP="127.0.0.1"; # address which curl uses for incoming connections
 +my $CLIENT6IP="[::1]";    # address which curl uses for incoming connections
 +
 +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 $HTTPSPROXYPORT = $noport; # HTTPS-proxy (stunnel) port
 +my $FTPPORT=$noport;     # FTP server 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 $TELNETPORT=$noport;  # TELNET server port with negotiation
 +my $HTTPUNIXPATH;        # HTTP server Unix domain socket path
 +
 +my $SSHSRVMD5 = "[uninitialized]"; # MD5 of ssh server public key
++my $VERSION;             # curl's reported version number
 +
 +my $srcdir = $ENV{'srcdir'} || '.';
 +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
 +my $DBGCURL=$CURL; #"../src/.libs/curl";  # alternative for debugging
 +my $LOGDIR="log";
 +my $TESTDIR="$srcdir/data";
 +my $LIBDIR="./libtest";
 +my $UNITDIR="./unit";
 +# TODO: change this to use server_inputfilename()
 +my $SERVERIN="$LOGDIR/server.input"; # what curl sent the server
 +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 server instructions here
 +my $SERVERLOGS_LOCK="$LOGDIR/serverlogs.lock"; # server logs advisor read lock
 +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:
 +my $TESTCASES="all";
 +
 +# To run specific test cases, set them like:
 +# $TESTCASES="1 2 3 7 8";
 +
 +#######################################################################
 +# No variables below this point should need to be modified
 +#
 +
 +# invoke perl like this:
 +my $perl="perl -I$srcdir";
 +my $server_response_maxtime=13;
 +
 +my $debug_build=0;          # built debug enabled (--enable-debug)
 +my $has_memory_tracking=0;  # built with memory tracking (--enable-curldebug)
 +my $libtool;
 +my $repeat = 0;
 +
 +# name of the file that the memory debugging creates:
 +my $memdump="$LOGDIR/memdump";
 +
 +# the path to the script that analyzes the memory debug output file:
 +my $memanalyze="$perl $srcdir/memanalyze.pl";
 +
 +my $pwd = getcwd();          # current working directory
 +my $posix_pwd = $pwd;
 +
 +my $start;
 +my $ftpchecktime=1; # time it took to verify our test FTP server
 +my $scrambleorder;
 +my $stunnel = checkcmd("stunnel4") || checkcmd("tstunnel") || 
checkcmd("stunnel");
 +my $valgrind = checktestcmd("valgrind");
 +my $valgrind_logfile="--logfile";
 +my $valgrind_tool;
 +my $gdb = checktestcmd("gdb");
 +my $httptlssrv = find_httptlssrv();
 +
 +my $uname_release = `uname -r`;
 +my $is_wsl = $uname_release =~ /Microsoft$/;
 +
 +my $has_ssl;        # set if libcurl is built with SSL support
 +my $has_largefile;  # set if libcurl is built with large file support
 +my $has_idn;        # set if libcurl is built with IDN support
 +my $http_ipv6;      # set if HTTP server has IPv6 support
 +my $http_unix;      # set if HTTP server has Unix sockets support
 +my $ftp_ipv6;       # set if FTP server has IPv6 support
 +my $tftp_ipv6;      # set if TFTP server has IPv6 support
 +my $gopher_ipv6;    # set if Gopher server has IPv6 support
 +my $has_ipv6;       # set if libcurl is built with IPv6 support
 +my $has_unix;       # set if libcurl is built with Unix sockets support
 +my $has_libz;       # set if libcurl is built with libz support
 +my $has_brotli;     # set if libcurl is built with brotli support
 +my $has_zstd;       # set if libcurl is built with zstd support
 +my $has_getrlimit;  # set if system has getrlimit()
 +my $has_ntlm;       # set if libcurl is built with NTLM support
 +my $has_ntlm_wb;    # set if libcurl is built with NTLM delegation to winbind
 +my $has_sspi;       # set if libcurl is built with Windows SSPI
 +my $has_gssapi;     # set if libcurl is built with a GSS-API library
 +my $has_kerberos;   # set if libcurl is built with Kerberos support
 +my $has_spnego;     # set if libcurl is built with SPNEGO support
 +my $has_charconv;   # set if libcurl is built with CharConv support
 +my $has_tls_srp;    # set if libcurl is built with TLS-SRP support
 +my $has_metalink;   # set if curl is built with Metalink support
 +my $has_http2;      # set if libcurl is built with HTTP2 support
 +my $has_httpsproxy; # set if libcurl is built with HTTPS-proxy support
 +my $has_crypto;     # set if libcurl is built with cryptographic support
 +my $has_cares;      # set if built with c-ares
 +my $has_threadedres;# set if built with threaded resolver
 +my $has_psl;        # set if libcurl is built with PSL support
 +my $has_altsvc;     # set if libcurl is built with alt-svc support
++my $has_hsts;       # set if libcurl is built with HSTS support
 +my $has_ldpreload;  # set if curl is built for systems supporting LD_PRELOAD
 +my $has_multissl;   # set if curl is build with MultiSSL support
 +my $has_manual;     # set if curl is built with built-in manual
 +my $has_win32;      # set if curl is built for Windows
 +my $has_mingw;      # set if curl is built with MinGW (as opposed to 
MinGW-w64)
 +
 +# this version is decided by the particular nghttp2 library that is being used
 +my $h2cver = "h2c";
 +
 +my $has_openssl;    # built with a lib using an OpenSSL-like API
 +my $has_gnutls;     # built with GnuTLS
 +my $has_nss;        # built with NSS
 +my $has_wolfssl;    # built with wolfSSL
 +my $has_schannel;   # built with Schannel
 +my $has_sectransp;  # built with Secure Transport
 +my $has_boringssl;  # built with BoringSSL
 +my $has_libressl;   # built with libressl
 +my $has_mbedtls;    # built with mbedTLS
 +my $has_mesalink;   # built with MesaLink
 +
 +my $has_sslpinning; # built with a TLS backend that supports pinning
 +
 +my $has_shared = "unknown";  # built shared
 +
 +my $resolver;       # name of the resolver backend (for human presentation)
 +
 +my $has_textaware;  # set if running on a system that has a text mode concept
 +                    # on files. Windows for example
 +my @protocols;   # array of lowercase supported protocol servers
 +
 +my $skipped=0;  # number of tests skipped; reported in main loop
 +my %skipped;    # skipped{reason}=counter, reasons for skip
 +my @teststat;   # teststat[testnum]=reason, reasons for skip
 +my %disabled_keywords;  # key words of tests to skip
 +my %ignored_keywords;   # key words of tests to ignore results
 +my %enabled_keywords;   # key words of tests to run
 +my %disabled;           # disabled test cases
 +my %ignored;            # ignored results of test cases
 +
 +my $sshdid;      # for socks server, ssh daemon version id
 +my $sshdvernum;  # for socks server, ssh daemon version number
 +my $sshdverstr;  # for socks server, ssh daemon version string
 +my $sshderror;   # for socks server, ssh daemon version error
 +
 +my $defserverlogslocktimeout = 2; # timeout to await server logs lock removal
 +my $defpostcommanddelay = 0; # delay between command and postcheck sections
 +
 +my $timestats;   # time stamping and stats generation
 +my $fullstats;   # show time stats for every single test
 +my %timeprepini; # timestamp for each test preparation start
 +my %timesrvrini; # timestamp for each test required servers verification start
 +my %timesrvrend; # timestamp for each test required servers verification end
 +my %timetoolini; # timestamp for each test command run starting
 +my %timetoolend; # timestamp for each test command run stopping
 +my %timesrvrlog; # timestamp for each test server logs lock removal
 +my %timevrfyend; # timestamp for each test result verification end
 +
 +my $testnumcheck; # test number, set in singletest sub.
 +my %oldenv;
 +my %feature;      # array of enabled features
 +my %keywords;     # array of keywords from the test spec
 +
 +#######################################################################
 +# variables that command line options may set
 +#
 +
 +my $short;
 +my $automakestyle;
 +my $verbose;
 +my $debugprotocol;
 +my $anyway;
 +my $gdbthis;      # run test case with gdb debugger
 +my $gdbxwin;      # use windowed gdb when using gdb
 +my $keepoutfiles; # keep stdout and stderr files after tests
 +my $listonly;     # only list the tests
 +my $postmortem;   # display detailed info about failed tests
 +my $run_event_based; # run curl with --test-event to test the event API
 +
 +my %run;          # running server
 +my %doesntrun;    # servers that don't work, identified by pidfile
 +my %serverpidfile;# all server pid file names, identified by server id
 +my %serverportfile;# all server port file names, identified by server id
 +my %runcert;      # cert file currently in use by an ssl running server
 +
 +# torture test variables
 +my $torture;
 +my $tortnum;
 +my $tortalloc;
 +my $shallow;
 +my $randseed = 0;
 +
 +# Azure Pipelines specific variables
 +my $AZURE_RUN_ID = 0;
 +my $AZURE_RESULT_ID = 0;
 +
 +#######################################################################
 +# logmsg is our general message logging subroutine.
 +#
 +sub logmsg {
 +    for(@_) {
 +        my $line = $_;
 +        if ($is_wsl) {
 +            # use \r\n for WSL shell
 +            $line =~ s/\r?\n$/\r\n/g;
 +        }
 +        print "$line";
 +    }
 +}
 +
 +# get the name of the current user
 +my $USER = $ENV{USER};          # Linux
 +if (!$USER) {
 +    $USER = $ENV{USERNAME};     # Windows
 +    if (!$USER) {
 +        $USER = $ENV{LOGNAME};  # Some Unix (I think)
 +    }
 +}
 +
 +# enable memory debugging if curl is compiled with it
 +$ENV{'CURL_MEMDEBUG'} = $memdump;
 +$ENV{'CURL_ENTROPY'}="12345678";
 +$ENV{'CURL_FORCETIME'}=1; # for debug NTLM magic
 +$ENV{'HOME'}=$pwd;
 +$ENV{'COLUMNS'}=79; # screen width!
 +
 +sub catch_zap {
 +    my $signame = shift;
 +    logmsg "runtests.pl received SIG$signame, exiting\n";
 +    stopservers($verbose);
 +    die "Somebody sent me a SIG$signame";
 +}
 +$SIG{INT} = \&catch_zap;
 +$SIG{TERM} = \&catch_zap;
 +
 +##########################################################################
 +# Clear all possible '*_proxy' environment variables for various protocols
 +# to prevent them to interfere with our testing!
 +
 +my $protocol;
 +foreach $protocol (('ftp', 'http', 'ftps', 'https', 'no', 'all')) {
 +    my $proxy = "${protocol}_proxy";
 +    # clear lowercase version
 +    delete $ENV{$proxy} if($ENV{$proxy});
 +    # clear uppercase version
 +    delete $ENV{uc($proxy)} if($ENV{uc($proxy)});
 +}
 +
 +# make sure we don't get affected by other variables that control our
 +# behaviour
 +
 +delete $ENV{'SSL_CERT_DIR'} if($ENV{'SSL_CERT_DIR'});
 +delete $ENV{'SSL_CERT_PATH'} if($ENV{'SSL_CERT_PATH'});
 +delete $ENV{'CURL_CA_BUNDLE'} if($ENV{'CURL_CA_BUNDLE'});
 +
 +#######################################################################
 +# Load serverpidfile and serverportfile hashes with file names for all
 +# possible servers.
 +#
 +sub init_serverpidfile_hash {
 +  for my $proto (('ftp', 'http', 'imap', 'pop3', 'smtp', 'http/2')) {
 +    for my $ssl (('', 's')) {
 +      for my $ipvnum ((4, 6)) {
 +        for my $idnum ((1, 2, 3)) {
 +          my $serv = servername_id("$proto$ssl", $ipvnum, $idnum);
 +          my $pidf = server_pidfilename("$proto$ssl", $ipvnum, $idnum);
 +          $serverpidfile{$serv} = $pidf;
 +          my $portf = server_portfilename("$proto$ssl", $ipvnum, $idnum);
 +          $serverportfile{$serv} = $portf;
 +        }
 +      }
 +    }
 +  }
 +  for my $proto (('tftp', 'sftp', 'socks', 'ssh', 'rtsp', 'gopher', 'httptls',
 +                  'dict', 'smb', 'smbs', 'telnet', 'mqtt')) {
 +    for my $ipvnum ((4, 6)) {
 +      for my $idnum ((1, 2)) {
 +        my $serv = servername_id($proto, $ipvnum, $idnum);
 +        my $pidf = server_pidfilename($proto, $ipvnum, $idnum);
 +        $serverpidfile{$serv} = $pidf;
 +        my $portf = server_portfilename($proto, $ipvnum, $idnum);
 +        $serverportfile{$serv} = $portf;
 +      }
 +    }
 +  }
 +  for my $proto (('http', 'imap', 'pop3', 'smtp', 'http/2')) {
 +    for my $ssl (('', 's')) {
 +      my $serv = servername_id("$proto$ssl", "unix", 1);
 +      my $pidf = server_pidfilename("$proto$ssl", "unix", 1);
 +      $serverpidfile{$serv} = $pidf;
 +      my $portf = server_portfilename("$proto$ssl", "unix", 1);
 +      $serverportfile{$serv} = $portf;
 +    }
 +  }
 +}
 +
 +#######################################################################
 +# Check if a given child process has just died. Reaps it if so.
 +#
 +sub checkdied {
 +    use POSIX ":sys_wait_h";
 +    my $pid = $_[0];
 +    if((not defined $pid) || $pid <= 0) {
 +        return 0;
 +    }
 +    my $rc = pidwait($pid, &WNOHANG);
 +    return ($rc == $pid)?1:0;
 +}
 +
 +#######################################################################
 +# Start a new thread/process and run the given command line in there.
 +# Return the pids (yes plural) of the new child process to the parent.
 +#
 +sub startnew {
 +    my ($cmd, $pidfile, $timeout, $fake)=@_;
 +
 +    logmsg "startnew: $cmd\n" if ($verbose);
 +
 +    my $child = fork();
 +    my $pid2 = 0;
 +
 +    if(not defined $child) {
 +        logmsg "startnew: fork() failure detected\n";
 +        return (-1,-1);
 +    }
 +
 +    if(0 == $child) {
 +        # Here we are the child. Run the given command.
 +
 +        # Put an "exec" in front of the command so that the child process
 +        # keeps this child's process ID.
 +        exec("exec $cmd") || die "Can't exec() $cmd: $!";
 +
 +        # exec() should never return back here to this process. We protect
 +        # ourselves by calling die() just in case something goes really bad.
 +        die "error: exec() has returned";
 +    }
 +
 +    # Ugly hack but ssh client and gnutls-serv don't support pid files
 +    if ($fake) {
 +        if(open(OUT, ">$pidfile")) {
 +            print OUT $child . "\n";
 +            close(OUT);
 +            logmsg "startnew: $pidfile faked with pid=$child\n" if($verbose);
 +        }
 +        else {
 +            logmsg "startnew: failed to write fake $pidfile with 
pid=$child\n";
 +        }
 +        # could/should do a while connect fails sleep a bit and loop
 +        portable_sleep($timeout);
 +        if (checkdied($child)) {
 +            logmsg "startnew: child process has failed to start\n" 
if($verbose);
 +            return (-1,-1);
 +        }
 +    }
 +
 +    my $count = $timeout;
 +    while($count--) {
 +        if(-f $pidfile && -s $pidfile && open(PID, "<$pidfile")) {
 +            $pid2 = 0 + <PID>;
 +            close(PID);
 +            if(($pid2 > 0) && pidexists($pid2)) {
 +                # if $pid2 is valid, then make sure this pid is alive, as
 +                # otherwise it is just likely to be the _previous_ pidfile or
 +                # similar!
 +                last;
 +            }
 +            # invalidate $pid2 if not actually alive
 +            $pid2 = 0;
 +        }
 +        if (checkdied($child)) {
 +            logmsg "startnew: child process has died, server might start up\n"
 +                if($verbose);
 +            # We can't just abort waiting for the server with a
 +            # return (-1,-1);
 +            # because the server might have forked and could still start
 +            # up normally. Instead, just reduce the amount of time we remain
 +            # waiting.
 +            $count >>= 2;
 +        }
 +        sleep(1);
 +    }
 +
 +    # Return two PIDs, the one for the child process we spawned and the one
 +    # reported by the server itself (in case it forked again on its own).
 +    # Both (potentially) need to be killed at the end of the test.
 +    return ($child, $pid2);
 +}
 +
 +
 +#######################################################################
 +# Check for a command in the PATH of the test server.
 +#
 +sub checkcmd {
 +    my ($cmd)=@_;
 +    my @paths=(split(":", $ENV{'PATH'}), "/usr/sbin", "/usr/local/sbin",
 +               "/sbin", "/usr/bin", "/usr/local/bin",
-                "./libtest/.libs", "./libtest");
++               "$LIBDIR/.libs", "$LIBDIR");
 +    for(@paths) {
 +        if( -x "$_/$cmd" && ! -d "$_/$cmd") {
 +            # executable bit but not a directory!
 +            return "$_/$cmd";
 +        }
 +    }
 +}
 +
 +#######################################################################
 +# Get the list of tests that the tests/data/Makefile.am knows about!
 +#
 +my $disttests;
 +sub get_disttests {
 +    my $makeCmd = 'make';
 +    if(-f "../CMakeCache.txt") {
 +        $makeCmd = 'cmake --build ../.. --target';
 +    }
 +    my @dist = `cd data && $makeCmd show`;
 +    $disttests = join("", @dist);
 +}
 +
 +#######################################################################
 +# Check for a command in the PATH of the machine running curl.
 +#
 +sub checktestcmd {
 +    my ($cmd)=@_;
 +    return checkcmd($cmd);
 +}
 +
 +#######################################################################
 +# Run the application under test and return its return code
 +#
 +sub runclient {
 +    my ($cmd)=@_;
 +    my $ret = system($cmd);
 +    print "CMD ($ret): $cmd\n" if($verbose && !$torture);
 +    return $ret;
 +
 +# This is one way to test curl on a remote machine
 +#    my $out = system("ssh $CLIENTIP cd \'$pwd\' \\; \'$cmd\'");
 +#    sleep 2;    # time to allow the NFS server to be updated
 +#    return $out;
 +}
 +
 +#######################################################################
 +# Run the application under test and return its stdout
 +#
 +sub runclientoutput {
 +    my ($cmd)=@_;
 +    return `$cmd`;
 +
 +# This is one way to test curl on a remote machine
 +#    my @out = `ssh $CLIENTIP cd \'$pwd\' \\; \'$cmd\'`;
 +#    sleep 2;    # time to allow the NFS server to be updated
 +#    return @out;
 + }
 +
 +#######################################################################
 +# Memory allocation test and failure torture testing.
 +#
 +sub torture {
 +    my ($testcmd, $testnum, $gdbline) = @_;
 +
 +    # remove memdump first to be sure we get a new nice and clean one
 +    unlink($memdump);
 +
 +    # First get URL from test server, ignore the output/result
 +    runclient($testcmd);
 +
 +    logmsg " CMD: $testcmd\n" if($verbose);
 +
 +    # memanalyze -v is our friend, get the number of allocations made
 +    my $count=0;
 +    my @out = `$memanalyze -v $memdump`;
 +    for(@out) {
 +        if(/^Operations: (\d+)/) {
 +            $count = $1;
 +            last;
 +        }
 +    }
 +    if(!$count) {
 +        logmsg " found no functions to make fail\n";
 +        return 0;
 +    }
 +
 +    my @ttests = (1 .. $count);
 +    if($shallow && ($shallow < $count)) {
 +        my $discard = scalar(@ttests) - $shallow;
 +        my $percent = sprintf("%.2f%%", $shallow * 100 / scalar(@ttests));;
 +        logmsg " $count functions found, but only fail $shallow ($percent)\n";
 +        while($discard) {
 +            my $rm;
 +            do {
 +                # find a test to discard
 +                $rm = rand(scalar(@ttests));
 +            } while(!$ttests[$rm]);
 +            $ttests[$rm] = undef;
 +            $discard--;
 +        }
 +    }
 +    else {
 +        logmsg " $count functions to make fail\n";
 +    }
 +
 +    for (@ttests) {
 +        my $limit = $_;
 +        my $fail;
 +        my $dumped_core;
 +
 +        if(!defined($limit)) {
 +            # --shallow can undefine them
 +            next;
 +        }
 +        if($tortalloc && ($tortalloc != $limit)) {
 +            next;
 +        }
 +
 +        if($verbose) {
 +            my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
 +                localtime(time());
 +            my $now = sprintf("%02d:%02d:%02d ", $hour, $min, $sec);
 +            logmsg "Fail function no: $limit at $now\r";
 +        }
 +
 +        # make the memory allocation function number $limit return failure
 +        $ENV{'CURL_MEMLIMIT'} = $limit;
 +
 +        # remove memdump first to be sure we get a new nice and clean one
 +        unlink($memdump);
 +
 +        my $cmd = $testcmd;
 +        if($valgrind && !$gdbthis) {
 +            my @valgrindoption = getpart("verify", "valgrind");
 +            if((!@valgrindoption) || ($valgrindoption[0] !~ /disable/)) {
 +                my $valgrindcmd = "$valgrind ";
 +                $valgrindcmd .= "$valgrind_tool " if($valgrind_tool);
 +                $valgrindcmd .= "--quiet --leak-check=yes ";
 +                $valgrindcmd .= "--suppressions=$srcdir/valgrind.supp ";
 +                # $valgrindcmd .= "--gen-suppressions=all ";
 +                $valgrindcmd .= "--num-callers=16 ";
 +                $valgrindcmd .= 
"${valgrind_logfile}=$LOGDIR/valgrind$testnum";
 +                $cmd = "$valgrindcmd $testcmd";
 +            }
 +        }
 +        logmsg "*** Function number $limit is now set to fail ***\n" 
if($gdbthis);
 +
 +        my $ret = 0;
 +        if($gdbthis) {
 +            runclient($gdbline);
 +        }
 +        else {
 +            $ret = runclient($cmd);
 +        }
 +        #logmsg "$_ Returned " . ($ret >> 8) . "\n";
 +
 +        # Now clear the variable again
 +        delete $ENV{'CURL_MEMLIMIT'} if($ENV{'CURL_MEMLIMIT'});
 +
 +        if(-r "core") {
 +            # there's core file present now!
 +            logmsg " core dumped\n";
 +            $dumped_core = 1;
 +            $fail = 2;
 +        }
 +
 +        if($valgrind) {
 +            my @e = valgrindparse("$LOGDIR/valgrind$testnum");
 +            if(@e && $e[0]) {
 +                if($automakestyle) {
 +                    logmsg "FAIL: torture $testnum - valgrind\n";
 +                }
 +                else {
 +                    logmsg " valgrind ERROR ";
 +                    logmsg @e;
 +                }
 +                $fail = 1;
 +            }
 +        }
 +
 +        # verify that it returns a proper error code, doesn't leak memory
 +        # and doesn't core dump
 +        if(($ret & 255) || ($ret >> 8) >= 128) {
 +            logmsg " system() returned $ret\n";
 +            $fail=1;
 +        }
 +        else {
 +            my @memdata=`$memanalyze $memdump`;
 +            my $leak=0;
 +            for(@memdata) {
 +                if($_ ne "") {
 +                    # well it could be other memory problems as well, but
 +                    # we call it leak for short here
 +                    $leak=1;
 +                }
 +            }
 +            if($leak) {
 +                logmsg "** MEMORY FAILURE\n";
 +                logmsg @memdata;
 +                logmsg `$memanalyze -l $memdump`;
 +                $fail = 1;
 +            }
 +        }
 +        if($fail) {
 +            logmsg " Failed on function number $limit in test.\n",
 +            " invoke with \"-t$limit\" to repeat this single case.\n";
 +            stopservers($verbose);
 +            return 1;
 +        }
 +    }
 +
 +    logmsg "torture OK\n";
 +    return 0;
 +}
 +
 +#######################################################################
 +# Stop a test server along with pids which aren't in the %run hash yet.
 +# This also stops all servers which are relative to the given one.
 +#
 +sub stopserver {
 +    my ($server, $pidlist) = @_;
 +
 +    #
 +    # kill sockfilter processes for pingpong relative server
 +    #
 +    if($server =~ /^(ftp|imap|pop3|smtp)s?(\d*)(-ipv6|)$/) {
 +        my $proto  = $1;
 +        my $idnum  = ($2 && ($2 > 1)) ? $2 : 1;
 +        my $ipvnum = ($3 && ($3 =~ /6$/)) ? 6 : 4;
 +        killsockfilters($proto, $ipvnum, $idnum, $verbose);
 +    }
 +    #
 +    # All servers relative to the given one must be stopped also
 +    #
 +    my @killservers;
 +    if($server =~ /^(ftp|http|imap|pop3|smtp)s((\d*)(-ipv6|-unix|))$/) {
 +        # given a stunnel based ssl server, also kill non-ssl underlying one
 +        push @killservers, "${1}${2}";
 +    }
 +    elsif($server =~ /^(ftp|http|imap|pop3|smtp)((\d*)(-ipv6|-unix|))$/) {
 +        # given a non-ssl server, also kill stunnel based ssl piggybacking one
 +        push @killservers, "${1}s${2}";
 +    }
 +    elsif($server =~ /^(socks)((\d*)(-ipv6|))$/) {
 +        # given a socks server, also kill ssh underlying one
 +        push @killservers, "ssh${2}";
 +    }
 +    elsif($server =~ /^(ssh)((\d*)(-ipv6|))$/) {
 +        # given a ssh server, also kill socks piggybacking one
 +        push @killservers, "socks${2}";
 +    }
 +    if($server eq "http") {
 +        # since the http2 server is a proxy that needs to know about the
 +        # dynamic http port it too needs to get restarted when the http server
 +        # is killed
 +        push @killservers, "http/2";
 +    }
 +    push @killservers, $server;
 +    #
 +    # kill given pids and server relative ones clearing them in %run hash
 +    #
 +    foreach my $server (@killservers) {
 +        if($run{$server}) {
 +            # we must prepend a space since $pidlist may already contain a pid
 +            $pidlist .= " $run{$server}";
 +            $run{$server} = 0;
 +        }
 +        $runcert{$server} = 0 if($runcert{$server});
 +    }
 +    killpid($verbose, $pidlist);
 +    #
 +    # cleanup server pid files
 +    #
 +    foreach my $server (@killservers) {
 +        my $pidfile = $serverpidfile{$server};
 +        my $pid = processexists($pidfile);
 +        if($pid > 0) {
 +            logmsg "Warning: $server server unexpectedly alive\n";
 +            killpid($verbose, $pid);
 +        }
 +        unlink($pidfile) if(-f $pidfile);
 +    }
 +}
 +
 +#######################################################################
 +# Verify that the server that runs on $ip, $port is our server.  This also
 +# implies that we can speak with it, as there might be occasions when the
 +# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
 +# assign requested address")
 +#
 +sub verifyhttp {
 +    my ($proto, $ipvnum, $idnum, $ip, $port_or_path) = @_;
 +    my $server = servername_id($proto, $ipvnum, $idnum);
 +    my $pid = 0;
 +    my $bonus="";
 +    # $port_or_path contains a path for Unix sockets, sws ignores the port
 +    my $port = ($ipvnum eq "unix") ? 80 : $port_or_path;
 +
 +    my $verifyout = "$LOGDIR/".
 +        servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
 +    unlink($verifyout) if(-f $verifyout);
 +
 +    my $verifylog = "$LOGDIR/".
 +        servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
 +    unlink($verifylog) if(-f $verifylog);
 +
 +    if($proto eq "gopher") {
 +        # gopher is funny
 +        $bonus="1/";
 +    }
 +
 +    my $flags = "--max-time $server_response_maxtime ";
 +    $flags .= "--output $verifyout ";
 +    $flags .= "--silent ";
 +    $flags .= "--verbose ";
 +    $flags .= "--globoff ";
 +    $flags .= "--unix-socket '$port_or_path' " if $ipvnum eq "unix";
 +    $flags .= "--insecure " if($proto eq 'https');
 +    $flags .= "\"$proto://$ip:$port/${bonus}verifiedserver\"";
 +
 +    my $cmd = "$VCURL $flags 2>$verifylog";
 +
 +    # verify if our/any server is running on this port
 +    logmsg "RUN: $cmd\n" if($verbose);
 +    my $res = runclient($cmd);
 +
 +    $res >>= 8; # rotate the result
 +    if($res & 128) {
 +        logmsg "RUN: curl command died with a coredump\n";
 +        return -1;
 +    }
 +
 +    if($res && $verbose) {
 +        logmsg "RUN: curl command returned $res\n";
 +        if(open(FILE, "<$verifylog")) {
 +            while(my $string = <FILE>) {
 +                logmsg "RUN: $string" if($string !~ /^([ \t]*)$/);
 +            }
 +            close(FILE);
 +        }
 +    }
 +
 +    my $data;
 +    if(open(FILE, "<$verifyout")) {
 +        while(my $string = <FILE>) {
 +            $data = $string;
 +            last; # only want first line
 +        }
 +        close(FILE);
 +    }
 +
 +    if($data && ($data =~ /WE ROOLZ: (\d+)/)) {
 +        $pid = 0+$1;
 +    }
 +    elsif($res == 6) {
 +        # curl: (6) Couldn't resolve host '::1'
 +        logmsg "RUN: failed to resolve host 
($proto://$ip:$port/verifiedserver)\n";
 +        return -1;
 +    }
 +    elsif($data || ($res && ($res != 7))) {
 +        logmsg "RUN: Unknown server on our $server port: $port ($res)\n";
 +        return -1;
 +    }
 +    return $pid;
 +}
 +
 +#######################################################################
 +# Verify that the server that runs on $ip, $port is our server.  This also
 +# implies that we can speak with it, as there might be occasions when the
 +# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
 +# assign requested address")
 +#
 +sub verifyftp {
 +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
 +    my $server = servername_id($proto, $ipvnum, $idnum);
 +    my $pid = 0;
 +    my $time=time();
 +    my $extra="";
 +
 +    my $verifylog = "$LOGDIR/".
 +        servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
 +    unlink($verifylog) if(-f $verifylog);
 +
 +    if($proto eq "ftps") {
 +        $extra .= "--insecure --ftp-ssl-control ";
 +    }
 +
 +    my $flags = "--max-time $server_response_maxtime ";
 +    $flags .= "--silent ";
 +    $flags .= "--verbose ";
 +    $flags .= "--globoff ";
 +    $flags .= $extra;
 +    $flags .= "\"$proto://$ip:$port/verifiedserver\"";
 +
 +    my $cmd = "$VCURL $flags 2>$verifylog";
 +
 +    # check if this is our server running on this port:
 +    logmsg "RUN: $cmd\n" if($verbose);
 +    my @data = runclientoutput($cmd);
 +
 +    my $res = $? >> 8; # rotate the result
 +    if($res & 128) {
 +        logmsg "RUN: curl command died with a coredump\n";
 +        return -1;
 +    }
 +
 +    foreach my $line (@data) {
 +        if($line =~ /WE ROOLZ: (\d+)/) {
 +            # this is our test server with a known pid!
 +            $pid = 0+$1;
 +            last;
 +        }
 +    }
 +    if($pid <= 0 && @data && $data[0]) {
 +        # this is not a known server
 +        logmsg "RUN: Unknown server on our $server port: $port\n";
 +        return 0;
 +    }
 +    # we can/should use the time it took to verify the FTP server as a measure
 +    # on how fast/slow this host/FTP is.
 +    my $took = int(0.5+time()-$time);
 +
 +    if($verbose) {
 +        logmsg "RUN: Verifying our test $server server took $took seconds\n";
 +    }
 +    $ftpchecktime = $took>=1?$took:1; # make sure it never is below 1
 +
 +    return $pid;
 +}
 +
 +#######################################################################
 +# Verify that the server that runs on $ip, $port is our server.  This also
 +# implies that we can speak with it, as there might be occasions when the
 +# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
 +# assign requested address")
 +#
 +sub verifyrtsp {
 +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
 +    my $server = servername_id($proto, $ipvnum, $idnum);
 +    my $pid = 0;
 +
 +    my $verifyout = "$LOGDIR/".
 +        servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
 +    unlink($verifyout) if(-f $verifyout);
 +
 +    my $verifylog = "$LOGDIR/".
 +        servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
 +    unlink($verifylog) if(-f $verifylog);
 +
 +    my $flags = "--max-time $server_response_maxtime ";
 +    $flags .= "--output $verifyout ";
 +    $flags .= "--silent ";
 +    $flags .= "--verbose ";
 +    $flags .= "--globoff ";
 +    # currently verification is done using http
 +    $flags .= "\"http://$ip:$port/verifiedserver\"";;
 +
 +    my $cmd = "$VCURL $flags 2>$verifylog";
 +
 +    # verify if our/any server is running on this port
 +    logmsg "RUN: $cmd\n" if($verbose);
 +    my $res = runclient($cmd);
 +
 +    $res >>= 8; # rotate the result
 +    if($res & 128) {
 +        logmsg "RUN: curl command died with a coredump\n";
 +        return -1;
 +    }
 +
 +    if($res && $verbose) {
 +        logmsg "RUN: curl command returned $res\n";
 +        if(open(FILE, "<$verifylog")) {
 +            while(my $string = <FILE>) {
 +                logmsg "RUN: $string" if($string !~ /^([ \t]*)$/);
 +            }
 +            close(FILE);
 +        }
 +    }
 +
 +    my $data;
 +    if(open(FILE, "<$verifyout")) {
 +        while(my $string = <FILE>) {
 +            $data = $string;
 +            last; # only want first line
 +        }
 +        close(FILE);
 +    }
 +
 +    if($data && ($data =~ /RTSP_SERVER WE ROOLZ: (\d+)/)) {
 +        $pid = 0+$1;
 +    }
 +    elsif($res == 6) {
 +        # curl: (6) Couldn't resolve host '::1'
 +        logmsg "RUN: failed to resolve host 
($proto://$ip:$port/verifiedserver)\n";
 +        return -1;
 +    }
 +    elsif($data || ($res != 7)) {
 +        logmsg "RUN: Unknown server on our $server port: $port\n";
 +        return -1;
 +    }
 +    return $pid;
 +}
 +
 +#######################################################################
 +# Verify that the ssh server has written out its pidfile, recovering
 +# the pid from the file and returning it if a process with that pid is
 +# actually alive.
 +#
 +sub verifyssh {
 +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
 +    my $server = servername_id($proto, $ipvnum, $idnum);
 +    my $pidfile = server_pidfilename($proto, $ipvnum, $idnum);
 +    my $pid = 0;
 +    if(open(FILE, "<$pidfile")) {
 +        $pid=0+<FILE>;
 +        close(FILE);
 +    }
 +    if($pid > 0) {
 +        # if we have a pid it is actually our ssh server,
 +        # since runsshserver() unlinks previous pidfile
 +        if(!pidexists($pid)) {
 +            logmsg "RUN: SSH server has died after starting up\n";
 +            checkdied($pid);
 +            unlink($pidfile);
 +            $pid = -1;
 +        }
 +    }
 +    return $pid;
 +}
 +
 +#######################################################################
 +# Verify that we can connect to the sftp server, properly authenticate
 +# with generated config and key files and run a simple remote pwd.
 +#
 +sub verifysftp {
 +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
 +    my $server = servername_id($proto, $ipvnum, $idnum);
 +    my $verified = 0;
 +    # Find out sftp client canonical file name
 +    my $sftp = find_sftp();
 +    if(!$sftp) {
 +        logmsg "RUN: SFTP server cannot find $sftpexe\n";
 +        return -1;
 +    }
 +    # Find out ssh client canonical file name
 +    my $ssh = find_ssh();
 +    if(!$ssh) {
 +        logmsg "RUN: SFTP server cannot find $sshexe\n";
 +        return -1;
 +    }
 +    # Connect to sftp server, authenticate and run a remote pwd
 +    # command using our generated configuration and key files
 +    my $cmd = "\"$sftp\" -b $sftpcmds -F $sftpconfig -S \"$ssh\" $ip > 
$sftplog 2>&1";
 +    my $res = runclient($cmd);
 +    # Search for pwd command response in log file
 +    if(open(SFTPLOGFILE, "<$sftplog")) {
 +        while(<SFTPLOGFILE>) {
 +            if(/^Remote working directory: /) {
 +                $verified = 1;
 +                last;
 +            }
 +        }
 +        close(SFTPLOGFILE);
 +    }
 +    return $verified;
 +}
 +
 +#######################################################################
 +# Verify that the non-stunnel HTTP TLS extensions capable server that runs
 +# on $ip, $port is our server.  This also implies that we can speak with it,
 +# as there might be occasions when the server runs fine but we cannot talk
 +# to it ("Failed to connect to ::1: Can't assign requested address")
 +#
 +sub verifyhttptls {
 +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
 +    my $server = servername_id($proto, $ipvnum, $idnum);
 +    my $pidfile = server_pidfilename($proto, $ipvnum, $idnum);
 +    my $pid = 0;
 +
 +    my $verifyout = "$LOGDIR/".
 +        servername_canon($proto, $ipvnum, $idnum) .'_verify.out';
 +    unlink($verifyout) if(-f $verifyout);
 +
 +    my $verifylog = "$LOGDIR/".
 +        servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
 +    unlink($verifylog) if(-f $verifylog);
 +
 +    my $flags = "--max-time $server_response_maxtime ";
 +    $flags .= "--output $verifyout ";
 +    $flags .= "--verbose ";
 +    $flags .= "--globoff ";
 +    $flags .= "--insecure ";
 +    $flags .= "--tlsauthtype SRP ";
 +    $flags .= "--tlsuser jsmith ";
 +    $flags .= "--tlspassword abc ";
 +    $flags .= "\"https://$ip:$port/verifiedserver\"";;
 +
 +    my $cmd = "$VCURL $flags 2>$verifylog";
 +
 +    # verify if our/any server is running on this port
 +    logmsg "RUN: $cmd\n" if($verbose);
 +    my $res = runclient($cmd);
 +
 +    $res >>= 8; # rotate the result
 +    if($res & 128) {
 +        logmsg "RUN: curl command died with a coredump\n";
 +        return -1;
 +    }
 +
 +    if($res && $verbose) {
 +        logmsg "RUN: curl command returned $res\n";
 +        if(open(FILE, "<$verifylog")) {
 +            while(my $string = <FILE>) {
 +                logmsg "RUN: $string" if($string !~ /^([ \t]*)$/);
 +            }
 +            close(FILE);
 +        }
 +    }
 +
 +    my $data;
 +    if(open(FILE, "<$verifyout")) {
 +        while(my $string = <FILE>) {
 +            $data .= $string;
 +        }
 +        close(FILE);
 +    }
 +
 +    if($data && ($data =~ /(GNUTLS|GnuTLS)/) && open(FILE, "<$pidfile")) {
 +        $pid=0+<FILE>;
 +        close(FILE);
 +        if($pid > 0) {
 +            # if we have a pid it is actually our httptls server,
 +            # since runhttptlsserver() unlinks previous pidfile
 +            if(!pidexists($pid)) {
 +                logmsg "RUN: $server server has died after starting up\n";
 +                checkdied($pid);
 +                unlink($pidfile);
 +                $pid = -1;
 +            }
 +        }
 +        return $pid;
 +    }
 +    elsif($res == 6) {
 +        # curl: (6) Couldn't resolve host '::1'
 +        logmsg "RUN: failed to resolve host 
(https://$ip:$port/verifiedserver)\n";
 +        return -1;
 +    }
 +    elsif($data || ($res && ($res != 7))) {
 +        logmsg "RUN: Unknown server on our $server port: $port ($res)\n";
 +        return -1;
 +    }
 +    return $pid;
 +}
 +
 +#######################################################################
 +# STUB for verifying socks
 +#
 +sub verifysocks {
 +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
 +    my $server = servername_id($proto, $ipvnum, $idnum);
 +    my $pidfile = server_pidfilename($proto, $ipvnum, $idnum);
 +    my $pid = 0;
 +    if(open(FILE, "<$pidfile")) {
 +        $pid=0+<FILE>;
 +        close(FILE);
 +    }
 +    if($pid > 0) {
 +        # if we have a pid it is actually our socks server,
 +        # since runsocksserver() unlinks previous pidfile
 +        if(!pidexists($pid)) {
 +            logmsg "RUN: SOCKS server has died after starting up\n";
 +            checkdied($pid);
 +            unlink($pidfile);
 +            $pid = -1;
 +        }
 +    }
 +    return $pid;
 +}
 +
 +#######################################################################
 +# Verify that the server that runs on $ip, $port is our server.  This also
 +# implies that we can speak with it, as there might be occasions when the
 +# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
 +# assign requested address")
 +#
 +sub verifysmb {
 +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
 +    my $server = servername_id($proto, $ipvnum, $idnum);
 +    my $pid = 0;
 +    my $time=time();
 +    my $extra="";
 +
 +    my $verifylog = "$LOGDIR/".
 +        servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
 +    unlink($verifylog) if(-f $verifylog);
 +
 +    my $flags = "--max-time $server_response_maxtime ";
 +    $flags .= "--silent ";
 +    $flags .= "--verbose ";
 +    $flags .= "--globoff ";
 +    $flags .= "-u 'curltest:curltest' ";
 +    $flags .= $extra;
 +    $flags .= "\"$proto://$ip:$port/SERVER/verifiedserver\"";
 +
 +    my $cmd = "$VCURL $flags 2>$verifylog";
 +
 +    # check if this is our server running on this port:
 +    logmsg "RUN: $cmd\n" if($verbose);
 +    my @data = runclientoutput($cmd);
 +
 +    my $res = $? >> 8; # rotate the result
 +    if($res & 128) {
 +        logmsg "RUN: curl command died with a coredump\n";
 +        return -1;
 +    }
 +
 +    foreach my $line (@data) {
 +        if($line =~ /WE ROOLZ: (\d+)/) {
 +            # this is our test server with a known pid!
 +            $pid = 0+$1;
 +            last;
 +        }
 +    }
 +    if($pid <= 0 && @data && $data[0]) {
 +        # this is not a known server
 +        logmsg "RUN: Unknown server on our $server port: $port\n";
 +        return 0;
 +    }
 +    # we can/should use the time it took to verify the server as a measure
 +    # on how fast/slow this host is.
 +    my $took = int(0.5+time()-$time);
 +
 +    if($verbose) {
 +        logmsg "RUN: Verifying our test $server server took $took seconds\n";
 +    }
 +    $ftpchecktime = $took>=1?$took:1; # make sure it never is below 1
 +
 +    return $pid;
 +}
 +
 +#######################################################################
 +# Verify that the server that runs on $ip, $port is our server.  This also
 +# implies that we can speak with it, as there might be occasions when the
 +# server runs fine but we cannot talk to it ("Failed to connect to ::1: Can't
 +# assign requested address")
 +#
 +sub verifytelnet {
 +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
 +    my $server = servername_id($proto, $ipvnum, $idnum);
 +    my $pid = 0;
 +    my $time=time();
 +    my $extra="";
 +
 +    my $verifylog = "$LOGDIR/".
 +        servername_canon($proto, $ipvnum, $idnum) .'_verify.log';
 +    unlink($verifylog) if(-f $verifylog);
 +
 +    my $flags = "--max-time $server_response_maxtime ";
 +    $flags .= "--silent ";
 +    $flags .= "--verbose ";
 +    $flags .= "--globoff ";
 +    $flags .= "--upload-file - ";
 +    $flags .= $extra;
 +    $flags .= "\"$proto://$ip:$port\"";
 +
 +    my $cmd = "echo 'verifiedserver' | $VCURL $flags 2>$verifylog";
 +
 +    # check if this is our server running on this port:
 +    logmsg "RUN: $cmd\n" if($verbose);
 +    my @data = runclientoutput($cmd);
 +
 +    my $res = $? >> 8; # rotate the result
 +    if($res & 128) {
 +        logmsg "RUN: curl command died with a coredump\n";
 +        return -1;
 +    }
 +
 +    foreach my $line (@data) {
 +        if($line =~ /WE ROOLZ: (\d+)/) {
 +            # this is our test server with a known pid!
 +            $pid = 0+$1;
 +            last;
 +        }
 +    }
 +    if($pid <= 0 && @data && $data[0]) {
 +        # this is not a known server
 +        logmsg "RUN: Unknown server on our $server port: $port\n";
 +        return 0;
 +    }
 +    # we can/should use the time it took to verify the server as a measure
 +    # on how fast/slow this host is.
 +    my $took = int(0.5+time()-$time);
 +
 +    if($verbose) {
 +        logmsg "RUN: Verifying our test $server server took $took seconds\n";
 +    }
 +
 +    return $pid;
 +}
 +
 +
 +#######################################################################
 +# Verify that the server that runs on $ip, $port is our server.
 +# Retry over several seconds before giving up.  The ssh server in
 +# particular can take a long time to start if it needs to generate
 +# keys on a slow or loaded host.
 +#
 +# Just for convenience, test harness uses 'https' and 'httptls' literals
 +# as values for 'proto' variable in order to differentiate different
 +# servers. 'https' literal is used for stunnel based https test servers,
 +# and 'httptls' is used for non-stunnel https test servers.
 +#
 +
 +my %protofunc = ('http' => \&verifyhttp,
 +                 'https' => \&verifyhttp,
 +                 'rtsp' => \&verifyrtsp,
 +                 'ftp' => \&verifyftp,
 +                 'pop3' => \&verifyftp,
 +                 'imap' => \&verifyftp,
 +                 'smtp' => \&verifyftp,
 +                 'ftps' => \&verifyftp,
 +                 'tftp' => \&verifyftp,
 +                 'ssh' => \&verifyssh,
 +                 'socks' => \&verifysocks,
 +                 'gopher' => \&verifyhttp,
 +                 'httptls' => \&verifyhttptls,
 +                 'dict' => \&verifyftp,
 +                 'smb' => \&verifysmb,
 +                 'telnet' => \&verifytelnet);
 +
 +sub verifyserver {
 +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
 +
 +    my $count = 30; # try for this many seconds
 +    my $pid;
 +
 +    while($count--) {
 +        my $fun = $protofunc{$proto};
 +
 +        $pid = &$fun($proto, $ipvnum, $idnum, $ip, $port);
 +
 +        if($pid > 0) {
 +            last;
 +        }
 +        elsif($pid < 0) {
 +            # a real failure, stop trying and bail out
 +            return 0;
 +        }
 +        sleep(1);
 +    }
 +    return $pid;
 +}
 +
 +#######################################################################
 +# Single shot server responsiveness test. This should only be used
 +# to verify that a server present in %run hash is still functional
 +#
 +sub responsiveserver {
 +    my ($proto, $ipvnum, $idnum, $ip, $port) = @_;
 +    my $prev_verbose = $verbose;
 +
 +    $verbose = 0;
 +    my $fun = $protofunc{$proto};
 +    my $pid = &$fun($proto, $ipvnum, $idnum, $ip, $port);
 +    $verbose = $prev_verbose;
 +
 +    if($pid > 0) {
 +        return 1; # responsive
 +    }
 +
 +    my $srvrname = servername_str($proto, $ipvnum, $idnum);
 +    logmsg " server precheck FAILED (unresponsive $srvrname server)\n";
 +    return 0;
 +}
 +
 +#######################################################################
 +# start the http2 server
 +#
 +sub runhttp2server {
 +    my ($verbose) = @_;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +    my $proto="http/2";
 +    my $ipvnum = 4;
 +    my $idnum = 0;
 +    my $exe = "$perl $srcdir/http2-server.pl";
 +    my $verbose_flag = "--verbose ";
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
 +    $flags .= "--connect $HOSTIP:$HTTPPORT ";
 +    $flags .= $verbose_flag if($debugprotocol);
 +
 +    my ($http2pid, $pid2);
 +    my $port = 23113;
 +    for(1 .. 10) {
 +        $port += int(rand(900));
 +        my $aflags = "--port $port $flags";
 +
 +        my $cmd = "$exe $aflags";
 +        ($http2pid, $pid2) = startnew($cmd, $pidfile, 15, 0);
 +
 +        if($http2pid <= 0 || !pidexists($http2pid)) {
 +            # it is NOT alive
-             logmsg "RUN: failed to start the $srvrname server\n";
 +            stopserver($server, "$pid2");
 +            $doesntrun{$pidfile} = 1;
++            $http2pid = $pid2 = 0;
 +            next;
 +        }
 +        $doesntrun{$pidfile} = 0;
 +
 +        if($verbose) {
 +            logmsg "RUN: $srvrname server PID $http2pid port $port\n";
 +        }
 +        last;
 +    }
 +
++    logmsg "RUN: failed to start the $srvrname server\n" if(!$http2pid);
++
 +    return ($http2pid, $pid2, $port);
 +}
 +
 +#######################################################################
 +# start the http server
 +#
 +sub runhttpserver {
 +    my ($proto, $verbose, $alt, $port_or_path) = @_;
 +    my $ip = $HOSTIP;
 +    my $ipvnum = 4;
 +    my $idnum = 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +    my $exe = "$perl $srcdir/httpserver.pl";
 +    my $verbose_flag = "--verbose ";
 +
 +    if($alt eq "ipv6") {
 +        # if IPv6, use a different setup
 +        $ipvnum = 6;
 +        $ip = $HOST6IP;
 +    }
 +    elsif($alt eq "proxy") {
 +        # basically the same, but another ID
 +        $idnum = 2;
 +    }
 +    elsif($alt eq "unix") {
 +        # IP (protocol) is mutually exclusive with Unix sockets
 +        $ipvnum = "unix";
 +    }
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +    my $portfile = $serverportfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--gopher " if($proto eq "gopher");
 +    $flags .= "--connect $HOSTIP " if($alt eq "proxy");
 +    $flags .= $verbose_flag if($debugprotocol);
 +    $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
 +    $flags .= "--portfile $portfile ";
 +    $flags .= "--id $idnum " if($idnum > 1);
 +    if($ipvnum eq "unix") {
 +        $flags .= "--unix-socket '$port_or_path' ";
 +    } else {
 +        $flags .= "--ipv$ipvnum --port 0 ";
 +    }
 +    $flags .= "--srcdir \"$srcdir\"";
 +
 +    my $cmd = "$exe $flags";
 +    my ($httppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
 +
 +    if($httppid <= 0 || !pidexists($httppid)) {
 +        # it is NOT alive
 +        logmsg "RUN: failed to start the $srvrname server\n";
 +        stopserver($server, "$pid2");
 +        displaylogs($testnumcheck);
 +        $doesntrun{$pidfile} = 1;
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    # where is it?
 +    my $port;
 +    if(!$port_or_path) {
 +        $port = $port_or_path = pidfromfile($portfile);
 +    }
 +
 +    # Server is up. Verify that we can speak to it.
 +    my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port_or_path);
 +    if(!$pid3) {
 +        logmsg "RUN: $srvrname server failed verification\n";
 +        # failed to talk to it properly. Kill the server and return failure
 +        stopserver($server, "$httppid $pid2");
 +        displaylogs($testnumcheck);
 +        $doesntrun{$pidfile} = 1;
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +    $pid2 = $pid3;
 +
 +    if($verbose) {
 +        logmsg "RUN: $srvrname server is on PID $httppid port $port\n";
 +    }
 +
 +    return ($httppid, $pid2, $port);
 +}
 +
 +#######################################################################
 +# start the https stunnel based server
 +#
 +sub runhttpsserver {
 +    my ($verbose, $ipv6, $proxy, $certfile) = @_;
 +    my $proto = 'https';
 +    my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
 +    my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
 +    my $idnum = 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    if($proxy eq "proxy") {
 +        # the https-proxy runs as https2
 +        $idnum = 2;
 +    }
 +
 +    if(!$stunnel) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $certfile = 'stunnel.pem' unless($certfile);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--verbose " if($debugprotocol);
 +    $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
 +    $flags .= "--id $idnum " if($idnum > 1);
 +    $flags .= "--ipv$ipvnum --proto $proto ";
 +    $flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem');
 +    $flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" ";
 +    if(!$proxy) {
 +        $flags .= "--connect $HTTPPORT";
 +    }
 +    else {
 +        # for HTTPS-proxy we connect to the HTTP proxy
 +        $flags .= "--connect $HTTPPROXYPORT";
 +    }
 +
 +    my $pid2;
 +    my $pid3;
 +    my $httpspid;
 +    my $port = 24512; # start attempt
 +    for (1 .. 10) {
 +        $port += int(rand(600));
 +        my $options = "$flags --accept $port";
 +
 +        my $cmd = "$perl $srcdir/secureserver.pl $options";
 +        ($httpspid, $pid2) = startnew($cmd, $pidfile, 15, 0);
 +
 +        if($httpspid <= 0 || !pidexists($httpspid)) {
 +            # it is NOT alive
-             logmsg "RUN: failed to start the $srvrname server\n";
 +            stopserver($server, "$pid2");
 +            displaylogs($testnumcheck);
 +            $doesntrun{$pidfile} = 1;
-             next;
-         }
- 
-         # Server is up. Verify that we can speak to it.
-         $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
-         if(!$pid3) {
-             logmsg "RUN: $srvrname server failed verification\n";
-             # failed to talk to it properly. Kill the server and return 
failure
-             stopserver($server, "$httpspid $pid2");
-             displaylogs($testnumcheck);
-             $doesntrun{$pidfile} = 1;
++            $httpspid = $pid2 = 0;
 +            next;
 +        }
 +        # we have a server!
++        if($verbose) {
++            logmsg "RUN: $srvrname server is PID $httpspid port $port\n";
++        }
 +        last;
 +    }
-     # Here pid3 is actually the pid returned by the unsecure-http server.
- 
 +    $runcert{$server} = $certfile;
- 
-     if($verbose) {
-         logmsg "RUN: $srvrname server is PID $httpspid port $port\n";
-     }
++    logmsg "RUN: failed to start the $srvrname server\n" if(!$httpspid);
 +
 +    return ($httpspid, $pid2, $port);
 +}
 +
 +#######################################################################
 +# start the non-stunnel HTTP TLS extensions capable server
 +#
 +sub runhttptlsserver {
 +    my ($verbose, $ipv6) = @_;
 +    my $proto = "httptls";
 +    my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
 +    my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
 +    my $idnum = 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    if(!$httptlssrv) {
 +        return (0,0);
 +    }
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--http ";
 +    $flags .= "--debug 1 " if($debugprotocol);
 +    $flags .= "--priority NORMAL:+SRP ";
 +    $flags .= "--srppasswd $srcdir/certs/srp-verifier-db ";
 +    $flags .= "--srppasswdconf $srcdir/certs/srp-verifier-conf";
 +
 +    my $port = 24367;
 +    my ($httptlspid, $pid2);
 +    for (1 .. 10) {
 +        $port += int(rand(800));
 +        my $allflags = "--port $port $flags";
 +
 +        my $cmd = "$httptlssrv $allflags > $logfile 2>&1";
 +        ($httptlspid, $pid2) = startnew($cmd, $pidfile, 10, 1);
 +
 +        if($httptlspid <= 0 || !pidexists($httptlspid)) {
 +            # it is NOT alive
-             logmsg "RUN: failed to start the $srvrname server\n";
 +            stopserver($server, "$pid2");
 +            displaylogs($testnumcheck);
 +            $doesntrun{$pidfile} = 1;
 +            $httptlspid = $pid2 = 0;
 +            next;
 +        }
 +        $doesntrun{$pidfile} = 0;
 +
 +        if($verbose) {
 +            logmsg "RUN: $srvrname server PID $httptlspid port $port\n";
 +        }
 +        last;
 +    }
++    logmsg "RUN: failed to start the $srvrname server\n" if(!$httptlspid);
 +    return ($httptlspid, $pid2, $port);
 +}
 +
 +#######################################################################
 +# start the pingpong server (FTP, POP3, IMAP, SMTP)
 +#
 +sub runpingpongserver {
 +    my ($proto, $id, $verbose, $ipv6) = @_;
 +    my $port;
 +    my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
 +    my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
 +    my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +    my $portfile = $serverportfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
 +        return (0,0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--verbose " if($debugprotocol);
 +    $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
 +    $flags .= "--portfile \"$portfile\" ";
 +    $flags .= "--srcdir \"$srcdir\" --proto $proto ";
 +    $flags .= "--id $idnum " if($idnum > 1);
 +    $flags .= "--ipv$ipvnum --port 0 --addr \"$ip\"";
 +
 +    my $cmd = "$perl $srcdir/ftpserver.pl $flags";
 +    my ($ftppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
 +
 +    if($ftppid <= 0 || !pidexists($ftppid)) {
 +        # it is NOT alive
 +        logmsg "RUN: failed to start the $srvrname server\n";
 +        stopserver($server, "$pid2");
 +        displaylogs($testnumcheck);
 +        $doesntrun{$pidfile} = 1;
 +        return (0,0);
 +    }
 +
 +    # where is it?
 +    $port = pidfromfile($portfile);
 +
 +    logmsg "PINGPONG runs on port $port ($portfile)\n" if($verbose);
 +
 +    # Server is up. Verify that we can speak to it.
 +    my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
 +    if(!$pid3) {
 +        logmsg "RUN: $srvrname server failed verification\n";
 +        # failed to talk to it properly. Kill the server and return failure
 +        stopserver($server, "$ftppid $pid2");
 +        displaylogs($testnumcheck);
 +        $doesntrun{$pidfile} = 1;
 +        return (0,0);
 +    }
 +
 +    $pid2 = $pid3;
 +
 +    logmsg "RUN: $srvrname server is PID $ftppid port $port\n" if($verbose);
 +
 +    # Assign the correct port variable!
 +    if($proto eq "ftp") {
 +        if($ipvnum == 6) {
 +            # if IPv6, use a different setup
 +            $FTP6PORT = $port;
 +        }
 +        else {
 +            $FTPPORT = $port;
 +        }
 +    }
 +    elsif($proto eq "pop3") {
 +        if($ipvnum == 6) {
 +            $POP36PORT = $port;
 +        }
 +        else {
 +            $POP3PORT = $port;
 +        }
 +    }
 +    elsif($proto eq "imap") {
 +        if($ipvnum == 6) {
 +            $IMAP6PORT  = $port;
 +        }
 +        else {
 +            $IMAPPORT = $port;
 +        }
 +    }
 +    elsif($proto eq "smtp") {
 +        if($ipvnum == 6) {
 +            $SMTP6PORT = $port;
 +        }
 +        else {
 +            $SMTPPORT = $port;
 +        }
 +    }
 +    else {
 +        print STDERR "Unsupported protocol $proto!!\n";
-         return 0;
++        return (0,0);
 +    }
 +
 +    return ($pid2, $ftppid);
 +}
 +
 +#######################################################################
 +# start the ftps server (or rather, tunnel)
 +#
 +sub runftpsserver {
 +    my ($verbose, $ipv6, $certfile) = @_;
 +    my $proto = 'ftps';
 +    my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
 +    my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
 +    my $idnum = 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    if(!$stunnel) {
 +        return (0,0);
 +    }
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $certfile = 'stunnel.pem' unless($certfile);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--verbose " if($debugprotocol);
 +    $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
 +    $flags .= "--id $idnum " if($idnum > 1);
 +    $flags .= "--ipv$ipvnum --proto $proto ";
 +    $flags .= "--certfile \"$certfile\" " if($certfile ne 'stunnel.pem');
 +    $flags .= "--stunnel \"$stunnel\" --srcdir \"$srcdir\" ";
 +    $flags .= "--connect $FTPPORT";
 +
 +    my $port = 26713;
 +    my $pid2;
 +    my $pid3;
 +    my $ftpspid;
 +    for (1 .. 10) {
 +        $port += int(rand(700));
 +        my $options = "$flags --accept $port";
 +        my $cmd = "$perl $srcdir/secureserver.pl $options";
 +        ($ftpspid, $pid2) = startnew($cmd, $pidfile, 15, 0);
 +
 +        if($ftpspid <= 0 || !pidexists($ftpspid)) {
 +            # it is NOT alive
-             logmsg "RUN: failed to start the $srvrname server\n";
 +            stopserver($server, "$pid2");
 +            displaylogs($testnumcheck);
 +            $doesntrun{$pidfile} = 1;
++            $ftpspid = $pid2 = 0;
 +            next;
 +        }
 +
-         $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
-         if(!$pid3) {
-             logmsg "RUN: $srvrname server failed verification\n";
-             # failed to talk to it properly. Kill the server and return 
failure
-             stopserver($server, "$ftpspid $pid2");
-             displaylogs($testnumcheck);
-             $doesntrun{$pidfile} = 1;
-             next;
-         }
-         # Here pid3 is actually the pid returned by the unsecure-ftp server.
- 
++        $doesntrun{$pidfile} = 0;
 +        $runcert{$server} = $certfile;
 +
 +        if($verbose) {
 +            logmsg "RUN: $srvrname server is PID $ftpspid port $port\n";
 +        }
 +        last;
 +    }
 +
++    logmsg "RUN: failed to start the $srvrname server\n" if(!$ftpspid);
++
 +    return ($ftpspid, $pid2, $port);
 +}
 +
 +#######################################################################
 +# start the tftp server
 +#
 +sub runtftpserver {
 +    my ($id, $verbose, $ipv6) = @_;
 +    my $ip = $HOSTIP;
 +    my $proto = 'tftp';
 +    my $ipvnum = 4;
 +    my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    if($ipv6) {
 +        # if IPv6, use a different setup
 +        $ipvnum = 6;
 +        $ip = $HOST6IP;
 +    }
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +    my $portfile = $serverportfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--verbose " if($debugprotocol);
 +    $flags .= "--pidfile \"$pidfile\" ".
 +        "--portfile \"$portfile\" ".
 +        "--logfile \"$logfile\" ";
 +    $flags .= "--id $idnum " if($idnum > 1);
 +    $flags .= "--ipv$ipvnum --port 0 --srcdir \"$srcdir\"";
 +
 +    my $cmd = "$perl $srcdir/tftpserver.pl $flags";
 +    my ($tftppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
 +
 +    if($tftppid <= 0 || !pidexists($tftppid)) {
 +        # it is NOT alive
 +        logmsg "RUN: failed to start the $srvrname server\n";
 +        stopserver($server, "$pid2");
 +        displaylogs($testnumcheck);
 +        $doesntrun{$pidfile} = 1;
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $port = pidfromfile($portfile);
 +
 +    # Server is up. Verify that we can speak to it.
 +    my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
 +    if(!$pid3) {
 +        logmsg "RUN: $srvrname server failed verification\n";
 +        # failed to talk to it properly. Kill the server and return failure
 +        stopserver($server, "$tftppid $pid2");
 +        displaylogs($testnumcheck);
 +        $doesntrun{$pidfile} = 1;
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +    $pid2 = $pid3;
 +
 +    if($verbose) {
 +        logmsg "RUN: $srvrname server on PID $tftppid port $port\n";
 +    }
 +
 +    return ($pid2, $tftppid, $port);
 +}
 +
 +
 +#######################################################################
 +# start the rtsp server
 +#
 +sub runrtspserver {
 +    my ($verbose, $ipv6) = @_;
 +    my $ip = $HOSTIP;
 +    my $proto = 'rtsp';
 +    my $ipvnum = 4;
 +    my $idnum = 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    if($ipv6) {
 +        # if IPv6, use a different setup
 +        $ipvnum = 6;
 +        $ip = $HOST6IP;
 +    }
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +    my $portfile = $serverportfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--verbose " if($debugprotocol);
 +    $flags .= "--pidfile \"$pidfile\" ".
 +         "--portfile \"$portfile\" ".
 +        "--logfile \"$logfile\" ";
 +    $flags .= "--id $idnum " if($idnum > 1);
 +    $flags .= "--ipv$ipvnum --port 0 --srcdir \"$srcdir\"";
 +
 +    my $cmd = "$perl $srcdir/rtspserver.pl $flags";
 +    my ($rtsppid, $pid2) = startnew($cmd, $pidfile, 15, 0);
 +
 +    if($rtsppid <= 0 || !pidexists($rtsppid)) {
 +        # it is NOT alive
 +        logmsg "RUN: failed to start the $srvrname server\n";
 +        stopserver($server, "$pid2");
 +        displaylogs($testnumcheck);
 +        $doesntrun{$pidfile} = 1;
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $port = pidfromfile($portfile);
 +
 +    # Server is up. Verify that we can speak to it.
 +    my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
 +    if(!$pid3) {
 +        logmsg "RUN: $srvrname server failed verification\n";
 +        # failed to talk to it properly. Kill the server and return failure
 +        stopserver($server, "$rtsppid $pid2");
 +        displaylogs($testnumcheck);
 +        $doesntrun{$pidfile} = 1;
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +    $pid2 = $pid3;
 +
 +    if($verbose) {
 +        logmsg "RUN: $srvrname server PID $rtsppid port $port\n";
 +    }
 +
 +    return ($rtsppid, $pid2, $port);
 +}
 +
 +
 +#######################################################################
 +# Start the ssh (scp/sftp) server
 +#
 +sub runsshserver {
 +    my ($id, $verbose, $ipv6) = @_;
 +    my $ip=$HOSTIP;
 +    my $proto = 'ssh';
 +    my $ipvnum = 4;
 +    my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $port = 20000; # no lower port
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $sshd = find_sshd();
 +    if($sshd) {
 +        ($sshdid,$sshdvernum,$sshdverstr,$sshderror) = sshversioninfo($sshd);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    my $flags = "";
 +    $flags .= "--verbose " if($verbose);
 +    $flags .= "--debugprotocol " if($debugprotocol);
 +    $flags .= "--pidfile \"$pidfile\" ";
 +    $flags .= "--id $idnum " if($idnum > 1);
 +    $flags .= "--ipv$ipvnum --addr \"$ip\" ";
 +    $flags .= "--user \"$USER\"";
 +
 +    my $sshpid;
 +    my $pid2;
 +
 +    my $wport = 0,
 +    my @tports;
 +    for(1 .. 10) {
 +
 +        # sshd doesn't have a way to pick an unused random port number, so
 +        # instead we iterate over possible port numbers to use until we find
 +        # one that works
 +        $port += int(rand(500));
 +        push @tports, $port;
 +
 +        my $options = "$flags --sshport $port";
 +
 +        my $cmd = "$perl $srcdir/sshserver.pl $options";
 +        ($sshpid, $pid2) = startnew($cmd, $pidfile, 60, 0);
 +
 +        # on loaded systems sshserver start up can take longer than the
 +        # timeout passed to startnew, when this happens startnew completes
 +        # without being able to read the pidfile and consequently returns a
 +        # zero pid2 above.
 +        if($sshpid <= 0 || !pidexists($sshpid)) {
 +            # it is NOT alive
-             logmsg "RUN: failed to start the $srvrname server on $port\n";
 +            stopserver($server, "$pid2");
 +            $doesntrun{$pidfile} = 1;
++            $sshpid = $pid2 = 0;
 +            next;
 +        }
 +
-         # ssh server verification allows some extra time for the server to
-         # start up and gives us the opportunity of recovering the pid from the
-         # pidfile, when this verification succeeds the recovered pid is
-         # assigned to pid2.
- 
-         my $pid3 = verifyserver($proto, $ipvnum, $idnum, $ip, $port);
-         if(!$pid3) {
-             logmsg "RUN: $srvrname server failed verification\n";
-             # failed to fetch server pid. Kill the server and return failure
-             stopserver($server, "$sshpid $pid2");
-             $doesntrun{$pidfile} = 1;
-             next;
-         }
-         $pid2 = $pid3;
- 
 +        # once it is known that the ssh server is alive, sftp server
 +        # verification is performed actually connecting to it, authenticating
 +        # and performing a very simple remote command.  This verification is
 +        # tried only one time.
 +
 +        $sshdlog = server_logfilename($LOGDIR, 'ssh', $ipvnum, $idnum);
 +        $sftplog = server_logfilename($LOGDIR, 'sftp', $ipvnum, $idnum);
 +
 +        if(verifysftp('sftp', $ipvnum, $idnum, $ip, $port) < 1) {
 +            logmsg "RUN: SFTP server failed verification\n";
 +            # failed to talk to it properly. Kill the server and return 
failure
 +            display_sftplog();
 +            display_sftpconfig();
 +            display_sshdlog();
 +            display_sshdconfig();
 +            stopserver($server, "$sshpid $pid2");
 +            $doesntrun{$pidfile} = 1;
++            $sshpid = $pid2 = 0;
 +            next;
 +        }
 +        # we're happy, no need to loop anymore!
++        $doesntrun{$pidfile} = 0;
 +        $wport = $port;
 +        last;
 +    }
++    logmsg "RUN: failed to start the $srvrname server on $port\n" 
if(!$sshpid);
 +
 +    if(!$wport) {
 +        logmsg "RUN: couldn't start $srvrname. Tried these ports:";
 +        logmsg "RUN: ".join(", ", @tports);
 +        return (0,0,0);
 +    }
 +
 +    my $hstpubmd5f = "curl_host_rsa_key.pub_md5";
 +    if(!open(PUBMD5FILE, "<", $hstpubmd5f) ||
 +       (read(PUBMD5FILE, $SSHSRVMD5, 32) != 32) ||
 +       !close(PUBMD5FILE) ||
 +       ($SSHSRVMD5 !~ /^[a-f0-9]{32}$/i))
 +    {
 +        my $msg = "Fatal: $srvrname pubkey md5 missing : \"$hstpubmd5f\" : 
$!";
 +        logmsg "$msg\n";
 +        stopservers($verbose);
 +        die $msg;
 +    }
 +
 +    logmsg "RUN: $srvrname on PID $pid2 port $wport\n" if($verbose);
 +
 +    return ($pid2, $sshpid, $wport);
 +}
 +
 +#######################################################################
 +# Start the socks server
 +#
 +sub runmqttserver {
 +    my ($id, $verbose, $ipv6) = @_;
 +    my $ip=$HOSTIP;
 +    my $port = $MQTTPORT;
 +    my $proto = 'mqtt';
 +    my $ipvnum = 4;
 +    my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $portfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +    $pidfile = $serverpidfile{$server};
 +    $portfile = $serverportfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
 +        return (0,0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    # start our MQTT server - on a random port!
 +    my $cmd="server/mqttd".exe_ext('SRV').
 +        " --port 0 ".
 +        " --pidfile $pidfile".
 +        " --portfile $portfile".
 +        " --config $FTPDCMD";
 +    my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0);
 +
 +    if($sockspid <= 0 || !pidexists($sockspid)) {
 +        # it is NOT alive
 +        logmsg "RUN: failed to start the $srvrname server\n";
 +        stopserver($server, "$pid2");
 +        $doesntrun{$pidfile} = 1;
 +        return (0,0);
 +    }
 +
 +    $MQTTPORT = pidfromfile($portfile);
 +
 +    if($verbose) {
 +        logmsg "RUN: $srvrname server is now running PID $pid2 on PORT 
$MQTTPORT\n";
 +    }
 +
 +    return ($pid2, $sockspid);
 +}
 +
 +#######################################################################
 +# Start the socks server
 +#
 +sub runsocksserver {
 +    my ($id, $verbose, $ipv6) = @_;
 +    my $ip=$HOSTIP;
 +    my $proto = 'socks';
 +    my $ipvnum = 4;
 +    my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +    my $portfile = $serverportfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    # start our socks server, get commands from the FTP cmd file
 +    my $cmd="server/socksd".exe_ext('SRV').
 +        " --port 0 ".
 +        " --pidfile $pidfile".
 +        " --portfile $portfile".
 +        " --backend $HOSTIP".
 +        " --config $FTPDCMD";
 +    my ($sockspid, $pid2) = startnew($cmd, $pidfile, 30, 0);
 +
 +    if($sockspid <= 0 || !pidexists($sockspid)) {
 +        # it is NOT alive
 +        logmsg "RUN: failed to start the $srvrname server\n";
 +        stopserver($server, "$pid2");
 +        $doesntrun{$pidfile} = 1;
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $port = pidfromfile($portfile);
 +
 +    if($verbose) {
 +        logmsg "RUN: $srvrname server is now running PID $pid2\n";
 +    }
 +
 +    return ($pid2, $sockspid, $port);
 +}
 +
 +#######################################################################
 +# start the dict server
 +#
 +sub rundictserver {
 +    my ($verbose, $alt) = @_;
 +    my $proto = "dict";
 +    my $ip = $HOSTIP;
 +    my $ipvnum = 4;
 +    my $idnum = 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    if($alt eq "ipv6") {
 +        # No IPv6
 +    }
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--verbose 1 " if($debugprotocol);
 +    $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
 +    $flags .= "--id $idnum " if($idnum > 1);
 +    $flags .= "--srcdir \"$srcdir\" ";
 +    $flags .= "--host $HOSTIP";
 +
 +    my $port = 29000;
 +    my ($dictpid, $pid2);
 +    for(1 .. 10) {
 +        $port += int(rand(900));
 +        my $aflags = "--port $port $flags";
 +        my $cmd = "$srcdir/dictserver.py $aflags";
 +        ($dictpid, $pid2) = startnew($cmd, $pidfile, 15, 0);
 +
 +        if($dictpid <= 0 || !pidexists($dictpid)) {
 +            # it is NOT alive
-             logmsg "RUN: failed to start the $srvrname server\n";
 +            stopserver($server, "$pid2");
 +            displaylogs($testnumcheck);
 +            $doesntrun{$pidfile} = 1;
 +            $dictpid = $pid2 = 0;
 +            next;
 +        }
 +        $doesntrun{$pidfile} = 0;
 +
 +        if($verbose) {
 +            logmsg "RUN: $srvrname server PID $dictpid port $port\n";
 +        }
 +        last;
 +    }
++    logmsg "RUN: failed to start the $srvrname server\n" if(!$dictpid);
 +
 +    return ($dictpid, $pid2, $port);
 +}
 +
 +#######################################################################
 +# start the SMB server
 +#
 +sub runsmbserver {
 +    my ($verbose, $alt) = @_;
 +    my $proto = "smb";
 +    my $ip = $HOSTIP;
 +    my $ipvnum = 4;
 +    my $idnum = 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    if($alt eq "ipv6") {
 +        # No IPv6
 +    }
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--verbose 1 " if($debugprotocol);
 +    $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
 +    $flags .= "--id $idnum " if($idnum > 1);
 +    $flags .= "--srcdir \"$srcdir\" ";
 +    $flags .= "--host $HOSTIP";
 +
 +    my ($smbpid, $pid2);
 +    my $port = 31923;
 +    for(1 .. 10) {
 +        $port += int(rand(760));
 +        my $aflags = "--port $port $flags";
 +        my $cmd = "$srcdir/smbserver.py $aflags";
 +        ($smbpid, $pid2) = startnew($cmd, $pidfile, 15, 0);
 +
 +        if($smbpid <= 0 || !pidexists($smbpid)) {
 +            # it is NOT alive
-             logmsg "RUN: failed to start the $srvrname server\n";
 +            stopserver($server, "$pid2");
 +            displaylogs($testnumcheck);
 +            $doesntrun{$pidfile} = 1;
 +            $smbpid = $pid2 = 0;
 +            next;
 +        }
 +        $doesntrun{$pidfile} = 0;
 +
 +        if($verbose) {
 +            logmsg "RUN: $srvrname server PID $smbpid port $port\n";
 +        }
 +        last;
 +    }
++    logmsg "RUN: failed to start the $srvrname server\n" if(!$smbpid);
 +
 +    return ($smbpid, $pid2, $port);
 +}
 +
 +#######################################################################
 +# start the telnet server
 +#
 +sub runnegtelnetserver {
 +    my ($verbose, $alt) = @_;
 +    my $proto = "telnet";
 +    my $ip = $HOSTIP;
 +    my $ipvnum = 4;
 +    my $idnum = 1;
 +    my $server;
 +    my $srvrname;
 +    my $pidfile;
 +    my $logfile;
 +    my $flags = "";
 +
 +    if($alt eq "ipv6") {
 +        # No IPv6
 +    }
 +
 +    $server = servername_id($proto, $ipvnum, $idnum);
 +
 +    $pidfile = $serverpidfile{$server};
 +
 +    # don't retry if the server doesn't work
 +    if ($doesntrun{$pidfile}) {
-         return (0,0);
++        return (0, 0, 0);
 +    }
 +
 +    my $pid = processexists($pidfile);
 +    if($pid > 0) {
 +        stopserver($server, "$pid");
 +    }
 +    unlink($pidfile) if(-f $pidfile);
 +
 +    $srvrname = servername_str($proto, $ipvnum, $idnum);
 +
 +    $logfile = server_logfilename($LOGDIR, $proto, $ipvnum, $idnum);
 +
 +    $flags .= "--verbose 1 " if($debugprotocol);
 +    $flags .= "--pidfile \"$pidfile\" --logfile \"$logfile\" ";
 +    $flags .= "--id $idnum " if($idnum > 1);
 +    $flags .= "--srcdir \"$srcdir\"";
 +
 +    my ($ntelpid, $pid2);
 +    my $port = 32000;
 +    for(1 .. 10) {
 +        $port += int(rand(800));
 +        my $aflags = "--port $port $flags";
 +        my $cmd = "$srcdir/negtelnetserver.py $aflags";
 +        ($ntelpid, $pid2) = startnew($cmd, $pidfile, 15, 0);
 +
 +        if($ntelpid <= 0 || !pidexists($ntelpid)) {
 +            # it is NOT alive
-             logmsg "RUN: failed to start the $srvrname server\n";
 +            stopserver($server, "$pid2");
 +            displaylogs($testnumcheck);
 +            $doesntrun{$pidfile} = 1;
 +            $ntelpid = $pid2 = 0;
 +            next;
 +        }
 +        $doesntrun{$pidfile} = 0;
 +
 +        if($verbose) {
 +            logmsg "RUN: $srvrname server PID $ntelpid port $port\n";
 +        }
 +        last;
 +    }
++    logmsg "RUN: failed to start the $srvrname server\n" if(!$ntelpid);
 +
 +    return ($ntelpid, $pid2, $port);
 +}
 +
 +
 +#######################################################################
 +# Single shot http and gopher server responsiveness test. This should only
 +# be used to verify that a server present in %run hash is still functional
 +#
 +sub responsive_http_server {
 +    my ($proto, $verbose, $alt, $port_or_path) = @_;
 +    my $ip = $HOSTIP;
 +    my $ipvnum = 4;
 +    my $idnum = 1;
 +
 +    if($alt eq "ipv6") {
 +        # if IPv6, use a different setup
 +        $ipvnum = 6;
 +        $ip = $HOST6IP;
 +    }
 +    elsif($alt eq "proxy") {
 +        $idnum = 2;
 +    }
 +    elsif($alt eq "unix") {
 +        # IP (protocol) is mutually exclusive with Unix sockets
 +        $ipvnum = "unix";
 +    }
 +
 +    return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port_or_path);
 +}
 +
 +#######################################################################
 +# Single shot pingpong server responsiveness test. This should only be
 +# used to verify that a server present in %run hash is still functional
 +#
 +sub responsive_pingpong_server {
 +    my ($proto, $id, $verbose, $ipv6) = @_;
 +    my $port;
 +    my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
 +    my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
 +    my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
 +
 +    if($proto eq "ftp") {
 +        $port = $FTPPORT;
 +
 +        if($ipvnum==6) {
 +            # if IPv6, use a different setup
 +            $port = $FTP6PORT;
 +        }
 +    }
 +    elsif($proto eq "pop3") {
 +        $port = ($ipvnum==6) ? $POP36PORT : $POP3PORT;
 +    }
 +    elsif($proto eq "imap") {
 +        $port = ($ipvnum==6) ? $IMAP6PORT : $IMAPPORT;
 +    }
 +    elsif($proto eq "smtp") {
 +        $port = ($ipvnum==6) ? $SMTP6PORT : $SMTPPORT;
 +    }
 +    else {
 +        print STDERR "Unsupported protocol $proto!!\n";
 +        return 0;
 +    }
 +
 +    return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
 +}
 +
 +#######################################################################
 +# Single shot rtsp server responsiveness test. This should only be
 +# used to verify that a server present in %run hash is still functional
 +#
 +sub responsive_rtsp_server {
 +    my ($verbose, $ipv6) = @_;
 +    my $port = $RTSPPORT;
 +    my $ip = $HOSTIP;
 +    my $proto = 'rtsp';
 +    my $ipvnum = 4;
 +    my $idnum = 1;
 +
 +    if($ipv6) {
 +        # if IPv6, use a different setup
 +        $ipvnum = 6;
 +        $port = $RTSP6PORT;
 +        $ip = $HOST6IP;
 +    }
 +
 +    return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
 +}
 +
 +#######################################################################
 +# Single shot tftp server responsiveness test. This should only be
 +# used to verify that a server present in %run hash is still functional
 +#
 +sub responsive_tftp_server {
 +    my ($id, $verbose, $ipv6) = @_;
 +    my $port = $TFTPPORT;
 +    my $ip = $HOSTIP;
 +    my $proto = 'tftp';
 +    my $ipvnum = 4;
 +    my $idnum = ($id && ($id =~ /^(\d+)$/) && ($id > 1)) ? $id : 1;
 +
 +    if($ipv6) {
 +        # if IPv6, use a different setup
 +        $ipvnum = 6;
 +        $port = $TFTP6PORT;
 +        $ip = $HOST6IP;
 +    }
 +
 +    return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
 +}
 +
 +#######################################################################
 +# Single shot non-stunnel HTTP TLS extensions capable server
 +# responsiveness test. This should only be used to verify that a
 +# server present in %run hash is still functional
 +#
 +sub responsive_httptls_server {
 +    my ($verbose, $ipv6) = @_;
 +    my $proto = "httptls";
 +    my $port = ($ipv6 && ($ipv6 =~ /6$/)) ? $HTTPTLS6PORT : $HTTPTLSPORT;
 +    my $ip = ($ipv6 && ($ipv6 =~ /6$/)) ? "$HOST6IP" : "$HOSTIP";
 +    my $ipvnum = ($ipv6 && ($ipv6 =~ /6$/)) ? 6 : 4;
 +    my $idnum = 1;
 +
 +    return &responsiveserver($proto, $ipvnum, $idnum, $ip, $port);
 +}
 +
 +#######################################################################
 +# Remove all files in the specified directory
 +#
 +sub cleardir {
 +    my $dir = $_[0];
 +    my $count;
 +    my $file;
 +
 +    # Get all files
-     opendir(DIR, $dir) ||
++    opendir(my $dh, $dir) ||
 +        return 0; # can't open dir
-     while($file = readdir(DIR)) {
-         if(($file !~ /^\./)) {
-             unlink("$dir/$file");
++    while($file = readdir($dh)) {
++        if(($file !~ /^(\.|\.\.)\z/)) {
++            if(-d "$dir/$file") {
++                cleardir("$dir/$file");
++                rmdir("$dir/$file");
++            }
++            else {
++                unlink("$dir/$file");
++            }
 +            $count++;
 +        }
 +    }
-     closedir DIR;
++    closedir $dh;
 +    return $count;
 +}
 +
 +#######################################################################
 +# compare test results with the expected output, we might filter off
 +# some pattern that is allowed to differ, output test results
 +#
 +sub compare {
 +    my ($testnum, $testname, $subject, $firstref, $secondref)=@_;
 +
 +    my $result = compareparts($firstref, $secondref);
 +
 +    if($result) {
 +        # timestamp test result verification end
 +        $timevrfyend{$testnum} = Time::HiRes::time();
 +
 +        if(!$short) {
 +            logmsg "\n $testnum: $subject FAILED:\n";
 +            logmsg showdiff($LOGDIR, $firstref, $secondref);
 +        }
 +        elsif(!$automakestyle) {
 +            logmsg "FAILED\n";
 +        }
 +        else {
 +            # automakestyle
 +            logmsg "FAIL: $testnum - $testname - $subject\n";
 +        }
 +    }
 +    return $result;
 +}
 +
 +sub setupfeatures {
++    $feature{"c-ares"} = $has_cares;
 +    $feature{"alt-svc"} = $has_altsvc;
++    $feature{"HSTS"} = $has_hsts;
 +    $feature{"brotli"} = $has_brotli;
 +    $feature{"crypto"} = $has_crypto;
 +    $feature{"debug"} = $debug_build;
 +    $feature{"getrlimit"} = $has_getrlimit;
 +    $feature{"GnuTLS"} = $has_gnutls;
 +    $feature{"GSS-API"} = $has_gssapi;
 +    $feature{"http/2"} = $has_http2;
 +    $feature{"https-proxy"} = $has_httpsproxy;
 +    $feature{"idn"} = $has_idn;
 +    $feature{"ipv6"} = $has_ipv6;
 +    $feature{"Kerberos"} = $has_kerberos;
 +    $feature{"large_file"} = $has_largefile;
 +    $feature{"ld_preload"} = ($has_ldpreload && !$debug_build);
 +    $feature{"libz"} = $has_libz;
 +    $feature{"manual"} = $has_manual;
 +    $feature{"Metalink"} = $has_metalink;
 +    $feature{"MinGW"} = $has_mingw;
 +    $feature{"MultiSSL"} = $has_multissl;
 +    $feature{"NSS"} = $has_nss;
 +    $feature{"NTLM"} = $has_ntlm;
 +    $feature{"NTLM_WB"} = $has_ntlm_wb;
 +    $feature{"OpenSSL"} = $has_openssl || $has_libressl || $has_boringssl;
 +    $feature{"PSL"} = $has_psl;
 +    $feature{"Schannel"} = $has_schannel;
 +    $feature{"sectransp"} = $has_sectransp;
 +    $feature{"SPNEGO"} = $has_spnego;
 +    $feature{"SSL"} = $has_ssl;
 +    $feature{"SSLpinning"} = $has_sslpinning;
 +    $feature{"SSPI"} = $has_sspi;
 +    $feature{"threaded-resolver"} = $has_threadedres;
 +    $feature{"TLS-SRP"} = $has_tls_srp;
 +    $feature{"TrackMemory"} = $has_memory_tracking;
 +    $feature{"unittest"} = $debug_build;
 +    $feature{"unix-sockets"} = $has_unix;
 +    $feature{"win32"} = $has_win32;
 +    $feature{"zstd"} = $has_zstd;
 +
 +    # make each protocol an enabled "feature"
 +    for my $p (@protocols) {
 +        $feature{$p} = 1;
 +    }
 +    # 'socks' was once here but is now removed
 +
 +    #
 +    # strings that must match the names used in server/disabled.c
 +    #
 +    $feature{"cookies"} = 1;
 +    $feature{"DoH"} = 1;
 +    $feature{"HTTP-auth"} = 1;
 +    $feature{"Mime"} = 1;
 +    $feature{"netrc"} = 1;
 +    $feature{"parsedate"} = 1;
 +    $feature{"proxy"} = 1;
 +    $feature{"shuffle-dns"} = 1;
 +    $feature{"typecheck"} = 1;
 +    $feature{"verbose-strings"} = 1;
 +
 +}
 +
 +#######################################################################
 +# display information about curl and the host the test suite runs on
 +#
 +sub checksystem {
 +
 +    unlink($memdump); # remove this if there was one left
 +
 +    my $feat;
 +    my $curl;
 +    my $libcurl;
 +    my $versretval;
 +    my $versnoexec;
 +    my @version=();
 +    my @disabled;
 +    my $dis = "";
 +
 +    my $curlverout="$LOGDIR/curlverout.log";
 +    my $curlvererr="$LOGDIR/curlvererr.log";
 +    my $versioncmd="$CURL --version 1>$curlverout 2>$curlvererr";
 +
 +    unlink($curlverout);
 +    unlink($curlvererr);
 +
 +    $versretval = runclient($versioncmd);
 +    $versnoexec = $!;
 +
 +    open(VERSOUT, "<$curlverout");
 +    @version = <VERSOUT>;
 +    close(VERSOUT);
 +
 +    open(DISABLED, "server/disabled".exe_ext('TOOL')."|");
 +    @disabled = <DISABLED>;
 +    close(DISABLED);
 +
 +    if($disabled[0]) {
 +        map s/[\r\n]//g, @disabled;
 +        $dis = join(", ", @disabled);
 +    }
 +
 +    $resolver="stock";
 +    for(@version) {
 +        chomp;
 +
-         if($_ =~ /^curl/) {
++        if($_ =~ /^curl ([^ ]*)/) {
 +            $curl = $_;
++            $VERSION = $1;
 +            $curl =~ s/^(.*)(libcurl.*)/$1/g;
 +
 +            $libcurl = $2;
 +            if($curl =~ /linux|bsd|solaris/) {
 +                $has_ldpreload = 1;
 +            }
 +            if($curl =~ /win32|Windows|mingw(32|64)/) {
 +                # This is a Windows MinGW build or native build, we need to 
use
 +                # Win32-style path.
 +                $pwd = pathhelp::sys_native_current_path();
 +                $has_textaware = 1;
 +                $has_win32 = 1;
 +                $has_mingw = 1 if ($curl =~ /-pc-mingw32/);
 +            }
 +           if ($libcurl =~ /(winssl|schannel)/i) {
 +               $has_schannel=1;
 +               $has_sslpinning=1;
 +           }
 +           elsif ($libcurl =~ /openssl/i) {
 +               $has_openssl=1;
 +               $has_sslpinning=1;
 +           }
 +           elsif ($libcurl =~ /gnutls/i) {
 +               $has_gnutls=1;
 +               $has_sslpinning=1;
 +           }
 +           elsif ($libcurl =~ /nss/i) {
 +               $has_nss=1;
 +               $has_sslpinning=1;
 +           }
 +           elsif ($libcurl =~ /wolfssl/i) {
 +               $has_wolfssl=1;
 +               $has_sslpinning=1;
 +           }
 +           elsif ($libcurl =~ /securetransport/i) {
 +               $has_sectransp=1;
 +               $has_sslpinning=1;
 +           }
 +           elsif ($libcurl =~ /BoringSSL/i) {
 +               $has_boringssl=1;
 +               $has_sslpinning=1;
 +           }
 +           elsif ($libcurl =~ /libressl/i) {
 +               $has_libressl=1;
 +               $has_sslpinning=1;
 +           }
 +           elsif ($libcurl =~ /mbedTLS/i) {
 +               $has_mbedtls=1;
 +               $has_sslpinning=1;
 +           }
 +           if ($libcurl =~ /ares/i) {
 +               $has_cares=1;
 +               $resolver="c-ares";
 +           }
 +           if ($libcurl =~ /mesalink/i) {
 +               $has_mesalink=1;
 +           }
 +        }
 +        elsif($_ =~ /^Protocols: (.*)/i) {
 +            # these are the protocols compiled in to this libcurl
 +            @protocols = split(' ', lc($1));
 +
 +            # Generate a "proto-ipv6" version of each protocol to match the
 +            # IPv6 <server> name and a "proto-unix" to match the variant which
 +            # uses Unix domain sockets. This works even if support isn't
 +            # compiled in because the <features> test will fail.
 +            push @protocols, map(("$_-ipv6", "$_-unix"), @protocols);
 +
 +            # 'http-proxy' is used in test cases to do CONNECT through
 +            push @protocols, 'http-proxy';
 +
 +            # 'none' is used in test cases to mean no server
 +            push @protocols, 'none';
 +        }
 +        elsif($_ =~ /^Features: (.*)/i) {
 +            $feat = $1;
 +            if($feat =~ /TrackMemory/i) {
 +                # built with memory tracking support (--enable-curldebug)
 +                $has_memory_tracking = 1;
 +            }
 +            if($feat =~ /debug/i) {
 +                # curl was built with --enable-debug
 +                $debug_build = 1;
 +            }
 +            if($feat =~ /SSL/i) {
 +                # ssl enabled
 +                $has_ssl=1;
 +            }
 +            if($feat =~ /MultiSSL/i) {
 +                # multiple ssl backends available.
 +                $has_multissl=1;
 +            }
 +            if($feat =~ /Largefile/i) {
 +                # large file support
 +                $has_largefile=1;
 +            }
 +            if($feat =~ /IDN/i) {
 +                # IDN support
 +                $has_idn=1;
 +            }
 +            if($feat =~ /IPv6/i) {
 +                $has_ipv6 = 1;
 +            }
 +            if($feat =~ /UnixSockets/i) {
 +                $has_unix = 1;
 +            }
 +            if($feat =~ /libz/i) {
 +                $has_libz = 1;
 +            }
 +            if($feat =~ /brotli/i) {
 +                $has_brotli = 1;
 +            }
 +            if($feat =~ /zstd/i) {
 +                $has_zstd = 1;
 +            }
 +            if($feat =~ /NTLM/i) {
 +                # NTLM enabled
 +                $has_ntlm=1;
 +
 +                # Use this as a proxy for any cryptographic authentication
 +                $has_crypto=1;
 +            }
 +            if($feat =~ /NTLM_WB/i) {
 +                # NTLM delegation to winbind daemon ntlm_auth helper enabled
 +                $has_ntlm_wb=1;
 +            }
 +            if($feat =~ /SSPI/i) {
 +                # SSPI enabled
 +                $has_sspi=1;
 +            }
 +            if($feat =~ /GSS-API/i) {
 +                # GSS-API enabled
 +                $has_gssapi=1;
 +            }
 +            if($feat =~ /Kerberos/i) {
 +                # Kerberos enabled
 +                $has_kerberos=1;
 +
 +                # Use this as a proxy for any cryptographic authentication
 +                $has_crypto=1;
 +            }
 +            if($feat =~ /SPNEGO/i) {
 +                # SPNEGO enabled
 +                $has_spnego=1;
 +
 +                # Use this as a proxy for any cryptographic authentication
 +                $has_crypto=1;
 +            }
 +            if($feat =~ /CharConv/i) {
 +                # CharConv enabled
 +                $has_charconv=1;
 +            }
 +            if($feat =~ /TLS-SRP/i) {
 +                # TLS-SRP enabled
 +                $has_tls_srp=1;
 +            }
 +            if($feat =~ /Metalink/i) {
 +                # Metalink enabled
 +                $has_metalink=1;
 +            }
 +            if($feat =~ /PSL/i) {
 +                # PSL enabled
 +                $has_psl=1;
 +            }
 +            if($feat =~ /alt-svc/i) {
 +                # alt-svc enabled
 +                $has_altsvc=1;
 +            }
++            if($feat =~ /HSTS/i) {
++                $has_hsts=1;
++            }
 +            if($feat =~ /AsynchDNS/i) {
 +                if(!$has_cares) {
 +                    # this means threaded resolver
 +                    $has_threadedres=1;
 +                    $resolver="threaded";
 +                }
 +            }
 +            if($feat =~ /HTTP2/) {
 +                # http2 enabled
 +                $has_http2=1;
 +
 +                push @protocols, 'http/2';
 +            }
 +            if($feat =~ /HTTPS-proxy/) {
 +                $has_httpsproxy=1;
 +
 +                # 'https-proxy' is used as "server" so consider it a protocol
 +                push @protocols, 'https-proxy';
 +            }
 +        }
 +        #
 +        # Test harness currently uses a non-stunnel server in order to
 +        # run HTTP TLS-SRP tests required when curl is built with https
 +        # protocol support and TLS-SRP feature enabled. For convenience
 +        # 'httptls' may be included in the test harness protocols array
 +        # to differentiate this from classic stunnel based 'https' test
 +        # harness server.
 +        #
 +        if($has_tls_srp) {
 +            my $add_httptls;
 +            for(@protocols) {
 +                if($_ =~ /^https(-ipv6|)$/) {
 +                    $add_httptls=1;
 +                    last;
 +                }
 +            }
 +            if($add_httptls && (! grep /^httptls$/, @protocols)) {
 +                push @protocols, 'httptls';
 +                push @protocols, 'httptls-ipv6';
 +            }
 +        }
 +    }
 +    if(!$curl) {
 +        logmsg "unable to get curl's version, further details are:\n";
 +        logmsg "issued command: \n";
 +        logmsg "$versioncmd \n";
 +        if ($versretval == -1) {
 +            logmsg "command failed with: \n";
 +            logmsg "$versnoexec \n";
 +        }
 +        elsif ($versretval & 127) {
 +            logmsg sprintf("command died with signal %d, and %s coredump.\n",
 +                           ($versretval & 127), ($versretval & 128)?"a":"no");
 +        }
 +        else {
 +            logmsg sprintf("command exited with value %d \n", $versretval >> 
8);
 +        }
 +        logmsg "contents of $curlverout: \n";
 +        displaylogcontent("$curlverout");
 +        logmsg "contents of $curlvererr: \n";
 +        displaylogcontent("$curlvererr");
 +        die "couldn't get curl's version";
 +    }
 +
 +    if(-r "../lib/curl_config.h") {
 +        open(CONF, "<../lib/curl_config.h");
 +        while(<CONF>) {
 +            if($_ =~ /^\#define HAVE_GETRLIMIT/) {
 +                $has_getrlimit = 1;
 +            }
 +        }
 +        close(CONF);
 +    }
 +
 +    if($has_ipv6) {
 +        # client has IPv6 support
 +
 +        # check if the HTTP server has it!
 +        my $cmd = "server/sws".exe_ext('SRV')." --version";
 +        my @sws = `$cmd`;
 +        if($sws[0] =~ /IPv6/) {
 +            # HTTP server has IPv6 support!
 +            $http_ipv6 = 1;
 +            $gopher_ipv6 = 1;
 +        }
 +
 +        # check if the FTP server has it!
 +        $cmd = "server/sockfilt".exe_ext('SRV')." --version";
 +        @sws = `$cmd`;
 +        if($sws[0] =~ /IPv6/) {
 +            # FTP server has IPv6 support!
 +            $ftp_ipv6 = 1;
 +        }
 +    }
 +
 +    if($has_unix) {
 +        # client has Unix sockets support, check whether the HTTP server has 
it
 +        my $cmd = "server/sws".exe_ext('SRV')." --version";
 +        my @sws = `$cmd`;
 +        $http_unix = 1 if($sws[0] =~ /unix/);
 +    }
 +
 +    if(!$has_memory_tracking && $torture) {
 +        die "can't run torture tests since curl was built without ".
 +            "TrackMemory feature (--enable-curldebug)";
 +    }
 +
 +    open(M, "$CURL -M 2>&1|");
 +    while(my $s = <M>) {
 +        if($s =~ /built-in manual was disabled at build-time/) {
 +            $has_manual = 0;
 +            last;
 +        }
 +        $has_manual = 1;
 +        last;
 +    }
 +    close(M);
 +
 +    $has_shared = `sh $CURLCONFIG --built-shared`;
 +    chomp $has_shared;
 +
 +    my $hostname=join(' ', runclientoutput("hostname"));
 +    my $hosttype=join(' ', runclientoutput("uname -a"));
 +    my $hostos=$^O;
 +
 +    logmsg ("********* System characteristics ******** \n",
 +            "* $curl\n",
 +            "* $libcurl\n",
 +            "* Features: $feat\n",
 +            "* Disabled: $dis\n",
 +            "* Host: $hostname",
 +            "* System: $hosttype",
 +            "* OS: $hostos\n");
 +
 +    if($has_memory_tracking && $has_threadedres) {
 +        $has_memory_tracking = 0;
 +        logmsg("*\n",
 +               "*** DISABLES memory tracking when using threaded resolver\n",
 +               "*\n");
 +    }
 +
 +    logmsg sprintf("* Servers: %s", $stunnel?"SSL ":"");
 +    logmsg sprintf("%s", $http_ipv6?"HTTP-IPv6 ":"");
 +    logmsg sprintf("%s", $http_unix?"HTTP-unix ":"");
 +    logmsg sprintf("%s\n", $ftp_ipv6?"FTP-IPv6 ":"");
 +
 +    logmsg sprintf("* Env: %s%s", $valgrind?"Valgrind ":"",
 +                   $run_event_based?"event-based ":"");
 +    logmsg sprintf("%s\n", $libtool?"Libtool ":"");
 +    logmsg ("* Seed: $randseed\n");
 +
 +    if($verbose) {
 +        if($has_unix) {
 +            logmsg "* Unix socket paths:\n";
 +            if($http_unix) {
 +                logmsg sprintf("*   HTTP-Unix:%s\n", $HTTPUNIXPATH);
 +            }
 +        }
 +    }
 +
 +    logmsg "***************************************** \n";
 +
 +    setupfeatures();
 +    # toggle off the features that were disabled in the build
 +    for my $d(@disabled) {
 +        $feature{$d} = 0;
 +    }
 +}
 +
 +#######################################################################
 +# substitute the variable stuff into either a joined up file or
 +# a command, in either case passed by reference
 +#
 +sub subVariables {
 +    my ($thing, $prefix) = @_;
 +
 +    if(!$prefix) {
 +        $prefix = "%";
 +    }
 +
 +    # test server ports
 +    $$thing =~ s/${prefix}FTP6PORT/$FTP6PORT/g;
 +    $$thing =~ s/${prefix}FTPSPORT/$FTPSPORT/g;
 +    $$thing =~ s/${prefix}FTPPORT/$FTPPORT/g;
 +    $$thing =~ s/${prefix}GOPHER6PORT/$GOPHER6PORT/g;
 +    $$thing =~ s/${prefix}GOPHERPORT/$GOPHERPORT/g;
 +    $$thing =~ s/${prefix}HTTPTLS6PORT/$HTTPTLS6PORT/g;
 +    $$thing =~ s/${prefix}HTTPTLSPORT/$HTTPTLSPORT/g;
 +    $$thing =~ s/${prefix}HTTP6PORT/$HTTP6PORT/g;
 +    $$thing =~ s/${prefix}HTTPSPORT/$HTTPSPORT/g;
 +    $$thing =~ s/${prefix}HTTPSPROXYPORT/$HTTPSPROXYPORT/g;
 +    $$thing =~ s/${prefix}HTTP2PORT/$HTTP2PORT/g;
 +    $$thing =~ s/${prefix}HTTPPORT/$HTTPPORT/g;
 +    $$thing =~ s/${prefix}PROXYPORT/$HTTPPROXYPORT/g;
 +    $$thing =~ s/${prefix}MQTTPORT/$MQTTPORT/g;
 +    $$thing =~ s/${prefix}IMAP6PORT/$IMAP6PORT/g;
 +    $$thing =~ s/${prefix}IMAPPORT/$IMAPPORT/g;
 +    $$thing =~ s/${prefix}POP36PORT/$POP36PORT/g;
 +    $$thing =~ s/${prefix}POP3PORT/$POP3PORT/g;
 +    $$thing =~ s/${prefix}RTSP6PORT/$RTSP6PORT/g;
 +    $$thing =~ s/${prefix}RTSPPORT/$RTSPPORT/g;
 +    $$thing =~ s/${prefix}SMTP6PORT/$SMTP6PORT/g;
 +    $$thing =~ s/${prefix}SMTPPORT/$SMTPPORT/g;
 +    $$thing =~ s/${prefix}SOCKSPORT/$SOCKSPORT/g;
 +    $$thing =~ s/${prefix}SSHPORT/$SSHPORT/g;
 +    $$thing =~ s/${prefix}TFTP6PORT/$TFTP6PORT/g;
 +    $$thing =~ s/${prefix}TFTPPORT/$TFTPPORT/g;
 +    $$thing =~ s/${prefix}DICTPORT/$DICTPORT/g;
 +    $$thing =~ s/${prefix}SMBPORT/$SMBPORT/g;
 +    $$thing =~ s/${prefix}SMBSPORT/$SMBSPORT/g;
 +    $$thing =~ s/${prefix}TELNETPORT/$TELNETPORT/g;
 +    $$thing =~ s/${prefix}NOLISTENPORT/$NOLISTENPORT/g;
 +
 +    # server Unix domain socket paths
 +    $$thing =~ s/${prefix}HTTPUNIXPATH/$HTTPUNIXPATH/g;
 +
 +    # client IP addresses
 +    $$thing =~ s/${prefix}CLIENT6IP/$CLIENT6IP/g;
 +    $$thing =~ s/${prefix}CLIENTIP/$CLIENTIP/g;
 +
 +    # server IP addresses
 +    $$thing =~ s/${prefix}HOST6IP/$HOST6IP/g;
 +    $$thing =~ s/${prefix}HOSTIP/$HOSTIP/g;
 +
 +    # misc
 +    $$thing =~ s/${prefix}CURL/$CURL/g;
 +    $$thing =~ s/${prefix}PWD/$pwd/g;
 +    $$thing =~ s/${prefix}POSIX_PWD/$posix_pwd/g;
++    $$thing =~ s/${prefix}VERSION/$VERSION/g;
 +
 +    my $file_pwd = $pwd;
 +    if($file_pwd !~ /^\//) {
 +        $file_pwd = "/$file_pwd";
 +    }
 +    my $ssh_pwd = $posix_pwd;
 +    if ($sshdid && $sshdid =~ /OpenSSH-Windows/) {
 +        $ssh_pwd = $file_pwd;
 +    }
 +
 +    $$thing =~ s/${prefix}FILE_PWD/$file_pwd/g;
 +    $$thing =~ s/${prefix}SSH_PWD/$ssh_pwd/g;
 +    $$thing =~ s/${prefix}SRCDIR/$srcdir/g;
 +    $$thing =~ s/${prefix}USER/$USER/g;
 +
 +    $$thing =~ s/${prefix}SSHSRVMD5/$SSHSRVMD5/g;
 +
 +    # The purpose of FTPTIME2 and FTPTIME3 is to provide times that can be
 +    # used for time-out tests and that would work on most hosts as these
 +    # adjust for the startup/check time for this particular host. We needed to
 +    # do this to make the test suite run better on very slow hosts.
 +    my $ftp2 = $ftpchecktime * 2;
 +    my $ftp3 = $ftpchecktime * 3;
 +
 +    $$thing =~ s/${prefix}FTPTIME2/$ftp2/g;
 +    $$thing =~ s/${prefix}FTPTIME3/$ftp3/g;
 +
 +    # HTTP2
 +    $$thing =~ s/${prefix}H2CVER/$h2cver/g;
 +}
 +
 +sub subBase64 {
 +    my ($thing) = @_;
 +
 +    # cut out the base64 piece
 +    if($$thing =~ s/%b64\[(.*)\]b64%/%%B64%%/i) {
 +        my $d = $1;
 +        # encode %NN characters
 +        $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
 +        my $enc = encode_base64($d, "");
 +        # put the result into there
 +        $$thing =~ s/%%B64%%/$enc/;
 +    }
++    # hex decode
++    if($$thing =~ s/%hex\[(.*)\]hex%/%%HEX%%/i) {
++        # decode %NN characters
++        my $d = $1;
++        $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
++        $$thing =~ s/%%HEX%%/$d/;
++    }
++    if($$thing =~ s/%repeat\[(\d+) x (.*)\]%/%%REPEAT%%/i) {
++        # decode %NN characters
++        my ($d, $n) = ($2, $1);
++        $d =~ s/%([0-9A-Fa-f]{2})/chr(hex($1))/eg;
++        my $all = $d x $n;
++        $$thing =~ s/%%REPEAT%%/$all/;
++    }
 +}
 +
 +sub fixarray {
 +    my @in = @_;
 +
 +    for(@in) {
 +        subVariables(\$_);
 +    }
 +    return @in;
 +}
 +
 +#######################################################################
 +# Provide time stamps for single test skipped events
 +#
 +sub timestampskippedevents {
 +    my $testnum = $_[0];
 +
 +    return if((not defined($testnum)) || ($testnum < 1));
 +
 +    if($timestats) {
 +
 +        if($timevrfyend{$testnum}) {
 +            return;
 +        }
 +        elsif($timesrvrlog{$testnum}) {
 +            $timevrfyend{$testnum} = $timesrvrlog{$testnum};
 +            return;
 +        }
 +        elsif($timetoolend{$testnum}) {
 +            $timevrfyend{$testnum} = $timetoolend{$testnum};
 +            $timesrvrlog{$testnum} = $timetoolend{$testnum};
 +        }
 +        elsif($timetoolini{$testnum}) {
 +            $timevrfyend{$testnum} = $timetoolini{$testnum};
 +            $timesrvrlog{$testnum} = $timetoolini{$testnum};
 +            $timetoolend{$testnum} = $timetoolini{$testnum};
 +        }
 +        elsif($timesrvrend{$testnum}) {
 +            $timevrfyend{$testnum} = $timesrvrend{$testnum};
 +            $timesrvrlog{$testnum} = $timesrvrend{$testnum};
 +            $timetoolend{$testnum} = $timesrvrend{$testnum};
 +            $timetoolini{$testnum} = $timesrvrend{$testnum};
 +        }
 +        elsif($timesrvrini{$testnum}) {
 +            $timevrfyend{$testnum} = $timesrvrini{$testnum};
 +            $timesrvrlog{$testnum} = $timesrvrini{$testnum};
 +            $timetoolend{$testnum} = $timesrvrini{$testnum};
 +            $timetoolini{$testnum} = $timesrvrini{$testnum};
 +            $timesrvrend{$testnum} = $timesrvrini{$testnum};
 +        }
 +        elsif($timeprepini{$testnum}) {
 +            $timevrfyend{$testnum} = $timeprepini{$testnum};
 +            $timesrvrlog{$testnum} = $timeprepini{$testnum};
 +            $timetoolend{$testnum} = $timeprepini{$testnum};
 +            $timetoolini{$testnum} = $timeprepini{$testnum};
 +            $timesrvrend{$testnum} = $timeprepini{$testnum};
 +            $timesrvrini{$testnum} = $timeprepini{$testnum};
 +        }
 +    }
 +}
 +
 +#######################################################################
 +# Run a single specified test case
 +#
 +sub singletest {
 +    my ($evbased, # 1 means switch on if possible (and "curl" is tested)
 +                  # returns "not a test" if it can't be used for this test
 +        $testnum,
 +        $count,
 +        $total)=@_;
 +
 +    my @what;
 +    my $why;
 +    my $cmd;
 +    my $disablevalgrind;
 +    my $errorreturncode = 1; # 1 means normal error, 2 means ignored error
 +
 +    # fist, remove all lingering log files
 +    cleardir($LOGDIR);
 +
 +    # copy test number to a global scope var, this allows
 +    # testnum checking when starting test harness servers.
 +    $testnumcheck = $testnum;
 +
 +    # timestamp test preparation start
 +    $timeprepini{$testnum} = Time::HiRes::time();
 +
 +    if($disttests !~ /test$testnum\W/ ) {
 +        logmsg "Warning: test$testnum not present in 
tests/data/Makefile.inc\n";
 +    }
 +    if($disabled{$testnum}) {
 +        logmsg "Warning: test$testnum is explicitly disabled\n";
 +    }
 +    if($ignored{$testnum}) {
 +        logmsg "Warning: test$testnum result is ignored\n";
 +        $errorreturncode = 2;
 +    }
 +
 +    # load the test case file definition
 +    if(loadtest("${TESTDIR}/test${testnum}")) {
 +        if($verbose) {
 +            # this is not a test
 +            logmsg "RUN: $testnum doesn't look like a test case\n";
 +        }
 +        $why = "no test";
 +    }
 +    else {
 +        @what = getpart("client", "features");
 +    }
 +
 +    # We require a feature to be present
 +    for(@what) {
 +        my $f = $_;
 +        $f =~ s/\s//g;
 +
 +        if($f =~ /^([^!].*)$/) {
 +            if($feature{$1}) {
 +                next;
 +            }
 +
 +            $why = "curl lacks $1 support";
 +            last;
 +        }
 +    }
 +
 +    # We require a feature to not be present
 +    if(!$why) {
 +        for(@what) {
 +            my $f = $_;
 +            $f =~ s/\s//g;
 +
 +            if($f =~ /^!(.*)$/) {
 +                if(!$feature{$1}) {
 +                    next;
 +                }
 +            }
 +            else {
 +                next;
 +            }
 +
 +            $why = "curl has $1 support";
 +            last;
 +        }
 +    }
 +
 +    if(!$why) {
 +        my @info_keywords = getpart("info", "keywords");
 +        my $match;
 +        my $k;
 +
 +        # Clear the list of keywords from the last test
 +        %keywords = ();
 +
 +        if(!$info_keywords[0]) {
 +            $why = "missing the <keywords> section!";
 +        }
 +
 +        for $k (@info_keywords) {
 +            chomp $k;
 +            if ($disabled_keywords{lc($k)}) {
 +                $why = "disabled by keyword";
 +            } elsif ($enabled_keywords{lc($k)}) {
 +                $match = 1;
 +            }
 +            if ($ignored_keywords{lc($k)}) {
 +                logmsg "Warning: test$testnum result is ignored due to $k\n";
 +                $errorreturncode = 2;
 +            }
 +
 +            $keywords{$k} = 1;
 +        }
 +
 +        if(!$why && !$match && %enabled_keywords) {
 +            $why = "disabled by missing keyword";
 +        }
 +    }
 +
 +    # test definition may instruct to (un)set environment vars
 +    # this is done this early, so that the precheck can use environment
 +    # variables and still bail out fine on errors
 +
 +    # restore environment variables that were modified in a previous run
 +    foreach my $var (keys %oldenv) {
 +        if($oldenv{$var} eq 'notset') {
 +            delete $ENV{$var} if($ENV{$var});
 +        }
 +        else {
 +            $ENV{$var} = $oldenv{$var};
 +        }
 +        delete $oldenv{$var};
 +    }
 +
 +    # get the name of the test early
 +    my @testname= getpart("client", "name");
 +    my $testname = $testname[0];
 +    $testname =~ s/\n//g;
 +
 +    # create test result in CI services
 +    if(azure_check_environment() && $AZURE_RUN_ID) {
-         $AZURE_RESULT_ID = azure_create_test_result($AZURE_RUN_ID, $testnum, 
$testname);
++        $AZURE_RESULT_ID = azure_create_test_result($VCURL, $AZURE_RUN_ID, 
$testnum, $testname);
 +    }
 +    elsif(appveyor_check_environment()) {
-         appveyor_create_test_result($testnum, $testname);
++        appveyor_create_test_result($VCURL, $testnum, $testname);
 +    }
 +
 +    # remove test server commands file before servers are started/verified
 +    unlink($FTPDCMD) if(-f $FTPDCMD);
 +
 +    # timestamp required servers verification start
 +    $timesrvrini{$testnum} = Time::HiRes::time();
 +
 +    if(!$why) {
 +        $why = serverfortest($testnum);
 +    }
 +
 +    # Save a preprocessed version of the entire test file. This allows more
 +    # "basic" test case readers to enjoy variable replacements.
 +    my @entiretest = fulltest();
 +    my $otest = "log/test$testnum";
 +    open(D, ">$otest");
 +    my $diff;
 +    for my $s (@entiretest) {
 +        my $f = $s;
 +        subVariables(\$s, "%");
 +        subBase64(\$s);
 +        if($f ne $s) {
 +            $diff++;
 +        }
 +        print D $s;
 +    }
 +    close(D);
 +
 +    # remove the separate test file again if nothing was updated to keep
 +    # things simpler
 +    unlink($otest) if(!$diff);
 +
 +    # in case the process changed the file, reload it
 +    loadtest("log/test${testnum}") if($diff);
 +
 +    # timestamp required servers verification end
 +    $timesrvrend{$testnum} = Time::HiRes::time();
 +
 +    my @setenv = getpart("client", "setenv");
 +    if(@setenv) {
 +        foreach my $s (@setenv) {
 +            chomp $s;
 +            subVariables(\$s);
 +            if($s =~ /([^=]*)=(.*)/) {
 +                my ($var, $content) = ($1, $2);
 +                # remember current setting, to restore it once test runs
 +                $oldenv{$var} = ($ENV{$var})?"$ENV{$var}":'notset';
 +                # set new value
 +                if(!$content) {
 +                    delete $ENV{$var} if($ENV{$var});
 +                }
 +                else {
 +                    if($var =~ /^LD_PRELOAD/) {
 +                        if(exe_ext('TOOL') && (exe_ext('TOOL') eq '.exe')) {
 +                            # print "Skipping LD_PRELOAD due to lack of OS 
support\n";
 +                            next;
 +                        }
 +                        if($debug_build || ($has_shared ne "yes")) {
 +                            # print "Skipping LD_PRELOAD due to no release 
shared build\n";
 +                            next;
 +                        }
 +                    }
 +                    $ENV{$var} = "$content";
 +                    print "setenv $var = $content\n" if($verbose);
 +                }
 +            }
 +        }
 +    }
 +
 +    if(!$why) {
 +        my @precheck = getpart("client", "precheck");
 +        if(@precheck) {
 +            $cmd = $precheck[0];
 +            chomp $cmd;
 +            subVariables(\$cmd);
 +            if($cmd) {
 +                my @p = split(/ /, $cmd);
 +                if($p[0] !~ /\//) {
 +                    # the first word, the command, does not contain a slash so
 +                    # we will scan the "improved" PATH to find the command to
 +                    # be able to run it
 +                    my $fullp = checktestcmd($p[0]);
 +
 +                    if($fullp) {
 +                        $p[0] = $fullp;
 +                    }
 +                    $cmd = join(" ", @p);
 +                }
 +
 +                my @o = `$cmd 2>/dev/null`;
 +                if($o[0]) {
 +                    $why = $o[0];
 +                    chomp $why;
 +                } elsif($?) {
 +                    $why = "precheck command error";
 +                }
 +                logmsg "prechecked $cmd\n" if($verbose);
 +            }
 +        }
 +    }
 +
 +    if($why && !$listonly) {
 +        # there's a problem, count it as "skipped"
 +        $skipped++;
 +        $skipped{$why}++;
 +        $teststat[$testnum]=$why; # store reason for this test case
 +
 +        if(!$short) {
 +            if($skipped{$why} <= 3) {
 +                # show only the first three skips for each reason
 +                logmsg sprintf("test %04d SKIPPED: $why\n", $testnum);
 +            }
 +        }
 +
 +        timestampskippedevents($testnum);
 +        return -1;
 +    }
 +    logmsg sprintf("test %04d...", $testnum) if(!$automakestyle);
 +
 +    my %replyattr = getpartattr("reply", "data");
 +    my @reply;
 +    if (partexists("reply", "datacheck")) {
 +        for my $partsuffix (('', '1', '2', '3', '4')) {
 +            my @replycheckpart = getpart("reply", "datacheck".$partsuffix);
 +            if(@replycheckpart) {
 +                my %replycheckpartattr = getpartattr("reply", 
"datacheck".$partsuffix);
 +                # get the mode attribute
 +                my $filemode=$replycheckpartattr{'mode'};
 +                if($filemode && ($filemode eq "text") && $has_textaware) {
 +                    # text mode when running on windows: fix line endings
 +                    map s/\r\n/\n/g, @replycheckpart;
 +                    map s/\n/\r\n/g, @replycheckpart;
 +                }
 +                if($replycheckpartattr{'nonewline'}) {
 +                    # Yes, we must cut off the final newline from the final 
line
 +                    # of the datacheck
 +                    chomp($replycheckpart[$#replycheckpart]);
 +                }
 +                push(@reply, @replycheckpart);
 +            }
 +        }
 +    }
 +    else {
 +        # check against the data section
 +        @reply = getpart("reply", "data");
 +        # get the mode attribute
 +        my $filemode=$replyattr{'mode'};
 +        if($filemode && ($filemode eq "text") && $has_textaware) {
 +            # text mode when running on windows: fix line endings
 +            map s/\r\n/\n/g, @reply;
 +            map s/\n/\r\n/g, @reply;
 +        }
 +    }
 +    for my $r (@reply) {
 +        subVariables(\$r);
 +    }
 +
 +    # this is the valid protocol blurb curl should generate
 +    my @protocol= fixarray ( getpart("verify", "protocol") );
 +
 +    # this is the valid protocol blurb curl should generate to a proxy
 +    my @proxyprot = fixarray ( getpart("verify", "proxy") );
 +
 +    # redirected stdout/stderr to these files
 +    $STDOUT="$LOGDIR/stdout$testnum";
 +    $STDERR="$LOGDIR/stderr$testnum";
 +
 +    # if this section exists, we verify that the stdout contained this:
 +    my @validstdout = fixarray ( getpart("verify", "stdout") );
 +    my @validstderr = fixarray ( getpart("verify", "stderr") );
 +
 +    # if this section exists, we verify upload
 +    my @upload = getpart("verify", "upload");
 +    if(@upload) {
 +      my %hash = getpartattr("verify", "upload");
 +      if($hash{'nonewline'}) {
 +          # cut off the final newline from the final line of the upload data
 +          chomp($upload[$#upload]);
 +      }
 +    }
 +
 +    # if this section exists, it might be FTP server instructions:
 +    my @ftpservercmd = fixarray ( getpart("reply", "servercmd") );
 +
 +    my $CURLOUT="$LOGDIR/curl$testnum.out"; # curl output if not stdout
 +
 +    # name of the test
 +    logmsg "[$testname]\n" if(!$short);
 +
 +    if($listonly) {
 +        timestampskippedevents($testnum);
 +        return 0; # look successful
 +    }
 +
 +    my @codepieces = getpart("client", "tool");
 +
 +    my $tool="";
 +    if(@codepieces) {
 +        $tool = $codepieces[0];
 +        chomp $tool;
 +        $tool .= exe_ext('TOOL');
 +    }
 +
 +    # remove server output logfile
 +    unlink($SERVERIN);
 +    unlink($SERVER2IN);
 +    unlink($PROXYIN);
 +
 +    push @ftpservercmd, "Testnum $testnum\n";
 +    # write the instructions to file
 +    writearray($FTPDCMD, \@ftpservercmd);
 +
 +    # get the command line options to use
 +    my @blaha;
 +    ($cmd, @blaha)= getpart("client", "command");
 +
 +    if($cmd) {
 +        # make some nice replace operations
 +        $cmd =~ s/\n//g; # no newlines please
 +        # substitute variables in the command line
 +        subVariables(\$cmd);
 +    }
 +    else {
 +        # there was no command given, use something silly
 +        $cmd="-";
 +    }
 +    if($has_memory_tracking) {
 +        unlink($memdump);
 +    }
 +
 +    # create (possibly-empty) files before starting the test
 +    for my $partsuffix (('', '1', '2', '3', '4')) {
 +        my @inputfile=getpart("client", "file".$partsuffix);
 +        my %fileattr = getpartattr("client", "file".$partsuffix);
 +        my $filename=$fileattr{'name'};
 +        if(@inputfile || $filename) {
 +            if(!$filename) {
 +                logmsg "ERROR: section client=>file has no name attribute\n";
 +                timestampskippedevents($testnum);
 +                return -1;
 +            }
 +            my $fileContent = join('', @inputfile);
 +            subVariables(\$fileContent);
 +            open(OUTFILE, ">$filename");
 +            binmode OUTFILE; # for crapage systems, use binary
++            if($fileattr{'nonewline'}) {
++                # cut off the final newline
++                chomp($fileContent);
++            }
 +            print OUTFILE $fileContent;
 +            close(OUTFILE);
 +        }
 +    }
 +
 +    my %cmdhash = getpartattr("client", "command");
 +
 +    my $out="";
 +
 +    if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-output/)) {
 +        #We may slap on --output!
 +        if (!@validstdout ||
 +                ($cmdhash{'option'} && $cmdhash{'option'} =~ /force-output/)) 
{
 +            $out=" --output $CURLOUT ";
 +        }
 +    }
 +
 +    my $serverlogslocktimeout = $defserverlogslocktimeout;
 +    if($cmdhash{'timeout'}) {
 +        # test is allowed to override default server logs lock timeout
 +        if($cmdhash{'timeout'} =~ /(\d+)/) {
 +            $serverlogslocktimeout = $1 if($1 >= 0);
 +        }
 +    }
 +
 +    my $postcommanddelay = $defpostcommanddelay;
 +    if($cmdhash{'delay'}) {
 +        # test is allowed to specify a delay after command is executed
 +        if($cmdhash{'delay'} =~ /(\d+)/) {
 +            $postcommanddelay = $1 if($1 > 0);
 +        }
 +    }
 +
 +    my $CMDLINE;
 +    my $cmdargs;
 +    my $cmdtype = $cmdhash{'type'} || "default";
 +    my $fail_due_event_based = $evbased;
 +    if($cmdtype eq "perl") {
 +        # run the command line prepended with "perl"
 +        $cmdargs ="$cmd";
 +        $CMDLINE = "$perl ";
 +        $tool=$CMDLINE;
 +        $disablevalgrind=1;
 +    }
 +    elsif($cmdtype eq "shell") {
 +        # run the command line prepended with "/bin/sh"
 +        $cmdargs ="$cmd";
 +        $CMDLINE = "/bin/sh ";
 +        $tool=$CMDLINE;
 +        $disablevalgrind=1;
 +    }
 +    elsif(!$tool && !$keywords{"unittest"}) {
 +        # run curl, add suitable command line options
 +        my $inc="";
 +        if((!$cmdhash{'option'}) || ($cmdhash{'option'} !~ /no-include/)) {
 +            $inc = " --include";
 +        }
 +        $cmdargs = "$out$inc ";
 +
 +        if($cmdhash{'option'} && ($cmdhash{'option'} =~ /binary-trace/)) {
 +            $cmdargs .= "--trace log/trace$testnum ";
 +        }
 +        else {
 +            $cmdargs .= "--trace-ascii log/trace$testnum ";
 +        }
 +        $cmdargs .= "--trace-time ";
 +        if($evbased) {
 +            $cmdargs .= "--test-event ";
 +            $fail_due_event_based--;
 +        }
 +        $cmdargs .= $cmd;
 +    }
 +    else {
 +        $cmdargs = " $cmd"; # $cmd is the command line for the test file
 +        $CURLOUT = $STDOUT; # sends received data to stdout
 +
 +        # Default the tool to a unit test with the same name as the test spec
 +        if($keywords{"unittest"} && !$tool) {
 +            $tool="unit$testnum";
 +        }
 +
 +        if($tool =~ /^lib/) {
 +            $CMDLINE="$LIBDIR/$tool";
 +        }
 +        elsif($tool =~ /^unit/) {
 +            $CMDLINE="$UNITDIR/$tool";
 +        }
 +
 +        if(! -f $CMDLINE) {
 +            logmsg "The tool set in the test case for this: '$tool' does not 
exist\n";
 +            timestampskippedevents($testnum);
 +            return -1;
 +        }
 +        $DBGCURL=$CMDLINE;
 +    }
 +
 +    if($gdbthis) {
 +        # gdb is incompatible with valgrind, so disable it when debugging
 +        # Perhaps a better approach would be to run it under valgrind anyway
 +        # with --db-attach=yes or --vgdb=yes.
 +        $disablevalgrind=1;
 +    }
 +
 +    if($fail_due_event_based) {
 +        logmsg "This test cannot run event based\n";
 +        return -1;
 +    }
 +
 +    my @stdintest = getpart("client", "stdin");
 +
 +    if(@stdintest) {
 +        my $stdinfile="$LOGDIR/stdin-for-$testnum";
 +
 +        my %hash = getpartattr("client", "stdin");
 +        if($hash{'nonewline'}) {
 +            # cut off the final newline from the final line of the stdin data
 +            chomp($stdintest[$#stdintest]);
 +        }
 +
 +        writearray($stdinfile, \@stdintest);
 +
 +        $cmdargs .= " <$stdinfile";
 +    }
 +
 +    if(!$tool) {
 +        $CMDLINE="$CURL";
 +    }
 +
 +    my $usevalgrind;
 +    if($valgrind && !$disablevalgrind) {
 +        my @valgrindoption = getpart("verify", "valgrind");
 +        if((!@valgrindoption) || ($valgrindoption[0] !~ /disable/)) {
 +            $usevalgrind = 1;
 +            my $valgrindcmd = "$valgrind ";
 +            $valgrindcmd .= "$valgrind_tool " if($valgrind_tool);
 +            $valgrindcmd .= "--quiet --leak-check=yes ";
 +            $valgrindcmd .= "--suppressions=$srcdir/valgrind.supp ";
 +           # $valgrindcmd .= "--gen-suppressions=all ";
 +            $valgrindcmd .= "--num-callers=16 ";
 +            $valgrindcmd .= "${valgrind_logfile}=$LOGDIR/valgrind$testnum";
 +            $CMDLINE = "$valgrindcmd $CMDLINE";
 +        }
 +    }
 +
 +    $CMDLINE .= "$cmdargs >$STDOUT 2>$STDERR";
 +
 +    if($verbose) {
 +        logmsg "$CMDLINE\n";
 +    }
 +
 +    open(CMDLOG, ">", "$LOGDIR/$CURLLOG");
 +    print CMDLOG "$CMDLINE\n";
 +    close(CMDLOG);
 +
 +    unlink("core");
 +
 +    my $dumped_core;
 +    my $cmdres;
 +
 +    if($gdbthis) {
 +        my $gdbinit = "$TESTDIR/gdbinit$testnum";
 +        open(GDBCMD, ">$LOGDIR/gdbcmd");
 +        print GDBCMD "set args $cmdargs\n";
 +        print GDBCMD "show args\n";
 +        print GDBCMD "source $gdbinit\n" if -e $gdbinit;
 +        close(GDBCMD);
 +    }
 +
 +    # timestamp starting of test command
 +    $timetoolini{$testnum} = Time::HiRes::time();
 +
 +    # run the command line we built
 +    if ($torture) {
 +        $cmdres = torture($CMDLINE,
 +                          $testnum,
-                           "$gdb --directory libtest $DBGCURL -x 
$LOGDIR/gdbcmd");
++                          "$gdb --directory $LIBDIR $DBGCURL -x 
$LOGDIR/gdbcmd");
 +    }
 +    elsif($gdbthis) {
 +        my $GDBW = ($gdbxwin) ? "-w" : "";
-         runclient("$gdb --directory libtest $DBGCURL $GDBW -x 
$LOGDIR/gdbcmd");
++        runclient("$gdb --directory $LIBDIR $DBGCURL $GDBW -x 
$LOGDIR/gdbcmd");
 +        $cmdres=0; # makes it always continue after a debugged run
 +    }
 +    else {
 +        $cmdres = runclient("$CMDLINE");
 +        my $signal_num  = $cmdres & 127;
 +        $dumped_core = $cmdres & 128;
 +
 +        if(!$anyway && ($signal_num || $dumped_core)) {
 +            $cmdres = 1000;
 +        }
 +        else {
 +            $cmdres >>= 8;
 +            $cmdres = (2000 + $signal_num) if($signal_num && !$cmdres);
 +        }
 +    }
 +
 +    # timestamp finishing of test command
 +    $timetoolend{$testnum} = Time::HiRes::time();
 +
 +    if(!$dumped_core) {
 +        if(-r "core") {
 +            # there's core file present now!
 +            $dumped_core = 1;
 +        }
 +    }
 +
 +    if($dumped_core) {
 +        logmsg "core dumped\n";
 +        if(0 && $gdb) {
 +            logmsg "running gdb for post-mortem analysis:\n";
 +            open(GDBCMD, ">$LOGDIR/gdbcmd2");
 +            print GDBCMD "bt\n";
 +            close(GDBCMD);
 +            runclient("$gdb --directory libtest -x $LOGDIR/gdbcmd2 -batch 
$DBGCURL core ");
 +     #       unlink("$LOGDIR/gdbcmd2");
 +        }
 +    }
 +
 +    # If a server logs advisor read lock file exists, it is an indication
 +    # that the server has not yet finished writing out all its log files,
 +    # including server request log files used for protocol verification.
 +    # So, if the lock file exists the script waits here a certain amount
 +    # of time until the server removes it, or the given time expires.
 +
 +    if($serverlogslocktimeout) {
 +        my $lockretry = $serverlogslocktimeout * 20;
 +        while((-f $SERVERLOGS_LOCK) && $lockretry--) {
 +            portable_sleep(0.05);
 +        }
 +        if(($lockretry < 0) &&
 +           ($serverlogslocktimeout >= $defserverlogslocktimeout)) {
 +            logmsg "Warning: server logs lock timeout ",
 +                   "($serverlogslocktimeout seconds) expired\n";
 +        }
 +    }
 +
 +    # Test harness ssh server does not have this synchronization mechanism,
 +    # this implies that some ssh server based tests might need a small delay
 +    # once that the client command has run to avoid false test failures.
 +    #
 +    # gnutls-serv also lacks this synchronization mechanism, so gnutls-serv
 +    # based tests might need a small delay once that the client command has
 +    # run to avoid false test failures.
 +
 +    portable_sleep($postcommanddelay) if($postcommanddelay);
 +
 +    # timestamp removal of server logs advisor read lock
 +    $timesrvrlog{$testnum} = Time::HiRes::time();
 +
 +    # test definition might instruct to stop some servers
 +    # stop also all servers relative to the given one
 +
 +    my @killtestservers = getpart("client", "killserver");
 +    if(@killtestservers) {
 +        foreach my $server (@killtestservers) {
 +            chomp $server;
 +            stopserver($server);
 +        }
 +    }
 +
 +    # run the postcheck command
 +    my @postcheck= getpart("client", "postcheck");
 +    if(@postcheck) {
 +        $cmd = join("", @postcheck);
 +        chomp $cmd;
 +        subVariables(\$cmd);
 +        if($cmd) {
 +            logmsg "postcheck $cmd\n" if($verbose);
 +            my $rc = runclient("$cmd");
 +            # Must run the postcheck command in torture mode in order
 +            # to clean up, but the result can't be relied upon.
 +            if($rc != 0 && !$torture) {
 +                logmsg " postcheck FAILED\n";
 +                # timestamp test result verification end
 +                $timevrfyend{$testnum} = Time::HiRes::time();
 +                return $errorreturncode;
 +            }
 +        }
 +    }
 +
 +    # restore environment variables that were modified
 +    if(%oldenv) {
 +        foreach my $var (keys %oldenv) {
 +            if($oldenv{$var} eq 'notset') {
 +                delete $ENV{$var} if($ENV{$var});
 +            }
 +            else {
 +                $ENV{$var} = "$oldenv{$var}";
 +            }
 +        }
 +    }
 +
 +    # Skip all the verification on torture tests
 +    if ($torture) {
 +        # timestamp test result verification end
 +        $timevrfyend{$testnum} = Time::HiRes::time();
 +        return $cmdres;
 +    }
 +
 +    my @err = getpart("verify", "errorcode");
 +    my $errorcode = $err[0] || "0";
 +    my $ok="";
 +    my $res;
 +    chomp $errorcode;
 +    if (@validstdout) {
 +        # verify redirected stdout
 +        my @actual = loadarray($STDOUT);
 +
 +        # what parts to cut off from stdout
 +        my @stripfile = getpart("verify", "stripfile");
 +
 +        foreach my $strip (@stripfile) {
 +            chomp $strip;
 +            my @newgen;
 +            for(@actual) {
 +                eval $strip;
 +                if($_) {
 +                    push @newgen, $_;
 +                }
 +            }
 +            # this is to get rid of array entries that vanished (zero
 +            # length) because of replacements
 +            @actual = @newgen;
 +        }
 +
 +        # variable-replace in the stdout we have from the test case file
 +        @validstdout = fixarray(@validstdout);
 +
 +        # get all attributes
 +        my %hash = getpartattr("verify", "stdout");
 +
 +        # get the mode attribute
 +        my $filemode=$hash{'mode'};
 +        if($filemode && ($filemode eq "text") && $has_textaware) {
 +            # text mode when running on windows: fix line endings
 +            map s/\r\n/\n/g, @validstdout;
 +            map s/\n/\r\n/g, @validstdout;
 +        }
 +
 +        if($hash{'nonewline'}) {
 +            # Yes, we must cut off the final newline from the final line
 +            # of the protocol data
 +            chomp($validstdout[$#validstdout]);
 +        }
 +
 +        $res = compare($testnum, $testname, "stdout", \@actual, 
\@validstdout);
 +        if($res) {
 +            return $errorreturncode;
 +        }
 +        $ok .= "s";
 +    }
 +    else {
 +        $ok .= "-"; # stdout not checked
 +    }
 +
 +    if (@validstderr) {
 +        # verify redirected stderr
 +        my @actual = loadarray($STDERR);
 +
 +        # what parts to cut off from stderr
 +        my @stripfile = getpart("verify", "stripfile");
 +
 +        foreach my $strip (@stripfile) {
 +            chomp $strip;
 +            my @newgen;
 +            for(@actual) {
 +                eval $strip;
 +                if($_) {
 +                    push @newgen, $_;
 +                }
 +            }
 +            # this is to get rid of array entries that vanished (zero
 +            # length) because of replacements
 +            @actual = @newgen;
 +        }
 +
 +        # variable-replace in the stderr we have from the test case file
 +        @validstderr = fixarray(@validstderr);
 +
 +        # get all attributes
 +        my %hash = getpartattr("verify", "stderr");
 +
 +        # get the mode attribute
 +        my $filemode=$hash{'mode'};
 +        if($filemode && ($filemode eq "text") && $has_textaware) {
 +            # text mode when running on windows: fix line endings
 +            map s/\r\n/\n/g, @validstderr;
 +            map s/\n/\r\n/g, @validstderr;
 +        }
 +
 +        if($hash{'nonewline'}) {
 +            # Yes, we must cut off the final newline from the final line
 +            # of the protocol data
 +            chomp($validstderr[$#validstderr]);
 +        }
 +
 +        $res = compare($testnum, $testname, "stderr", \@actual, 
\@validstderr);
 +        if($res) {
 +            return $errorreturncode;
 +        }
 +        $ok .= "r";
 +    }
 +    else {
 +        $ok .= "-"; # stderr not checked
 +    }
 +
 +    if(@protocol) {
 +        # Verify the sent request
 +        my @out = loadarray($SERVERIN);
 +
 +        # what to cut off from the live protocol sent by curl
 +        my @strip = getpart("verify", "strip");
 +
 +        my @protstrip=@protocol;
 +
 +        # check if there's any attributes on the verify/protocol section
 +        my %hash = getpartattr("verify", "protocol");
 +
 +        if($hash{'nonewline'}) {
 +            # Yes, we must cut off the final newline from the final line
 +            # of the protocol data
 +            chomp($protstrip[$#protstrip]);
 +        }
 +
 +        for(@strip) {
 +            # strip off all lines that match the patterns from both arrays
 +            chomp $_;
 +            @out = striparray( $_, \@out);
 +            @protstrip= striparray( $_, \@protstrip);
 +        }
 +
 +        # what parts to cut off from the protocol
 +        my @strippart = getpart("verify", "strippart");
 +        my $strip;
 +        @strippart = fixarray(@strippart);
 +        for $strip (@strippart) {
 +            chomp $strip;
 +            for(@out) {
 +                eval $strip;
 +            }
 +        }
 +
 +        if((!$out[0] || ($out[0] eq "")) && $protstrip[0]) {
 +            logmsg "\n $testnum: protocol FAILED!\n".
 +                " There was no content at all in the file $SERVERIN.\n".
 +                " Server glitch? Total curl failure? Returned: $cmdres\n";
 +            return $errorreturncode;
 +        }
 +
 +        $res = compare($testnum, $testname, "protocol", \@out, \@protstrip);
 +        if($res) {
 +            return $errorreturncode;
 +        }
 +
 +        $ok .= "p";
 +
 +    }
 +    else {
 +        $ok .= "-"; # protocol not checked
 +    }
 +
 +    if(!$replyattr{'nocheck'} && (@reply || $replyattr{'sendzero'})) {
 +        # verify the received data
 +        my @out = loadarray($CURLOUT);
 +        $res = compare($testnum, $testname, "data", \@out, \@reply);
 +        if ($res) {
 +            return $errorreturncode;
 +        }
 +        $ok .= "d";
 +    }
 +    else {
 +        $ok .= "-"; # data not checked
 +    }
 +
 +    if(@upload) {
 +        # verify uploaded data
 +        my @out = loadarray("$LOGDIR/upload.$testnum");
 +
 +        # what parts to cut off from the upload
 +        my @strippart = getpart("verify", "strippart");
 +        my $strip;
 +        for $strip (@strippart) {
 +            chomp $strip;
 +            for(@out) {
 +                eval $strip;
 +            }
 +        }
 +
 +        $res = compare($testnum, $testname, "upload", \@out, \@upload);
 +        if ($res) {
 +            return $errorreturncode;
 +        }
 +        $ok .= "u";
 +    }
 +    else {
 +        $ok .= "-"; # upload not checked
 +    }
 +
 +    if(@proxyprot) {
 +        # Verify the sent proxy request
 +        my @out = loadarray($PROXYIN);
 +
 +        # what to cut off from the live protocol sent by curl, we use the
 +        # same rules as for <protocol>
 +        my @strip = getpart("verify", "strip");
 +
 +        my @protstrip=@proxyprot;
 +
 +        # check if there's any attributes on the verify/protocol section
 +        my %hash = getpartattr("verify", "proxy");
 +
 +        if($hash{'nonewline'}) {
 +            # Yes, we must cut off the final newline from the final line
 +            # of the protocol data
 +            chomp($protstrip[$#protstrip]);
 +        }
 +
 +        for(@strip) {
 +            # strip off all lines that match the patterns from both arrays
 +            chomp $_;
 +            @out = striparray( $_, \@out);
 +            @protstrip= striparray( $_, \@protstrip);
 +        }
 +
 +        # what parts to cut off from the protocol
 +        my @strippart = getpart("verify", "strippart");
 +        my $strip;
 +        for $strip (@strippart) {
 +            chomp $strip;
 +            for(@out) {
 +                eval $strip;
 +            }
 +        }
 +
 +        $res = compare($testnum, $testname, "proxy", \@out, \@protstrip);
 +        if($res) {
 +            return $errorreturncode;
 +        }
 +
 +        $ok .= "P";
 +
 +    }
 +    else {
 +        $ok .= "-"; # protocol not checked
 +    }
 +
 +    my $outputok;
 +    for my $partsuffix (('', '1', '2', '3', '4')) {
 +        my @outfile=getpart("verify", "file".$partsuffix);
 +        if(@outfile || partexists("verify", "file".$partsuffix) ) {
 +            # we're supposed to verify a dynamically generated file!
 +            my %hash = getpartattr("verify", "file".$partsuffix);
 +
 +            my $filename=$hash{'name'};
 +            if(!$filename) {
 +                logmsg "ERROR: section verify=>file$partsuffix ".
 +                       "has no name attribute\n";
 +                stopservers($verbose);
 +                # timestamp test result verification end
 +                $timevrfyend{$testnum} = Time::HiRes::time();
 +                return -1;
 +            }
 +            my @generated=loadarray($filename);
 +
 +            # what parts to cut off from the file
 +            my @stripfile = getpart("verify", "stripfile".$partsuffix);
 +
 +            my $filemode=$hash{'mode'};
 +            if($filemode && ($filemode eq "text") && $has_textaware) {
 +                # text mode when running on windows: fix line endings
 +                map s/\r\n/\n/g, @outfile;
 +                map s/\n/\r\n/g, @outfile;
 +            }
 +
 +            my $strip;
 +            for $strip (@stripfile) {
 +                chomp $strip;
 +                my @newgen;
 +                for(@generated) {
 +                    eval $strip;
 +                    if($_) {
 +                        push @newgen, $_;
 +                    }
 +                }
 +                # this is to get rid of array entries that vanished (zero
 +                # length) because of replacements
 +                @generated = @newgen;
 +            }
 +
 +            @outfile = fixarray(@outfile);
 +
 +            $res = compare($testnum, $testname, "output ($filename)",
 +                           \@generated, \@outfile);
 +            if($res) {
 +                return $errorreturncode;
 +            }
 +
 +            $outputok = 1; # output checked
 +        }
 +    }
 +    $ok .= ($outputok) ? "o" : "-"; # output checked or not
 +
 +    # accept multiple comma-separated error codes
 +    my @splerr = split(/ *, */, $errorcode);
 +    my $errok;
 +    foreach my $e (@splerr) {
 +        if($e == $cmdres) {
 +            # a fine error code
 +            $errok = 1;
 +            last;
 +        }
 +    }
 +
 +    if($errok) {
 +        $ok .= "e";
 +    }
 +    else {
 +        if(!$short) {
 +            logmsg sprintf("\n%s returned $cmdres, when expecting %s\n",
 +                           (!$tool)?"curl":$tool, $errorcode);
 +        }
 +        logmsg " exit FAILED\n";
 +        # timestamp test result verification end
 +        $timevrfyend{$testnum} = Time::HiRes::time();
 +        return $errorreturncode;
 +    }
 +
 +    if($has_memory_tracking) {
 +        if(! -f $memdump) {
 +            logmsg "\n** ALERT! memory tracking with no output file?\n"
 +                if(!$cmdtype eq "perl");
 +        }
 +        else {
 +            my @memdata=`$memanalyze $memdump`;
 +            my $leak=0;
 +            for(@memdata) {
 +                if($_ ne "") {
 +                    # well it could be other memory problems as well, but
 +                    # we call it leak for short here
 +                    $leak=1;
 +                }
 +            }
 +            if($leak) {
 +                logmsg "\n** MEMORY FAILURE\n";
 +                logmsg @memdata;
 +                # timestamp test result verification end
 +                $timevrfyend{$testnum} = Time::HiRes::time();
 +                return $errorreturncode;
 +            }
 +            else {
 +                $ok .= "m";
 +            }
 +        }
 +    }
 +    else {
 +        $ok .= "-"; # memory not checked
 +    }
 +
 +    if($valgrind) {
 +        if($usevalgrind) {
 +            unless(opendir(DIR, "$LOGDIR")) {
 +                logmsg "ERROR: unable to read $LOGDIR\n";
 +                # timestamp test result verification end
 +                $timevrfyend{$testnum} = Time::HiRes::time();
 +                return $errorreturncode;
 +            }
 +            my @files = readdir(DIR);
 +            closedir(DIR);
 +            my $vgfile;
 +            foreach my $file (@files) {
 +                if($file =~ /^valgrind$testnum(\..*|)$/) {
 +                    $vgfile = $file;
 +                    last;
 +                }
 +            }
 +            if(!$vgfile) {
 +                logmsg "ERROR: valgrind log file missing for test $testnum\n";
 +                # timestamp test result verification end
 +                $timevrfyend{$testnum} = Time::HiRes::time();
 +                return $errorreturncode;
 +            }
 +            my @e = valgrindparse("$LOGDIR/$vgfile");
 +            if(@e && $e[0]) {
 +                if($automakestyle) {
 +                    logmsg "FAIL: $testnum - $testname - valgrind\n";
 +                }
 +                else {
 +                    logmsg " valgrind ERROR ";
 +                    logmsg @e;
 +                }
 +                # timestamp test result verification end
 +                $timevrfyend{$testnum} = Time::HiRes::time();
 +                return $errorreturncode;
 +            }
 +            $ok .= "v";
 +        }
 +        else {
 +            if($verbose && !$disablevalgrind) {
 +                logmsg " valgrind SKIPPED\n";
 +            }
 +            $ok .= "-"; # skipped
 +        }
 +    }
 +    else {
 +        $ok .= "-"; # valgrind not checked
 +    }
 +    # add 'E' for event-based
 +    $ok .= $evbased ? "E" : "-";
 +
 +    logmsg "$ok " if(!$short);
 +
 +    # timestamp test result verification end
 +    $timevrfyend{$testnum} = Time::HiRes::time();
 +
 +    my $sofar= time()-$start;
 +    my $esttotal = $sofar/$count * $total;
 +    my $estleft = $esttotal - $sofar;
 +    my $left=sprintf("remaining: %02d:%02d",
 +                     $estleft/60,
 +                     $estleft%60);
 +    my $took = $timevrfyend{$testnum} - $timeprepini{$testnum};
 +    my $duration = sprintf("duration: %02d:%02d",
 +                           $sofar/60, $sofar%60);
 +    if(!$automakestyle) {
 +        logmsg sprintf("OK (%-3d out of %-3d, %s, took %.3fs, %s)\n",
 +                       $count, $total, $left, $took, $duration);
 +    }
 +    else {
 +        logmsg "PASS: $testnum - $testname\n";
 +    }
 +
 +    if($errorreturncode==2) {
 +        logmsg "Warning: test$testnum result is ignored, but passed!\n";
 +    }
 +
 +    return 0;
 +}
 +
 +#######################################################################
 +# Stop all running test servers
 +#
 +sub stopservers {
 +    my $verbose = $_[0];
 +    #
 +    # kill sockfilter processes for all pingpong servers
 +    #
 +    killallsockfilters($verbose);
 +    #
 +    # kill all server pids from %run hash clearing them
 +    #
 +    my $pidlist;
 +    foreach my $server (keys %run) {
 +        if($run{$server}) {
 +            if($verbose) {
 +                my $prev = 0;
 +                my $pids = $run{$server};
 +                foreach my $pid (split(' ', $pids)) {
 +                    if($pid != $prev) {
 +                        logmsg sprintf("* kill pid for %s => %d\n",
 +                            $server, $pid);
 +                        $prev = $pid;
 +                    }
 +                }
 +            }
 +            $pidlist .= "$run{$server} ";
 +            $run{$server} = 0;
 +        }
 +        $runcert{$server} = 0 if($runcert{$server});
 +    }
 +    killpid($verbose, $pidlist);
 +    #
 +    # cleanup all server pid files
 +    #
 +    foreach my $server (keys %serverpidfile) {
 +        my $pidfile = $serverpidfile{$server};
 +        my $pid = processexists($pidfile);
 +        if($pid > 0) {
 +            logmsg "Warning: $server server unexpectedly alive\n";
 +            killpid($verbose, $pid);
 +        }
 +        unlink($pidfile) if(-f $pidfile);
 +    }
 +}
 +
 +#######################################################################
 +# startservers() starts all the named servers
 +#
 +# Returns: string with error reason or blank for success
 +#
 +sub startservers {
 +    my @what = @_;
 +    my ($pid, $pid2);
 +    for(@what) {
 +        my (@whatlist) = split(/\s+/,$_);
 +        my $what = lc($whatlist[0]);
 +        $what =~ s/[^a-z0-9\/-]//g;
 +
 +        my $certfile;
 +        if($what =~ /^(ftp|http|imap|pop3|smtp)s((\d*)(-ipv6|-unix|))$/) {
 +            $certfile = ($whatlist[1]) ? $whatlist[1] : 'stunnel.pem';
 +        }
 +
 +        if(($what eq "pop3") ||
 +           ($what eq "ftp") ||
 +           ($what eq "imap") ||
 +           ($what eq "smtp")) {
 +            if($torture && $run{$what} &&
 +               !responsive_pingpong_server($what, "", $verbose)) {
 +                stopserver($what);
 +            }
 +            if(!$run{$what}) {
 +                ($pid, $pid2) = runpingpongserver($what, "", $verbose);
 +                if($pid <= 0) {
 +                    return "failed starting ". uc($what) ." server";
 +                }
 +                printf ("* pid $what => %d %d\n", $pid, $pid2) if($verbose);
 +                $run{$what}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "ftp-ipv6") {
 +            if($torture && $run{'ftp-ipv6'} &&
 +               !responsive_pingpong_server("ftp", "", $verbose, "ipv6")) {
 +                stopserver('ftp-ipv6');
 +            }
 +            if(!$run{'ftp-ipv6'}) {
 +                ($pid, $pid2) = runpingpongserver("ftp", "", $verbose, 
"ipv6");
 +                if($pid <= 0) {
 +                    return "failed starting FTP-IPv6 server";
 +                }
 +                logmsg sprintf("* pid ftp-ipv6 => %d %d\n", $pid,
 +                       $pid2) if($verbose);
 +                $run{'ftp-ipv6'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "gopher") {
 +            if($torture && $run{'gopher'} &&
 +               !responsive_http_server("gopher", $verbose, 0, $GOPHERPORT)) {
 +                stopserver('gopher');
 +            }
 +            if(!$run{'gopher'}) {
 +                ($pid, $pid2, $GOPHERPORT) =
 +                    runhttpserver("gopher", $verbose, 0);
 +                if($pid <= 0) {
 +                    return "failed starting GOPHER server";
 +                }
 +                logmsg sprintf ("* pid gopher => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'gopher'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "gopher-ipv6") {
 +            if($torture && $run{'gopher-ipv6'} &&
 +               !responsive_http_server("gopher", $verbose, "ipv6",
 +                                       $GOPHER6PORT)) {
 +                stopserver('gopher-ipv6');
 +            }
 +            if(!$run{'gopher-ipv6'}) {
 +                ($pid, $pid2, $GOPHER6PORT) =
 +                    runhttpserver("gopher", $verbose, "ipv6");
 +                if($pid <= 0) {
 +                    return "failed starting GOPHER-IPv6 server";
 +                }
 +                logmsg sprintf("* pid gopher-ipv6 => %d %d\n", $pid,
 +                               $pid2) if($verbose);
 +                $run{'gopher-ipv6'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "http/2") {
 +            if(!$run{'http/2'}) {
 +                ($pid, $pid2, $HTTP2PORT) = runhttp2server($verbose);
 +                if($pid <= 0) {
 +                    return "failed starting HTTP/2 server";
 +                }
 +                logmsg sprintf ("* pid http/2 => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'http/2'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "http") {
 +            if($torture && $run{'http'} &&
 +               !responsive_http_server("http", $verbose, 0, $HTTPPORT)) {
 +                stopserver('http');
 +            }
 +            if(!$run{'http'}) {
 +                ($pid, $pid2, $HTTPPORT) =
 +                    runhttpserver("http", $verbose, 0);
 +                if($pid <= 0) {
 +                    return "failed starting HTTP server";
 +                }
 +                logmsg sprintf ("* pid http => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'http'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "http-proxy") {
 +            if($torture && $run{'http-proxy'} &&
 +               !responsive_http_server("http", $verbose, "proxy",
 +                                       $HTTPPROXYPORT)) {
 +                stopserver('http-proxy');
 +            }
 +            if(!$run{'http-proxy'}) {
 +                ($pid, $pid2, $HTTPPROXYPORT) =
 +                    runhttpserver("http", $verbose, "proxy");
 +                if($pid <= 0) {
 +                    return "failed starting HTTP-proxy server";
 +                }
 +                logmsg sprintf ("* pid http-proxy => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'http-proxy'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "http-ipv6") {
 +            if($torture && $run{'http-ipv6'} &&
 +               !responsive_http_server("http", $verbose, "ipv6", $HTTP6PORT)) 
{
 +                stopserver('http-ipv6');
 +            }
 +            if(!$run{'http-ipv6'}) {
 +                ($pid, $pid2, $HTTP6PORT) =
 +                    runhttpserver("http", $verbose, "ipv6");
 +                if($pid <= 0) {
 +                    return "failed starting HTTP-IPv6 server";
 +                }
 +                logmsg sprintf("* pid http-ipv6 => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'http-ipv6'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "rtsp") {
 +            if($torture && $run{'rtsp'} &&
 +               !responsive_rtsp_server($verbose)) {
 +                stopserver('rtsp');
 +            }
 +            if(!$run{'rtsp'}) {
 +                ($pid, $pid2, $RTSPPORT) = runrtspserver($verbose);
 +                if($pid <= 0) {
 +                    return "failed starting RTSP server";
 +                }
 +                printf ("* pid rtsp => %d %d\n", $pid, $pid2) if($verbose);
 +                $run{'rtsp'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "rtsp-ipv6") {
 +            if($torture && $run{'rtsp-ipv6'} &&
 +               !responsive_rtsp_server($verbose, "ipv6")) {
 +                stopserver('rtsp-ipv6');
 +            }
 +            if(!$run{'rtsp-ipv6'}) {
 +                ($pid, $pid2, $RTSP6PORT) = runrtspserver($verbose, "ipv6");
 +                if($pid <= 0) {
 +                    return "failed starting RTSP-IPv6 server";
 +                }
 +                logmsg sprintf("* pid rtsp-ipv6 => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'rtsp-ipv6'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "ftps") {
 +            if(!$stunnel) {
 +                # we can't run ftps tests without stunnel
 +                return "no stunnel";
 +            }
 +            if($runcert{'ftps'} && ($runcert{'ftps'} ne $certfile)) {
 +                # stop server when running and using a different cert
 +                stopserver('ftps');
 +            }
 +            if($torture && $run{'ftp'} &&
 +               !responsive_pingpong_server("ftp", "", $verbose)) {
 +                stopserver('ftp');
 +            }
 +            if(!$run{'ftp'}) {
 +                ($pid, $pid2) = runpingpongserver("ftp", "", $verbose);
 +                if($pid <= 0) {
 +                    return "failed starting FTP server";
 +                }
 +                printf ("* pid ftp => %d %d\n", $pid, $pid2) if($verbose);
 +                $run{'ftp'}="$pid $pid2";
 +            }
 +            if(!$run{'ftps'}) {
 +                ($pid, $pid2, $FTPSPORT) =
 +                    runftpsserver($verbose, "", $certfile);
 +                if($pid <= 0) {
 +                    return "failed starting FTPS server (stunnel)";
 +                }
 +                logmsg sprintf("* pid ftps => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'ftps'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "file") {
 +            # we support it but have no server!
 +        }
 +        elsif($what eq "https") {
 +            if(!$stunnel) {
 +                # we can't run https tests without stunnel
 +                return "no stunnel";
 +            }
 +            if($runcert{'https'} && ($runcert{'https'} ne $certfile)) {
 +                # stop server when running and using a different cert
 +                stopserver('https');
 +            }
 +            if($torture && $run{'http'} &&
 +               !responsive_http_server("http", $verbose, 0, $HTTPPORT)) {
 +                stopserver('http');
 +            }
 +            if(!$run{'http'}) {
 +                ($pid, $pid2, $HTTPPORT) =
 +                    runhttpserver("http", $verbose, 0);
 +                if($pid <= 0) {
 +                    return "failed starting HTTP server";
 +                }
 +                printf ("* pid http => %d %d\n", $pid, $pid2) if($verbose);
 +                $run{'http'}="$pid $pid2";
 +            }
 +            if(!$run{'https'}) {
 +                ($pid, $pid2, $HTTPSPORT) =
 +                    runhttpsserver($verbose, "", "", $certfile);
 +                if($pid <= 0) {
 +                    return "failed starting HTTPS server (stunnel)";
 +                }
 +                logmsg sprintf("* pid https => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'https'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "https-proxy") {
 +            if(!$stunnel) {
 +                # we can't run https-proxy tests without stunnel
 +                return "no stunnel";
 +            }
 +            if($runcert{'https-proxy'} &&
 +               ($runcert{'https-proxy'} ne $certfile)) {
 +                # stop server when running and using a different cert
 +                stopserver('https-proxy');
 +            }
 +
 +            # we front the http-proxy with stunnel so we need to make sure the
 +            # proxy runs as well
 +            my $f = startservers("http-proxy");
 +            if($f) {
 +                return $f;1
 +            }
 +
 +            if(!$run{'https-proxy'}) {
 +                ($pid, $pid2, $HTTPSPROXYPORT) =
 +                    runhttpsserver($verbose, "", "proxy", $certfile);
 +                if($pid <= 0) {
 +                    return "failed starting HTTPS-proxy (stunnel)";
 +                }
 +                logmsg sprintf("* pid https-proxy => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'https-proxy'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "httptls") {
 +            if(!$httptlssrv) {
 +                # for now, we can't run http TLS-EXT tests without gnutls-serv
 +                return "no gnutls-serv";
 +            }
 +            if($torture && $run{'httptls'} &&
 +               !responsive_httptls_server($verbose, "IPv4")) {
 +                stopserver('httptls');
 +            }
 +            if(!$run{'httptls'}) {
 +                ($pid, $pid2, $HTTPTLSPORT) =
 +                    runhttptlsserver($verbose, "IPv4");
 +                if($pid <= 0) {
 +                    return "failed starting HTTPTLS server (gnutls-serv)";
 +                }
 +                logmsg sprintf("* pid httptls => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'httptls'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "httptls-ipv6") {
 +            if(!$httptlssrv) {
 +                # for now, we can't run http TLS-EXT tests without gnutls-serv
 +                return "no gnutls-serv";
 +            }
 +            if($torture && $run{'httptls-ipv6'} &&
 +               !responsive_httptls_server($verbose, "ipv6")) {
 +                stopserver('httptls-ipv6');
 +            }
 +            if(!$run{'httptls-ipv6'}) {
 +                ($pid, $pid2, $HTTPTLS6PORT) =
 +                    runhttptlsserver($verbose, "ipv6");
 +                if($pid <= 0) {
 +                    return "failed starting HTTPTLS-IPv6 server 
(gnutls-serv)";
 +                }
 +                logmsg sprintf("* pid httptls-ipv6 => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'httptls-ipv6'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "tftp") {
 +            if($torture && $run{'tftp'} &&
 +               !responsive_tftp_server("", $verbose)) {
 +                stopserver('tftp');
 +            }
 +            if(!$run{'tftp'}) {
 +                ($pid, $pid2, $TFTPPORT) =
 +                    runtftpserver("", $verbose);
 +                if($pid <= 0) {
 +                    return "failed starting TFTP server";
 +                }
 +                printf ("* pid tftp => %d %d\n", $pid, $pid2) if($verbose);
 +                $run{'tftp'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "tftp-ipv6") {
 +            if($torture && $run{'tftp-ipv6'} &&
 +               !responsive_tftp_server("", $verbose, "ipv6")) {
 +                stopserver('tftp-ipv6');
 +            }
 +            if(!$run{'tftp-ipv6'}) {
 +                ($pid, $pid2, $TFTP6PORT) =
 +                    runtftpserver("", $verbose, "ipv6");
 +                if($pid <= 0) {
 +                    return "failed starting TFTP-IPv6 server";
 +                }
 +                printf("* pid tftp-ipv6 => %d %d\n", $pid, $pid2) 
if($verbose);
 +                $run{'tftp-ipv6'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "sftp" || $what eq "scp") {
 +            if(!$run{'ssh'}) {
 +                ($pid, $pid2, $SSHPORT) = runsshserver("", $verbose);
 +                if($pid <= 0) {
 +                    return "failed starting SSH server";
 +                }
 +                printf ("* pid ssh => %d %d\n", $pid, $pid2) if($verbose);
 +                $run{'ssh'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "socks4" || $what eq "socks5" ) {
 +            if(!$run{'socks'}) {
 +                ($pid, $pid2, $SOCKSPORT) = runsocksserver("", $verbose);
 +                if($pid <= 0) {
 +                    return "failed starting socks server";
 +                }
 +                printf ("* pid socks => %d %d\n", $pid, $pid2) if($verbose);
 +                $run{'socks'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "mqtt" ) {
 +            if(!$run{'mqtt'}) {
 +                ($pid, $pid2) = runmqttserver("", $verbose);
 +                if($pid <= 0) {
 +                    return "failed starting mqtt server";
 +                }
 +                printf ("* pid mqtt => %d %d\n", $pid, $pid2) if($verbose);
 +                $run{'mqtt'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "http-unix") {
 +            if($torture && $run{'http-unix'} &&
 +               !responsive_http_server("http", $verbose, "unix", 
$HTTPUNIXPATH)) {
 +                stopserver('http-unix');
 +            }
 +            if(!$run{'http-unix'}) {
 +                my $unused;
 +                ($pid, $pid2, $unused) =
 +                    runhttpserver("http", $verbose, "unix", $HTTPUNIXPATH);
 +                if($pid <= 0) {
 +                    return "failed starting HTTP-unix server";
 +                }
 +                logmsg sprintf("* pid http-unix => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'http-unix'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "dict") {
 +            if(!$run{'dict'}) {
 +                ($pid, $pid2, $DICTPORT) = rundictserver($verbose, "");
 +                if($pid <= 0) {
 +                    return "failed starting DICT server";
 +                }
 +                logmsg sprintf ("* pid DICT => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'dict'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "smb") {
 +            if(!$run{'smb'}) {
 +                ($pid, $pid2, $SMBPORT) = runsmbserver($verbose, "");
 +                if($pid <= 0) {
 +                    return "failed starting SMB server";
 +                }
 +                logmsg sprintf ("* pid SMB => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'dict'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "telnet") {
 +            if(!$run{'telnet'}) {
 +                ($pid, $pid2, $TELNETPORT) =
 +                    runnegtelnetserver($verbose, "");
 +                if($pid <= 0) {
 +                    return "failed starting neg TELNET server";
 +                }
 +                logmsg sprintf ("* pid neg TELNET => %d %d\n", $pid, $pid2)
 +                    if($verbose);
 +                $run{'dict'}="$pid $pid2";
 +            }
 +        }
 +        elsif($what eq "none") {
 +            logmsg "* starts no server\n" if ($verbose);
 +        }
 +        else {
 +            warn "we don't support a server for $what";
 +            return "no server for $what";
 +        }
 +    }
 +    return 0;
 +}
 +
 +##############################################################################
 +# This function makes sure the right set of server is running for the
 +# specified test case. This is a useful design when we run single tests as not
 +# all servers need to run then!
 +#
 +# Returns: a string, blank if everything is fine or a reason why it failed
 +#
 +sub serverfortest {
 +    my ($testnum)=@_;
 +
 +    my @what = getpart("client", "server");
 +
 +    if(!$what[0]) {
 +        warn "Test case $testnum has no server(s) specified";
 +        return "no server specified";
 +    }
 +
 +    for(my $i = scalar(@what) - 1; $i >= 0; $i--) {
 +        my $srvrline = $what[$i];
 +        chomp $srvrline if($srvrline);
 +        if($srvrline =~ /^(\S+)((\s*)(.*))/) {
 +            my $server = "${1}";
 +            my $lnrest = "${2}";
 +            my $tlsext;
 +            if($server =~ /^(httptls)(\+)(ext|srp)(\d*)(-ipv6|)$/) {
 +                $server = "${1}${4}${5}";
 +                $tlsext = uc("TLS-${3}");
 +            }
 +            if(! grep /^\Q$server\E$/, @protocols) {
 +                if(substr($server,0,5) ne "socks") {
 +                    if($tlsext) {
 +                        return "curl lacks $tlsext support";
 +                    }
 +                    else {
 +                        return "curl lacks $server server support";
 +                    }
 +                }
 +            }
 +            $what[$i] = "$server$lnrest" if($tlsext);
 +        }
 +    }
 +
 +    return &startservers(@what);
 +}
 +
 +#######################################################################
 +# runtimestats displays test-suite run time statistics
 +#
 +sub runtimestats {
 +    my $lasttest = $_[0];
 +
 +    return if(not $timestats);
 +
 +    logmsg "\nTest suite total running time breakdown per task...\n\n";
 +
 +    my @timesrvr;
 +    my @timeprep;
 +    my @timetool;
 +    my @timelock;
 +    my @timevrfy;
 +    my @timetest;
 +    my $timesrvrtot = 0.0;
 +    my $timepreptot = 0.0;
 +    my $timetooltot = 0.0;
 +    my $timelocktot = 0.0;
 +    my $timevrfytot = 0.0;
 +    my $timetesttot = 0.0;
 +    my $counter;
 +
 +    for my $testnum (1 .. $lasttest) {
 +        if($timesrvrini{$testnum}) {
 +            $timesrvrtot += $timesrvrend{$testnum} - $timesrvrini{$testnum};
 +            $timepreptot +=
 +                (($timetoolini{$testnum} - $timeprepini{$testnum}) -
 +                 ($timesrvrend{$testnum} - $timesrvrini{$testnum}));
 +            $timetooltot += $timetoolend{$testnum} - $timetoolini{$testnum};
 +            $timelocktot += $timesrvrlog{$testnum} - $timetoolend{$testnum};
 +            $timevrfytot += $timevrfyend{$testnum} - $timesrvrlog{$testnum};
 +            $timetesttot += $timevrfyend{$testnum} - $timeprepini{$testnum};
 +            push @timesrvr, sprintf("%06.3f  %04d",
 +                $timesrvrend{$testnum} - $timesrvrini{$testnum}, $testnum);
 +            push @timeprep, sprintf("%06.3f  %04d",
 +                ($timetoolini{$testnum} - $timeprepini{$testnum}) -
 +                ($timesrvrend{$testnum} - $timesrvrini{$testnum}), $testnum);
 +            push @timetool, sprintf("%06.3f  %04d",
 +                $timetoolend{$testnum} - $timetoolini{$testnum}, $testnum);
 +            push @timelock, sprintf("%06.3f  %04d",
 +                $timesrvrlog{$testnum} - $timetoolend{$testnum}, $testnum);
 +            push @timevrfy, sprintf("%06.3f  %04d",
 +                $timevrfyend{$testnum} - $timesrvrlog{$testnum}, $testnum);
 +            push @timetest, sprintf("%06.3f  %04d",
 +                $timevrfyend{$testnum} - $timeprepini{$testnum}, $testnum);
 +        }
 +    }
 +
 +    {
 +        no warnings 'numeric';
 +        @timesrvr = sort { $b <=> $a } @timesrvr;
 +        @timeprep = sort { $b <=> $a } @timeprep;
 +        @timetool = sort { $b <=> $a } @timetool;
 +        @timelock = sort { $b <=> $a } @timelock;
 +        @timevrfy = sort { $b <=> $a } @timevrfy;
 +        @timetest = sort { $b <=> $a } @timetest;
 +    }
 +
 +    logmsg "Spent ". sprintf("%08.3f ", $timesrvrtot) .
 +           "seconds starting and verifying test harness servers.\n";
 +    logmsg "Spent ". sprintf("%08.3f ", $timepreptot) .
 +           "seconds reading definitions and doing test preparations.\n";
 +    logmsg "Spent ". sprintf("%08.3f ", $timetooltot) .
 +           "seconds actually running test tools.\n";
 +    logmsg "Spent ". sprintf("%08.3f ", $timelocktot) .
 +           "seconds awaiting server logs lock removal.\n";
 +    logmsg "Spent ". sprintf("%08.3f ", $timevrfytot) .
 +           "seconds verifying test results.\n";
 +    logmsg "Spent ". sprintf("%08.3f ", $timetesttot) .
 +           "seconds doing all of the above.\n";
 +
 +    $counter = 25;
 +    logmsg "\nTest server starting and verification time per test ".
 +        sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
 +    logmsg "-time-  test\n";
 +    logmsg "------  ----\n";
 +    foreach my $txt (@timesrvr) {
 +        last if((not $fullstats) && (not $counter--));
 +        logmsg "$txt\n";
 +    }
 +
 +    $counter = 10;
 +    logmsg "\nTest definition reading and preparation time per test ".
 +        sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
 +    logmsg "-time-  test\n";
 +    logmsg "------  ----\n";
 +    foreach my $txt (@timeprep) {
 +        last if((not $fullstats) && (not $counter--));
 +        logmsg "$txt\n";
 +    }
 +
 +    $counter = 25;
 +    logmsg "\nTest tool execution time per test ".
 +        sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
 +    logmsg "-time-  test\n";
 +    logmsg "------  ----\n";
 +    foreach my $txt (@timetool) {
 +        last if((not $fullstats) && (not $counter--));
 +        logmsg "$txt\n";
 +    }
 +
 +    $counter = 15;
 +    logmsg "\nTest server logs lock removal time per test ".
 +        sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
 +    logmsg "-time-  test\n";
 +    logmsg "------  ----\n";
 +    foreach my $txt (@timelock) {
 +        last if((not $fullstats) && (not $counter--));
 +        logmsg "$txt\n";
 +    }
 +
 +    $counter = 10;
 +    logmsg "\nTest results verification time per test ".
 +        sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
 +    logmsg "-time-  test\n";
 +    logmsg "------  ----\n";
 +    foreach my $txt (@timevrfy) {
 +        last if((not $fullstats) && (not $counter--));
 +        logmsg "$txt\n";
 +    }
 +
 +    $counter = 50;
 +    logmsg "\nTotal time per test ".
 +        sprintf("(%s)...\n\n", (not $fullstats)?"top $counter":"full");
 +    logmsg "-time-  test\n";
 +    logmsg "------  ----\n";
 +    foreach my $txt (@timetest) {
 +        last if((not $fullstats) && (not $counter--));
 +        logmsg "$txt\n";
 +    }
 +
 +    logmsg "\n";
 +}
 +
 +# globally disabled tests
 +disabledtests("$TESTDIR/DISABLED");
 +
 +# locally disabled tests, ignored by git etc
 +disabledtests("$TESTDIR/DISABLED.local");
 +
 +#######################################################################
 +# Check options to this test program
 +#
 +
- # Special case for CMake: replace '${TFLAGS}' by the contents of the
++# Special case for CMake: replace '$TFLAGS' by the contents of the
 +# environment variable (if any).
- if(@ARGV && $ARGV[-1] eq '${TFLAGS}') {
++if(@ARGV && $ARGV[-1] eq '$TFLAGS') {
 +    pop @ARGV;
 +    push(@ARGV, split(' ', $ENV{'TFLAGS'})) if defined($ENV{'TFLAGS'});
 +}
 +
 +my $number=0;
 +my $fromnum=-1;
 +my @testthis;
 +while(@ARGV) {
 +    if ($ARGV[0] eq "-v") {
 +        # verbose output
 +        $verbose=1;
 +    }
 +    elsif ($ARGV[0] eq "-c") {
 +        # use this path to curl instead of default
 +        $DBGCURL=$CURL="\"$ARGV[1]\"";
 +        shift @ARGV;
 +    }
 +    elsif ($ARGV[0] eq "-vc") {
 +        # use this path to a curl used to verify servers
 +
 +        # Particularly useful when you introduce a crashing bug somewhere in
 +        # the development version as then it won't be able to run any tests
 +        # since it can't verify the servers!
 +
 +        $VCURL="\"$ARGV[1]\"";
 +        shift @ARGV;
 +    }
 +    elsif ($ARGV[0] eq "-d") {
 +        # have the servers display protocol output
 +        $debugprotocol=1;
 +    }
 +    elsif($ARGV[0] eq "-e") {
 +        # run the tests cases event based if possible
 +        $run_event_based=1;
 +    }
 +    elsif ($ARGV[0] eq "-g") {
 +        # run this test with gdb
 +        $gdbthis=1;
 +    }
 +    elsif ($ARGV[0] eq "-gw") {
 +        # run this test with windowed gdb
 +        $gdbthis=1;
 +        $gdbxwin=1;
 +    }
 +    elsif($ARGV[0] eq "-s") {
 +        # short output
 +        $short=1;
 +    }
 +    elsif($ARGV[0] eq "-am") {
 +        # automake-style output
 +        $short=1;
 +        $automakestyle=1;
 +    }
 +    elsif($ARGV[0] eq "-n") {
 +        # no valgrind
 +        undef $valgrind;
 +    }
 +    elsif ($ARGV[0] eq "-R") {
 +        # execute in scrambled order
 +        $scrambleorder=1;
 +    }
 +    elsif($ARGV[0] =~ /^-t(.*)/) {
 +        # torture
 +        $torture=1;
 +        my $xtra = $1;
 +
 +        if($xtra =~ s/(\d+)$//) {
 +            $tortalloc = $1;
 +        }
 +    }
 +    elsif($ARGV[0] =~ /--shallow=(\d+)/) {
 +        # Fail no more than this amount per tests when running
 +        # torture.
 +        my ($num)=($1);
 +        $shallow=$num;
 +    }
 +    elsif($ARGV[0] =~ /--repeat=(\d+)/) {
 +        # Repeat-run the given tests this many times
 +        $repeat = $1;
 +    }
 +    elsif($ARGV[0] =~ /--seed=(\d+)/) {
 +        # Set a fixed random seed (used for -R and --shallow)
 +        $randseed = $1;
 +    }
 +    elsif($ARGV[0] eq "-a") {
 +        # continue anyway, even if a test fail
 +        $anyway=1;
 +    }
 +    elsif($ARGV[0] eq "-p") {
 +        $postmortem=1;
 +    }
 +    elsif($ARGV[0] eq "-l") {
 +        # lists the test case names only
 +        $listonly=1;
 +    }
 +    elsif($ARGV[0] eq "-k") {
 +        # keep stdout and stderr files after tests
 +        $keepoutfiles=1;
 +    }
 +    elsif($ARGV[0] eq "-r") {
 +        # run time statistics needs Time::HiRes
 +        if($Time::HiRes::VERSION) {
 +            keys(%timeprepini) = 1000;
 +            keys(%timesrvrini) = 1000;
 +            keys(%timesrvrend) = 1000;
 +            keys(%timetoolini) = 1000;
 +            keys(%timetoolend) = 1000;
 +            keys(%timesrvrlog) = 1000;
 +            keys(%timevrfyend) = 1000;
 +            $timestats=1;
 +            $fullstats=0;
 +        }
 +    }
 +    elsif($ARGV[0] eq "-rf") {
 +        # run time statistics needs Time::HiRes
 +        if($Time::HiRes::VERSION) {
 +            keys(%timeprepini) = 1000;
 +            keys(%timesrvrini) = 1000;
 +            keys(%timesrvrend) = 1000;
 +            keys(%timetoolini) = 1000;
 +            keys(%timetoolend) = 1000;
 +            keys(%timesrvrlog) = 1000;
 +            keys(%timevrfyend) = 1000;
 +            $timestats=1;
 +            $fullstats=1;
 +        }
 +    }
 +    elsif(($ARGV[0] eq "-h") || ($ARGV[0] eq "--help")) {
 +        # show help text
 +        print <<EOHELP
 +Usage: runtests.pl [options] [test selection(s)]
 +  -a       continue even if a test fails
 +  -am      automake style output PASS/FAIL: [number] [name]
 +  -c path  use this curl executable
 +  -d       display server debug info
 +  -e       event-based execution
 +  -g       run the test case with gdb
 +  -gw      run the test case with gdb as a windowed application
 +  -h       this help text
 +  -k       keep stdout and stderr files present after tests
 +  -l       list all test case names/descriptions
 +  -n       no valgrind
 +  -p       print log file contents when a test fails
 +  -R       scrambled order (uses the random seed, see --seed)
 +  -r       run time statistics
 +  -rf      full run time statistics
 +  -s       short output
 +  --seed=[num] set the random seed to a fixed number
 +  --shallow=[num] randomly makes the torture tests "thinner"
 +  -t[N]    torture (simulate function failures); N means fail Nth function
 +  -v       verbose output
 +  -vc path use this curl only to verify the existing servers
 +  [num]    like "5 6 9" or " 5 to 22 " to run those tests only
 +  [!num]   like "!5 !6 !9" to disable those tests
 +  [~num]   like "~5 ~6 ~9" to ignore the result of those tests
 +  [keyword] like "IPv6" to select only tests containing the key word
 +  [!keyword] like "!cookies" to disable any tests containing the key word
 +  [~keyword] like "~cookies" to ignore results of tests containing key word
 +EOHELP
 +    ;
 +        exit;
 +    }
 +    elsif($ARGV[0] =~ /^(\d+)/) {
 +        $number = $1;
 +        if($fromnum >= 0) {
 +            for my $n ($fromnum .. $number) {
 +                if($disabled{$n}) {
 +                    # skip disabled test cases
 +                    my $why = "configured as DISABLED";
 +                    $skipped++;
 +                    $skipped{$why}++;
 +                    $teststat[$n]=$why; # store reason for this test case
 +                }
 +                else {
 +                    push @testthis, $n;
 +                }
 +            }
 +            $fromnum = -1;
 +        }
 +        else {
 +            push @testthis, $1;
 +        }
 +    }
 +    elsif($ARGV[0] =~ /^to$/i) {
 +        $fromnum = $number+1;
 +    }
 +    elsif($ARGV[0] =~ /^!(\d+)/) {
 +        $fromnum = -1;
 +        $disabled{$1}=$1;
 +    }
 +    elsif($ARGV[0] =~ /^~(\d+)/) {
 +        $fromnum = -1;
 +        $ignored{$1}=$1;
 +    }
 +    elsif($ARGV[0] =~ /^!(.+)/) {
 +        $disabled_keywords{lc($1)}=$1;
 +    }
 +    elsif($ARGV[0] =~ /^~(.+)/) {
 +        $ignored_keywords{lc($1)}=$1;
 +    }
 +    elsif($ARGV[0] =~ /^([-[{a-zA-Z].*)/) {
 +        $enabled_keywords{lc($1)}=$1;
 +    }
 +    else {
 +        print "Unknown option: $ARGV[0]\n";
 +        exit;
 +    }
 +    shift @ARGV;
 +}
 +
 +if(!$randseed) {
 +    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =
 +        localtime(time);
 +    # seed of the month. December 2019 becomes 201912
 +    $randseed = ($year+1900)*100 + $mon+1;
 +    open(C, "$CURL --version 2>/dev/null|");
 +    my @c = <C>;
 +    close(C);
 +    # use the first line of output and get the md5 out of it
 +    my $str = md5($c[0]);
 +    $randseed += unpack('S', $str);  # unsigned 16 bit value
 +}
 +srand $randseed;
 +
 +if(@testthis && ($testthis[0] ne "")) {
 +    $TESTCASES=join(" ", @testthis);
 +}
 +
 +if($valgrind) {
 +    # we have found valgrind on the host, use it
 +
 +    # verify that we can invoke it fine
 +    my $code = runclient("valgrind >/dev/null 2>&1");
 +
 +    if(($code>>8) != 1) {
 +        #logmsg "Valgrind failure, disable it\n";
 +        undef $valgrind;
 +    } else {
 +
 +        # since valgrind 2.1.x, '--tool' option is mandatory
 +        # use it, if it is supported by the version installed on the system
 +        runclient("valgrind --help 2>&1 | grep -- --tool > /dev/null 2>&1");
 +        if (($? >> 8)==0) {
 +            $valgrind_tool="--tool=memcheck";
 +        }
 +        open(C, "<$CURL");
 +        my $l = <C>;
 +        if($l =~ /^\#\!/) {
 +            # A shell script. This is typically when built with libtool,
 +            $valgrind="../libtool --mode=execute $valgrind";
 +        }
 +        close(C);
 +
 +        # valgrind 3 renamed the --logfile option to --log-file!!!
 +        my $ver=join(' ', runclientoutput("valgrind --version"));
 +        # cut off all but digits and dots
 +        $ver =~ s/[^0-9.]//g;
 +
 +        if($ver =~ /^(\d+)/) {
 +            $ver = $1;
 +            if($ver >= 3) {
 +                $valgrind_logfile="--log-file";
 +            }
 +        }
 +    }
 +}
 +
 +if ($gdbthis) {
 +    # open the executable curl and read the first 4 bytes of it
 +    open(CHECK, "<$CURL");
 +    my $c;
 +    sysread CHECK, $c, 4;
 +    close(CHECK);
 +    if($c eq "#! /") {
 +        # A shell script. This is typically when built with libtool,
 +        $libtool = 1;
 +        $gdb = "../libtool --mode=execute gdb";
 +    }
 +}
 +
 +$HTTPUNIXPATH    = "http$$.sock"; # HTTP server Unix domain socket path
 +
 +#######################################################################
 +# clear and create logging directory:
 +#
 +
 +cleardir($LOGDIR);
 +mkdir($LOGDIR, 0777);
 +
 +#######################################################################
 +# initialize some variables
 +#
 +
 +get_disttests();
 +init_serverpidfile_hash();
 +
 +#######################################################################
 +# Output curl version and host info being tested
 +#
 +
 +if(!$listonly) {
 +    checksystem();
 +}
 +
 +#######################################################################
 +# Fetch all disabled tests, if there are any
 +#
 +
 +sub disabledtests {
 +    my ($file) = @_;
 +
 +    if(open(D, "<$file")) {
 +        while(<D>) {
 +            if(/^ *\#/) {
 +                # allow comments
 +                next;
 +            }
 +            if($_ =~ /(\d+)/) {
 +                my ($n) = $1;
 +                $disabled{$n}=$n; # disable this test number
 +                if(! -f "$srcdir/data/test$n") {
 +                    print STDERR "WARNING! Non-existing test $n in 
DISABLED!\n";
 +                    # fail hard to make user notice
 +                    exit 1;
 +                }
 +            }
 +        }
 +        close(D);
 +    }
 +}
 +
 +#######################################################################
 +# If 'all' tests are requested, find out all test numbers
 +#
 +
 +if ( $TESTCASES eq "all") {
 +    # Get all commands and find out their test numbers
 +    opendir(DIR, $TESTDIR) || die "can't opendir $TESTDIR: $!";
 +    my @cmds = grep { /^test([0-9]+)$/ && -f "$TESTDIR/$_" } readdir(DIR);
 +    closedir(DIR);
 +
 +    $TESTCASES=""; # start with no test cases
 +
 +    # cut off everything but the digits
 +    for(@cmds) {
 +        $_ =~ s/[a-z\/\.]*//g;
 +    }
 +    # sort the numbers from low to high
 +    foreach my $n (sort { $a <=> $b } @cmds) {
 +        if($disabled{$n}) {
 +            # skip disabled test cases
 +            my $why = "configured as DISABLED";
 +            $skipped++;
 +            $skipped{$why}++;
 +            $teststat[$n]=$why; # store reason for this test case
 +            next;
 +        }
 +        $TESTCASES .= " $n";
 +    }
 +}
 +else {
 +    my $verified="";
 +    map {
 +        if (-e "$TESTDIR/test$_") {
 +            $verified.="$_ ";
 +        }
 +    } split(" ", $TESTCASES);
 +    if($verified eq "") {
 +        print "No existing test cases were specified\n";
 +        exit;
 +    }
 +    $TESTCASES = $verified;
 +}
 +if($repeat) {
 +    my $s;
 +    for(1 .. $repeat) {
 +        $s .= $TESTCASES;
 +    }
 +    $TESTCASES = $s;
 +}
 +
 +if($scrambleorder) {
 +    # scramble the order of the test cases
 +    my @rand;
 +    while($TESTCASES) {
 +        my @all = split(/ +/, $TESTCASES);
 +        if(!$all[0]) {
 +            # if the first is blank, shift away it
 +            shift @all;
 +        }
 +        my $r = rand @all;
 +        push @rand, $all[$r];
 +        $all[$r]="";
 +        $TESTCASES = join(" ", @all);
 +    }
 +    $TESTCASES = join(" ", @rand);
 +}
 +
 +# Display the contents of the given file.  Line endings are canonicalized
 +# and excessively long files are elided
 +sub displaylogcontent {
 +    my ($file)=@_;
 +    if(open(SINGLE, "<$file")) {
 +        my $linecount = 0;
 +        my $truncate;
 +        my @tail;
 +        while(my $string = <SINGLE>) {
 +            $string =~ s/\r\n/\n/g;
 +            $string =~ s/[\r\f\032]/\n/g;
 +            $string .= "\n" unless ($string =~ /\n$/);
 +            $string =~ tr/\n//;
 +            for my $line (split("\n", $string)) {
 +                $line =~ s/\s*\!$//;
 +                if ($truncate) {
 +                    push @tail, " $line\n";
 +                } else {
 +                    logmsg " $line\n";
 +                }
 +                $linecount++;
 +                $truncate = $linecount > 1000;
 +            }
 +        }
 +        if(@tail) {
 +            my $tailshow = 200;
 +            my $tailskip = 0;
 +            my $tailtotal = scalar @tail;
 +            if($tailtotal > $tailshow) {
 +                $tailskip = $tailtotal - $tailshow;
 +                logmsg "=== File too long: $tailskip lines omitted here\n";
 +            }
 +            for($tailskip .. $tailtotal-1) {
 +                logmsg "$tail[$_]";
 +            }
 +        }
 +        close(SINGLE);
 +    }
 +}
 +
 +sub displaylogs {
 +    my ($testnum)=@_;
 +    opendir(DIR, "$LOGDIR") ||
 +        die "can't open dir: $!";
 +    my @logs = readdir(DIR);
 +    closedir(DIR);
 +
 +    logmsg "== Contents of files in the $LOGDIR/ dir after test $testnum\n";
 +    foreach my $log (sort @logs) {
 +        if($log =~ /\.(\.|)$/) {
 +            next; # skip "." and ".."
 +        }
 +        if($log =~ /^\.nfs/) {
 +            next; # skip ".nfs"
 +        }
 +        if(($log eq "memdump") || ($log eq "core")) {
 +            next; # skip "memdump" and  "core"
 +        }
 +        if((-d "$LOGDIR/$log") || (! -s "$LOGDIR/$log")) {
 +            next; # skip directory and empty files
 +        }
 +        if(($log =~ /^stdout\d+/) && ($log !~ /^stdout$testnum/)) {
 +            next; # skip stdoutNnn of other tests
 +        }
 +        if(($log =~ /^stderr\d+/) && ($log !~ /^stderr$testnum/)) {
 +            next; # skip stderrNnn of other tests
 +        }
 +        if(($log =~ /^upload\d+/) && ($log !~ /^upload$testnum/)) {
 +            next; # skip uploadNnn of other tests
 +        }
 +        if(($log =~ /^curl\d+\.out/) && ($log !~ /^curl$testnum\.out/)) {
 +            next; # skip curlNnn.out of other tests
 +        }
 +        if(($log =~ /^test\d+\.txt/) && ($log !~ /^test$testnum\.txt/)) {
 +            next; # skip testNnn.txt of other tests
 +        }
 +        if(($log =~ /^file\d+\.txt/) && ($log !~ /^file$testnum\.txt/)) {
 +            next; # skip fileNnn.txt of other tests
 +        }
 +        if(($log =~ /^netrc\d+/) && ($log !~ /^netrc$testnum/)) {
 +            next; # skip netrcNnn of other tests
 +        }
 +        if(($log =~ /^trace\d+/) && ($log !~ /^trace$testnum/)) {
 +            next; # skip traceNnn of other tests
 +        }
 +        if(($log =~ /^valgrind\d+/) && ($log !~ /^valgrind$testnum(\..*|)$/)) 
{
 +            next; # skip valgrindNnn of other tests
 +        }
 +        if(($log =~ /^test$testnum$/)) {
 +            next; # skip test$testnum since it can be very big
 +        }
 +        logmsg "=== Start of file $log\n";
 +        displaylogcontent("$LOGDIR/$log");
 +        logmsg "=== End of file $log\n";
 +    }
 +}
 +
 +#######################################################################
 +# Setup Azure Pipelines Test Run (if running in Azure DevOps)
 +#
 +
 +if(azure_check_environment()) {
-     $AZURE_RUN_ID = azure_create_test_run();
++    $AZURE_RUN_ID = azure_create_test_run($VCURL);
 +    logmsg "Azure Run ID: $AZURE_RUN_ID\n" if ($verbose);
 +}
 +
 +#######################################################################
 +# The main test-loop
 +#
 +
 +my $failed;
 +my $testnum;
 +my $ok=0;
 +my $ign=0;
 +my $total=0;
 +my $lasttest=0;
 +my @at = split(" ", $TESTCASES);
 +my $count=0;
 +
 +$start = time();
 +
 +foreach $testnum (@at) {
 +
 +    $lasttest = $testnum if($testnum > $lasttest);
 +    $count++;
 +
 +    my $error = singletest($run_event_based, $testnum, $count, scalar(@at));
 +
 +    # update test result in CI services
 +    if(azure_check_environment() && $AZURE_RUN_ID && $AZURE_RESULT_ID) {
-         $AZURE_RESULT_ID = azure_update_test_result($AZURE_RUN_ID, 
$AZURE_RESULT_ID, $testnum, $error,
++        $AZURE_RESULT_ID = azure_update_test_result($VCURL, $AZURE_RUN_ID, 
$AZURE_RESULT_ID, $testnum, $error,
 +                                                    $timeprepini{$testnum}, 
$timevrfyend{$testnum});
 +    }
 +    elsif(appveyor_check_environment()) {
-         appveyor_update_test_result($testnum, $error, $timeprepini{$testnum}, 
$timevrfyend{$testnum});
++        appveyor_update_test_result($VCURL, $testnum, $error, 
$timeprepini{$testnum}, $timevrfyend{$testnum});
 +    }
 +
 +    if($error < 0) {
 +        # not a test we can run
 +        next;
 +    }
 +
 +    $total++; # number of tests we've run
 +
 +    if($error>0) {
 +        if($error==2) {
 +            # ignored test failures are wrapped in ()
 +            $failed.= "($testnum) ";
 +        }
 +        else {
 +            $failed.= "$testnum ";
 +        }
 +        if($postmortem) {
 +            # display all files in log/ in a nice way
 +            displaylogs($testnum);
 +        }
 +        if($error==2) {
 +            $ign++; # ignored test result counter
 +        }
 +        elsif(!$anyway) {
 +            # a test failed, abort
 +            logmsg "\n - abort tests\n";
 +            last;
 +        }
 +    }
 +    elsif(!$error) {
 +        $ok++; # successful test counter
 +    }
 +
 +    # loop for next test
 +}
 +
 +my $sofar = time() - $start;
 +
 +#######################################################################
 +# Finish Azure Pipelines Test Run (if running in Azure DevOps)
 +#
 +
 +if(azure_check_environment() && $AZURE_RUN_ID) {
-     $AZURE_RUN_ID = azure_update_test_run($AZURE_RUN_ID);
++    $AZURE_RUN_ID = azure_update_test_run($VCURL, $AZURE_RUN_ID);
 +}
 +
 +# Tests done, stop the servers
 +stopservers($verbose);
 +
 +my $all = $total + $skipped;
 +
 +runtimestats($lasttest);
 +
 +if($total) {
 +    logmsg sprintf("TESTDONE: $ok tests out of $total reported OK: %d%%\n",
 +                   $ok/$total*100);
 +
 +    if($ok != $total) {
-         logmsg "TESTFAIL: These test cases failed: $failed\n";
++        logmsg "\nTESTFAIL: These test cases failed: $failed\n\n";
 +    }
 +}
 +else {
-     logmsg "TESTFAIL: No tests were performed\n";
++    logmsg "\nTESTFAIL: No tests were performed\n\n";
++    if(scalar(keys %enabled_keywords)) {
++        logmsg "TESTFAIL: Nothing matched these keywords: ";
++        for(keys %enabled_keywords) {
++            logmsg "$_ ";
++        }
++        logmsg "\n";
++    }
 +}
 +
 +if($all) {
 +    logmsg "TESTDONE: $all tests were considered during ".
 +        sprintf("%.0f", $sofar) ." seconds.\n";
 +}
 +
 +if($skipped && !$short) {
 +    my $s=0;
 +    logmsg "TESTINFO: $skipped tests were skipped due to these restraints:\n";
 +
 +    for(keys %skipped) {
 +        my $r = $_;
 +        printf "TESTINFO: \"%s\" %d times (", $r, $skipped{$_};
 +
 +        # now show all test case numbers that had this reason for being
 +        # skipped
 +        my $c=0;
 +        my $max = 9;
 +        for(0 .. scalar @teststat) {
 +            my $t = $_;
 +            if($teststat[$_] && ($teststat[$_] eq $r)) {
 +                if($c < $max) {
 +                    logmsg ", " if($c);
 +                    logmsg $_;
 +                }
 +                $c++;
 +            }
 +        }
 +        if($c > $max) {
 +            logmsg " and ".($c-$max)." more";
 +        }
 +        logmsg ")\n";
 +    }
 +}
 +
- if($total && (($ok+$ign) != $total)) {
++if(($total && (($ok+$ign) != $total)) || !$total) {
 +    exit 1;
 +}
diff --cc tests/secureserver.pl.in
index bf6fc079a,000000000..22bcdc242
mode 100755,000000..100755
--- a/tests/secureserver.pl.in
+++ b/tests/secureserver.pl.in
@@@ -1,364 -1,0 +1,364 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.se/docs/copyright.html.
 +#
 +# You may opt to use, copy, modify, merge, publish, distribute and/or sell
 +# copies of the Software, and permit persons to whom the Software is
 +# furnished to do so, under the terms of the COPYING file.
 +#
 +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
 +# KIND, either express or implied.
 +#
 +#***************************************************************************
 +
 +# This is the HTTPS, FTPS, POP3S, IMAPS, SMTPS, server used for curl test
 +# harness. Actually just a layer that runs stunnel properly using the
 +# non-secure test harness servers.
 +
 +BEGIN {
 +    push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
 +    push(@INC, ".");
 +}
 +
 +use strict;
 +use warnings;
 +use Cwd;
 +use Cwd 'abs_path';
 +
 +use serverhelp qw(
 +    server_pidfilename
 +    server_logfilename
 +    );
 +
 +use pathhelp;
 +
 +my $stunnel = "stunnel";
 +
 +my $verbose=0; # set to 1 for debugging
 +
 +my $accept_port = 8991; # just our default, weird enough
 +my $target_port = 8999; # default test http-server port
 +
 +my $stuncert;
 +
 +my $ver_major;
 +my $ver_minor;
 +my $fips_support;
 +my $stunnel_version;
 +my $tstunnel_windows;
 +my $socketopt;
 +my $cmd;
 +
 +my $pidfile;          # stunnel pid file
 +my $logfile;          # stunnel log file
 +my $loglevel = 5;     # stunnel log level
 +my $ipvnum = 4;       # default IP version of stunneled server
 +my $idnum = 1;        # default stunneled server instance number
 +my $proto = 'https';  # default secure server protocol
 +my $conffile;         # stunnel configuration file
 +my $capath;           # certificate chain PEM folder
 +my $certfile;         # certificate chain PEM file
 +
 +#***************************************************************************
 +# stunnel requires full path specification for several files.
 +#
 +my $path   = getcwd();
 +my $srcdir = $path;
 +my $logdir = $path .'/log';
 +
 +#***************************************************************************
 +# Signal handler to remove our stunnel 4.00 and newer configuration file.
 +#
 +sub exit_signal_handler {
 +    my $signame = shift;
 +    local $!; # preserve errno
 +    local $?; # preserve exit status
 +    unlink($conffile) if($conffile && (-f $conffile));
 +    exit;
 +}
 +
 +#***************************************************************************
 +# Process command line options
 +#
 +while(@ARGV) {
 +    if($ARGV[0] eq '--verbose') {
 +        $verbose = 1;
 +    }
 +    elsif($ARGV[0] eq '--proto') {
 +        if($ARGV[1]) {
 +            $proto = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--accept') {
 +        if($ARGV[1]) {
 +            if($ARGV[1] =~ /^(\d+)$/) {
 +                $accept_port = $1;
 +                shift @ARGV;
 +            }
 +        }
 +    }
 +    elsif($ARGV[0] eq '--connect') {
 +        if($ARGV[1]) {
 +            if($ARGV[1] =~ /^(\d+)$/) {
 +                $target_port = $1;
 +                shift @ARGV;
 +            }
 +        }
 +    }
 +    elsif($ARGV[0] eq '--stunnel') {
 +        if($ARGV[1]) {
 +            if($ARGV[1] =~ /^([\w\/]+)$/) {
 +                $stunnel = $ARGV[1];
 +            }
 +            else {
 +                $stunnel = "\"". $ARGV[1] ."\"";
 +            }
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--srcdir') {
 +        if($ARGV[1]) {
 +            $srcdir = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--certfile') {
 +        if($ARGV[1]) {
 +            $stuncert = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--id') {
 +        if($ARGV[1]) {
 +            if($ARGV[1] =~ /^(\d+)$/) {
 +                $idnum = $1 if($1 > 0);
 +                shift @ARGV;
 +            }
 +        }
 +    }
 +    elsif($ARGV[0] eq '--ipv4') {
 +        $ipvnum = 4;
 +    }
 +    elsif($ARGV[0] eq '--ipv6') {
 +        $ipvnum = 6;
 +    }
 +    elsif($ARGV[0] eq '--pidfile') {
 +        if($ARGV[1]) {
 +            $pidfile = "$path/". $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--logfile') {
 +        if($ARGV[1]) {
 +            $logfile = "$path/". $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    else {
 +        print STDERR "\nWarning: secureserver.pl unknown parameter: 
$ARGV[0]\n";
 +    }
 +    shift @ARGV;
 +}
 +
 +#***************************************************************************
 +# Initialize command line option dependent variables
 +#
 +if(!$pidfile) {
 +    $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
 +}
 +if(!$logfile) {
 +    $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
 +}
 +
 +$conffile = "$path/${proto}_stunnel.conf";
 +
 +$capath = abs_path($path);
 +$certfile = "$srcdir/". ($stuncert?"certs/$stuncert":"stunnel.pem");
 +$certfile = abs_path($certfile);
 +
 +my $ssltext = uc($proto) ." SSL/TLS:";
 +
 +#***************************************************************************
 +# Find out version info for the given stunnel binary
 +#
 +foreach my $veropt (('-version', '-V')) {
 +    foreach my $verstr (qx($stunnel $veropt 2>&1)) {
 +        if($verstr =~ /^stunnel (\d+)\.(\d+) on /) {
 +            $ver_major = $1;
 +            $ver_minor = $2;
 +        }
 +        elsif($verstr =~ /^sslVersion.*fips *= *yes/) {
 +            # the fips option causes an error if stunnel doesn't support it
 +            $fips_support = 1;
 +            last
 +        }
 +    }
 +    last if($ver_major);
 +}
 +if((!$ver_major) || (!$ver_minor)) {
 +    if(-x "$stunnel" && ! -d "$stunnel") {
 +        print "$ssltext Unknown stunnel version\n";
 +    }
 +    else {
 +        print "$ssltext No stunnel\n";
 +    }
 +    exit 1;
 +}
 +$stunnel_version = (100*$ver_major) + $ver_minor;
 +
 +#***************************************************************************
 +# Verify minimum stunnel required version
 +#
 +if($stunnel_version < 310) {
 +    print "$ssltext Unsupported stunnel version $ver_major.$ver_minor\n";
 +    exit 1;
 +}
 +
 +#***************************************************************************
 +# Find out if we are running on Windows using the tstunnel binary
 +#
 +if($stunnel =~ /tstunnel(\.exe)?"?$/) {
 +    $tstunnel_windows = 1;
 +
 +    # convert Cygwin/MinGW paths to Win32 format
 +    $capath = pathhelp::sys_native_abs_path($capath);
 +    $certfile = pathhelp::sys_native_abs_path($certfile);
 +}
 +
 +#***************************************************************************
 +# Build command to execute for stunnel 3.X versions
 +#
 +if($stunnel_version < 400) {
 +    if($stunnel_version >= 319) {
 +        $socketopt = "-O a:SO_REUSEADDR=1";
 +    }
 +    $cmd  = "$stunnel -p $certfile -P $pidfile ";
 +    $cmd .= "-d $accept_port -r $target_port -f -D $loglevel ";
 +    $cmd .= ($socketopt) ? "$socketopt " : "";
 +    $cmd .= ">$logfile 2>&1";
 +    if($verbose) {
 +        print uc($proto) ." server (stunnel $ver_major.$ver_minor)\n";
 +        print "cmd: $cmd\n";
 +        print "pem cert file: $certfile\n";
 +        print "pid file: $pidfile\n";
 +        print "log file: $logfile\n";
 +        print "log level: $loglevel\n";
 +        print "listen on port: $accept_port\n";
 +        print "connect to port: $target_port\n";
 +    }
 +}
 +
 +#***************************************************************************
 +# Build command to execute for stunnel 4.00 and newer
 +#
 +if($stunnel_version >= 400) {
 +    $socketopt = "a:SO_REUSEADDR=1";
 +    if(($stunnel_version >= 534) && $tstunnel_windows) {
 +        # SO_EXCLUSIVEADDRUSE is on by default on Vista or newer,
 +        # but does not work together with SO_REUSEADDR being on.
 +        $socketopt .= "\nsocket = a:SO_EXCLUSIVEADDRUSE=0";
 +    }
 +    $cmd  = "$stunnel $conffile ";
 +    $cmd .= ">$logfile 2>&1";
 +    # setup signal handler
 +    $SIG{INT} = \&exit_signal_handler;
 +    $SIG{TERM} = \&exit_signal_handler;
 +    # stunnel configuration file
 +    if(open(STUNCONF, ">$conffile")) {
 +        print STUNCONF "CApath = $capath\n";
 +        print STUNCONF "cert = $certfile\n";
 +        print STUNCONF "debug = $loglevel\n";
 +        print STUNCONF "socket = $socketopt\n";
 +        if($fips_support) {
 +            # disable fips in case OpenSSL doesn't support it
 +            print STUNCONF "fips = no\n";
 +        }
 +        if(!$tstunnel_windows) {
 +            # do not use Linux-specific options on Windows
 +            print STUNCONF "output = $logfile\n";
 +            print STUNCONF "pid = $pidfile\n";
 +            print STUNCONF "foreground = yes\n";
 +        }
 +        print STUNCONF "\n";
 +        print STUNCONF "[curltest]\n";
 +        print STUNCONF "accept = $accept_port\n";
 +        print STUNCONF "connect = $target_port\n";
 +        if(!close(STUNCONF)) {
 +            print "$ssltext Error closing file $conffile\n";
 +            exit 1;
 +        }
 +    }
 +    else {
 +        print "$ssltext Error writing file $conffile\n";
 +        exit 1;
 +    }
 +    if($verbose) {
 +        print uc($proto) ." server (stunnel $ver_major.$ver_minor)\n";
 +        print "cmd: $cmd\n";
 +        print "CApath = $capath\n";
 +        print "cert = $certfile\n";
 +        print "debug = $loglevel\n";
 +        print "socket = $socketopt\n";
 +        if($fips_support) {
 +            print "fips = no\n";
 +        }
 +        if(!$tstunnel_windows) {
 +            print "pid = $pidfile\n";
 +            print "output = $logfile\n";
 +            print "foreground = yes\n";
 +        }
 +        print "\n";
 +        print "[curltest]\n";
 +        print "accept = $accept_port\n";
 +        print "connect = $target_port\n";
 +    }
 +}
 +
 +#***************************************************************************
 +# Set file permissions on certificate pem file.
 +#
 +chmod(0600, $certfile) if(-f $certfile);
 +print STDERR "RUN: $cmd\n" if($verbose);
 +
 +#***************************************************************************
 +# Run tstunnel on Windows.
 +#
 +if($tstunnel_windows) {
 +    # Fake pidfile for tstunnel on Windows.
 +    if(open(OUT, ">$pidfile")) {
 +        print OUT $$ . "\n";
 +        close(OUT);
 +    }
 +
 +    # Put an "exec" in front of the command so that the child process
 +    # keeps this child's process ID by being tied to the spawned shell.
 +    exec("exec $cmd") || die "Can't exec() $cmd: $!";
 +    # exec() will create a new process, but ties the existence of the
 +    # new process to the parent waiting perl.exe and sh.exe processes.
 +
 +    # exec() should never return back here to this process. We protect
 +    # ourselves by calling die() just in case something goes really bad.
 +    die "error: exec() has returned";
 +}
 +
 +#***************************************************************************
 +# Run stunnel.
 +#
 +my $rc = system($cmd);
 +
 +$rc >>= 8;
 +
 +unlink($conffile) if($conffile && -f $conffile);
 +
 +exit $rc;
diff --cc tests/smbserver.py.in
index f752c17a2,000000000..a00ecae3b
mode 100755,000000..100755
--- a/tests/smbserver.py.in
+++ b/tests/smbserver.py.in
@@@ -1,393 -1,0 +1,395 @@@
 +#!AWKPYTHON
 +# -*- coding: utf-8 -*-
 +#
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2017 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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)
++from __future__ import absolute_import, division, print_function
 +# NOTE: the impacket configuration is not unicode_literals compatible!
++
 +import argparse
++import logging
 +import os
 +import sys
- import logging
 +import tempfile
++
++# Import our curl test data helper
++from util import ClosingFileHandler, TestData
++
 +if sys.version_info.major >= 3:
 +    import configparser
 +else:
 +    import ConfigParser as configparser
 +
- # Import our curl test data helper
- import curl_test_data
- 
 +# 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)
++from impacket import smbserver as imp_smbserver
++from impacket.nt_errors import (STATUS_ACCESS_DENIED, STATUS_NO_SUCH_FILE,
++                                STATUS_SUCCESS)
 +
 +log = logging.getLogger(__name__)
 +SERVER_MAGIC = "SERVER_MAGIC"
 +TESTS_MAGIC = "TESTS_MAGIC"
 +VERIFIED_REQ = "verifiedserver"
 +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(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)
++        self.ctd = 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")
 +            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).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 = ClosingFileHandler(options.logfile)
 +        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)
diff --cc tests/sshserver.pl.in
index fd98d48cc,000000000..4b3d7eb3c
mode 100644,000000..100644
--- a/tests/sshserver.pl.in
+++ b/tests/sshserver.pl.in
@@@ -1,1159 -1,0 +1,1159 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +#***************************************************************************
 +
 +# Starts sshd for use in the SCP and SFTP curl test harness tests.
 +# Also creates the ssh configuration files needed for these tests.
 +
 +use strict;
 +use warnings;
 +use Cwd;
 +use Cwd 'abs_path';
 +use Digest::MD5;
 +use Digest::MD5 'md5_hex';
 +use MIME::Base64;
 +
 +#***************************************************************************
 +# Variables and subs imported from sshhelp module
 +#
 +use sshhelp qw(
 +    $sshdexe
 +    $sshexe
 +    $sftpsrvexe
 +    $sftpexe
 +    $sshkeygenexe
 +    $sshdconfig
 +    $sshconfig
 +    $sftpconfig
 +    $knownhosts
 +    $sshdlog
 +    $sshlog
 +    $sftplog
 +    $sftpcmds
 +    $hstprvkeyf
 +    $hstpubkeyf
 +    $hstpubmd5f
 +    $cliprvkeyf
 +    $clipubkeyf
 +    display_sshdconfig
 +    display_sshconfig
 +    display_sftpconfig
 +    display_sshdlog
 +    display_sshlog
 +    display_sftplog
 +    dump_array
 +    find_sshd
 +    find_ssh
 +    find_sftpsrv
 +    find_sftp
 +    find_sshkeygen
 +    logmsg
 +    sshversioninfo
 +    );
 +
 +#***************************************************************************
 +# Subs imported from serverhelp module
 +#
 +use serverhelp qw(
 +    server_pidfilename
 +    server_logfilename
 +    );
 +
 +use pathhelp;
 +
 +#***************************************************************************
 +
 +my $verbose = 0;              # set to 1 for debugging
 +my $debugprotocol = 0;        # set to 1 for protocol debugging
 +my $port = 8999;              # our default SCP/SFTP server port
 +my $listenaddr = '127.0.0.1'; # default address on which to listen
 +my $ipvnum = 4;               # default IP version of listener address
 +my $idnum = 1;                # default ssh daemon instance number
 +my $proto = 'ssh';            # protocol the ssh daemon speaks
 +my $path = getcwd();          # current working directory
 +my $logdir = $path .'/log';   # directory for log files
 +my $username = $ENV{USER};    # default user
 +my $pidfile;                  # ssh daemon pid file
 +my $identity = 'curl_client_key'; # default identity file
 +
 +my $error;
 +my @cfgarr;
 +
 +
 +#***************************************************************************
 +# Parse command line options
 +#
 +while(@ARGV) {
 +    if($ARGV[0] eq '--verbose') {
 +        $verbose = 1;
 +    }
 +    elsif($ARGV[0] eq '--debugprotocol') {
 +        $verbose = 1;
 +        $debugprotocol = 1;
 +    }
 +    elsif($ARGV[0] eq '--user') {
 +        if($ARGV[1]) {
 +            $username = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--id') {
 +        if($ARGV[1]) {
 +            if($ARGV[1] =~ /^(\d+)$/) {
 +                $idnum = $1 if($1 > 0);
 +                shift @ARGV;
 +            }
 +        }
 +    }
 +    elsif($ARGV[0] eq '--ipv4') {
 +        $ipvnum = 4;
 +        $listenaddr = '127.0.0.1' if($listenaddr eq '::1');
 +    }
 +    elsif($ARGV[0] eq '--ipv6') {
 +        $ipvnum = 6;
 +        $listenaddr = '::1' if($listenaddr eq '127.0.0.1');
 +    }
 +    elsif($ARGV[0] eq '--addr') {
 +        if($ARGV[1]) {
 +            my $tmpstr = $ARGV[1];
 +            if($tmpstr =~ /^(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)\.(\d\d?\d?)$/) 
{
 +                $listenaddr = "$1.$2.$3.$4" if($ipvnum == 4);
 +                shift @ARGV;
 +            }
 +            elsif($ipvnum == 6) {
 +                $listenaddr = $tmpstr;
 +                $listenaddr =~ s/^\[(.*)\]$/$1/;
 +                shift @ARGV;
 +            }
 +        }
 +    }
 +    elsif($ARGV[0] eq '--pidfile') {
 +        if($ARGV[1]) {
 +            $pidfile = "$path/". $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--sshport') {
 +        if($ARGV[1]) {
 +            if($ARGV[1] =~ /^(\d+)$/) {
 +                $port = $1;
 +                shift @ARGV;
 +            }
 +        }
 +    }
 +    else {
 +        print STDERR "\nWarning: sshserver.pl unknown parameter: $ARGV[0]\n";
 +    }
 +    shift @ARGV;
 +}
 +
 +
 +#***************************************************************************
 +# Default ssh daemon pid file name
 +#
 +if(!$pidfile) {
 +    $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
 +}
 +
 +
 +#***************************************************************************
 +# ssh and sftp server log file names
 +#
 +$sshdlog = server_logfilename($logdir, 'ssh', $ipvnum, $idnum);
 +$sftplog = server_logfilename($logdir, 'sftp', $ipvnum, $idnum);
 +
 +
 +#***************************************************************************
 +# Logging level for ssh server and client
 +#
 +my $loglevel = $debugprotocol?'DEBUG3':'DEBUG2';
 +
 +
 +#***************************************************************************
 +# Validate username
 +#
 +if(!$username) {
 +    $error = 'Will not run ssh server without a user name';
 +}
 +elsif($username eq 'root') {
 +    $error = 'Will not run ssh server as root to mitigate security risks';
 +}
 +if($error) {
 +    logmsg $error;
 +    exit 1;
 +}
 +
 +
 +#***************************************************************************
 +# Find out ssh daemon canonical file name
 +#
 +my $sshd = find_sshd();
 +if(!$sshd) {
 +    logmsg "cannot find $sshdexe";
 +    exit 1;
 +}
 +
 +
 +#***************************************************************************
 +# Find out ssh daemon version info
 +#
 +my ($sshdid, $sshdvernum, $sshdverstr, $sshderror) = sshversioninfo($sshd);
 +if(!$sshdid) {
 +    # Not an OpenSSH or SunSSH ssh daemon
 +    logmsg $sshderror if($verbose);
 +    logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
 +    exit 1;
 +}
 +logmsg "ssh server found $sshd is $sshdverstr" if($verbose);
 +
 +
 +#***************************************************************************
 +#  ssh daemon command line options we might use and version support
 +#
 +#  -e:  log stderr           : OpenSSH 2.9.0 and later
 +#  -f:  sshd config file     : OpenSSH 1.2.1 and later
 +#  -D:  no daemon forking    : OpenSSH 2.5.0 and later
 +#  -o:  command-line option  : OpenSSH 3.1.0 and later
 +#  -t:  test config file     : OpenSSH 2.9.9 and later
 +#  -?:  sshd version info    : OpenSSH 1.2.1 and later
 +#
 +#  -e:  log stderr           : SunSSH 1.0.0 and later
 +#  -f:  sshd config file     : SunSSH 1.0.0 and later
 +#  -D:  no daemon forking    : SunSSH 1.0.0 and later
 +#  -o:  command-line option  : SunSSH 1.0.0 and later
 +#  -t:  test config file     : SunSSH 1.0.0 and later
 +#  -?:  sshd version info    : SunSSH 1.0.0 and later
 +
 +
 +#***************************************************************************
 +# Verify minimum ssh daemon version
 +#
 +if((($sshdid =~ /OpenSSH/) && ($sshdvernum < 299)) ||
 +   (($sshdid =~ /SunSSH/)  && ($sshdvernum < 100))) {
 +    logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
 +    exit 1;
 +}
 +
 +
 +#***************************************************************************
 +# Find out sftp server plugin canonical file name
 +#
 +my $sftpsrv = find_sftpsrv();
 +if(!$sftpsrv) {
 +    logmsg "cannot find $sftpsrvexe";
 +    exit 1;
 +}
 +logmsg "sftp server plugin found $sftpsrv" if($verbose);
 +
 +
 +#***************************************************************************
 +# Find out sftp client canonical file name
 +#
 +my $sftp = find_sftp();
 +if(!$sftp) {
 +    logmsg "cannot find $sftpexe";
 +    exit 1;
 +}
 +logmsg "sftp client found $sftp" if($verbose);
 +
 +
 +#***************************************************************************
 +# Find out ssh keygen canonical file name
 +#
 +my $sshkeygen = find_sshkeygen();
 +if(!$sshkeygen) {
 +    logmsg "cannot find $sshkeygenexe";
 +    exit 1;
 +}
 +logmsg "ssh keygen found $sshkeygen" if($verbose);
 +
 +
 +#***************************************************************************
 +# Find out ssh client canonical file name
 +#
 +my $ssh = find_ssh();
 +if(!$ssh) {
 +    logmsg "cannot find $sshexe";
 +    exit 1;
 +}
 +
 +
 +#***************************************************************************
 +# Find out ssh client version info
 +#
 +my ($sshid, $sshvernum, $sshverstr, $ssherror) = sshversioninfo($ssh);
 +if(!$sshid) {
 +    # Not an OpenSSH or SunSSH ssh client
 +    logmsg $ssherror if($verbose);
 +    logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
 +    exit 1;
 +}
 +logmsg "ssh client found $ssh is $sshverstr" if($verbose);
 +
 +
 +#***************************************************************************
 +#  ssh client command line options we might use and version support
 +#
 +#  -D:  dynamic app port forwarding  : OpenSSH 2.9.9 and later
 +#  -F:  ssh config file              : OpenSSH 2.9.9 and later
 +#  -N:  no shell/command             : OpenSSH 2.1.0 and later
 +#  -p:  connection port              : OpenSSH 1.2.1 and later
 +#  -v:  verbose messages             : OpenSSH 1.2.1 and later
 +# -vv:  increase verbosity           : OpenSSH 2.3.0 and later
 +#  -V:  ssh version info             : OpenSSH 1.2.1 and later
 +#
 +#  -D:  dynamic app port forwarding  : SunSSH 1.0.0 and later
 +#  -F:  ssh config file              : SunSSH 1.0.0 and later
 +#  -N:  no shell/command             : SunSSH 1.0.0 and later
 +#  -p:  connection port              : SunSSH 1.0.0 and later
 +#  -v:  verbose messages             : SunSSH 1.0.0 and later
 +# -vv:  increase verbosity           : SunSSH 1.0.0 and later
 +#  -V:  ssh version info             : SunSSH 1.0.0 and later
 +
 +
 +#***************************************************************************
 +# Verify minimum ssh client version
 +#
 +if((($sshid =~ /OpenSSH/) && ($sshvernum < 299)) ||
 +   (($sshid =~ /SunSSH/)  && ($sshvernum < 100))) {
 +    logmsg 'SCP and SFTP tests require OpenSSH 2.9.9 or later';
 +    exit 1;
 +}
 +
 +
 +#***************************************************************************
 +#  ssh keygen command line options we actually use and version support
 +#
 +#  -C:  identity comment : OpenSSH 1.2.1 and later
 +#  -f:  key filename     : OpenSSH 1.2.1 and later
 +#  -N:  new passphrase   : OpenSSH 1.2.1 and later
 +#  -q:  quiet keygen     : OpenSSH 1.2.1 and later
 +#  -t:  key type         : OpenSSH 2.5.0 and later
 +#
 +#  -C:  identity comment : SunSSH 1.0.0 and later
 +#  -f:  key filename     : SunSSH 1.0.0 and later
 +#  -N:  new passphrase   : SunSSH 1.0.0 and later
 +#  -q:  quiet keygen     : SunSSH 1.0.0 and later
 +#  -t:  key type         : SunSSH 1.0.0 and later
 +
 +
 +#***************************************************************************
 +# Generate host and client key files for curl's tests
 +#
 +if((! -e $hstprvkeyf) || (! -s $hstprvkeyf) ||
 +   (! -e $hstpubkeyf) || (! -s $hstpubkeyf) ||
 +   (! -e $hstpubmd5f) || (! -s $hstpubmd5f) ||
 +   (! -e $cliprvkeyf) || (! -s $cliprvkeyf) ||
 +   (! -e $clipubkeyf) || (! -s $clipubkeyf)) {
 +    # Make sure all files are gone so ssh-keygen doesn't complain
 +    unlink($hstprvkeyf, $hstpubkeyf, $hstpubmd5f, $cliprvkeyf, $clipubkeyf);
 +    logmsg 'generating host keys...' if($verbose);
 +    if(system "\"$sshkeygen\" -q -t rsa -f $hstprvkeyf -C 'curl test server' 
-N ''") {
 +        logmsg 'Could not generate host key';
 +        exit 1;
 +    }
 +    logmsg 'generating client keys...' if($verbose);
 +    if(system "\"$sshkeygen\" -q -t rsa -f $cliprvkeyf -C 'curl test client' 
-N ''") {
 +        logmsg 'Could not generate client key';
 +        exit 1;
 +    }
 +    # Make sure that permissions are restricted so openssh doesn't complain
 +    system "chmod 600 $hstprvkeyf";
 +    system "chmod 600 $cliprvkeyf";
 +    # Save md5 hash of public host key
 +    open(RSAKEYFILE, "<$hstpubkeyf");
 +    my @rsahostkey = do { local $/ = ' '; <RSAKEYFILE> };
 +    close(RSAKEYFILE);
 +    if(!$rsahostkey[1]) {
 +        logmsg 'Failed parsing base64 encoded RSA host key';
 +        exit 1;
 +    }
 +    open(PUBMD5FILE, ">$hstpubmd5f");
 +    print PUBMD5FILE md5_hex(decode_base64($rsahostkey[1]));
 +    close(PUBMD5FILE);
 +    if((! -e $hstpubmd5f) || (! -s $hstpubmd5f)) {
 +        logmsg 'Failed writing md5 hash of RSA host key';
 +        exit 1;
 +    }
 +}
 +
 +
 +#***************************************************************************
 +# Convert paths for curl's tests running on Windows with Cygwin/Msys OpenSSH
 +#
 +my $clipubkeyf_config = abs_path("$path/$clipubkeyf");
 +my $hstprvkeyf_config = abs_path("$path/$hstprvkeyf");
 +my $pidfile_config = $pidfile;
 +my $sftpsrv_config = $sftpsrv;
 +
 +if (pathhelp::os_is_win()) {
 +    # Ensure to use MinGW/Cygwin paths
 +    $clipubkeyf_config = pathhelp::build_sys_abs_path($clipubkeyf_config);
 +    $hstprvkeyf_config = pathhelp::build_sys_abs_path($hstprvkeyf_config);
 +    $pidfile_config = pathhelp::build_sys_abs_path($pidfile_config);
 +    $sftpsrv_config = "internal-sftp";
 +}
 +if ($sshdid =~ /OpenSSH-Windows/) {
 +    # Ensure to use native Windows paths with OpenSSH for Windows
 +    $clipubkeyf_config = pathhelp::sys_native_abs_path($clipubkeyf);
 +    $hstprvkeyf_config = pathhelp::sys_native_abs_path($hstprvkeyf);
 +    $pidfile_config = pathhelp::sys_native_abs_path($pidfile);
 +    $sftpsrv_config = pathhelp::sys_native_abs_path($sftpsrv);
 +
 +    $sshdconfig = pathhelp::sys_native_abs_path($sshdconfig);
 +    $sshconfig = pathhelp::sys_native_abs_path($sshconfig);
 +    $sftpconfig = pathhelp::sys_native_abs_path($sftpconfig);
 +}
 +
 +#***************************************************************************
 +#  ssh daemon configuration file options we might use and version support
 +#
 +#  AFSTokenPassing                  : OpenSSH 1.2.1 and later [1]
 +#  AcceptEnv                        : OpenSSH 3.9.0 and later
 +#  AddressFamily                    : OpenSSH 4.0.0 and later
 +#  AllowGroups                      : OpenSSH 1.2.1 and later
 +#  AllowTcpForwarding               : OpenSSH 2.3.0 and later
 +#  AllowUsers                       : OpenSSH 1.2.1 and later
 +#  AuthorizedKeysFile               : OpenSSH 2.9.9 and later
 +#  AuthorizedKeysFile2              : OpenSSH 2.9.9 and later
 +#  Banner                           : OpenSSH 2.5.0 and later
 +#  ChallengeResponseAuthentication  : OpenSSH 2.5.0 and later
 +#  Ciphers                          : OpenSSH 2.1.0 and later [3]
 +#  ClientAliveCountMax              : OpenSSH 2.9.0 and later
 +#  ClientAliveInterval              : OpenSSH 2.9.0 and later
 +#  Compression                      : OpenSSH 3.3.0 and later
 +#  DenyGroups                       : OpenSSH 1.2.1 and later
 +#  DenyUsers                        : OpenSSH 1.2.1 and later
 +#  ForceCommand                     : OpenSSH 4.4.0 and later [3]
 +#  GatewayPorts                     : OpenSSH 2.1.0 and later
 +#  GSSAPIAuthentication             : OpenSSH 3.7.0 and later [1]
 +#  GSSAPICleanupCredentials         : OpenSSH 3.8.0 and later [1]
 +#  GSSAPIKeyExchange                :  SunSSH 1.0.0 and later [1]
 +#  GSSAPIStoreDelegatedCredentials  :  SunSSH 1.0.0 and later [1]
 +#  GSSCleanupCreds                  :  SunSSH 1.0.0 and later [1]
 +#  GSSUseSessionCredCache           :  SunSSH 1.0.0 and later [1]
 +#  HostbasedAuthentication          : OpenSSH 2.9.0 and later
 +#  HostbasedUsesNameFromPacketOnly  : OpenSSH 2.9.0 and later
 +#  HostKey                          : OpenSSH 1.2.1 and later
 +#  IgnoreRhosts                     : OpenSSH 1.2.1 and later
 +#  IgnoreUserKnownHosts             : OpenSSH 1.2.1 and later
 +#  KbdInteractiveAuthentication     : OpenSSH 2.3.0 and later
 +#  KeepAlive                        : OpenSSH 1.2.1 and later
 +#  KerberosAuthentication           : OpenSSH 1.2.1 and later [1]
 +#  KerberosGetAFSToken              : OpenSSH 3.8.0 and later [1]
 +#  KerberosOrLocalPasswd            : OpenSSH 1.2.1 and later [1]
 +#  KerberosTgtPassing               : OpenSSH 1.2.1 and later [1]
 +#  KerberosTicketCleanup            : OpenSSH 1.2.1 and later [1]
 +#  KeyRegenerationInterval          : OpenSSH 1.2.1 and later
 +#  ListenAddress                    : OpenSSH 1.2.1 and later
 +#  LoginGraceTime                   : OpenSSH 1.2.1 and later
 +#  LogLevel                         : OpenSSH 1.2.1 and later
 +#  LookupClientHostnames            :  SunSSH 1.0.0 and later
 +#  MACs                             : OpenSSH 2.5.0 and later [3]
 +#  Match                            : OpenSSH 4.4.0 and later [3]
 +#  MaxAuthTries                     : OpenSSH 3.9.0 and later
 +#  MaxStartups                      : OpenSSH 2.2.0 and later
 +#  PAMAuthenticationViaKbdInt       : OpenSSH 2.9.0 and later [2]
 +#  PasswordAuthentication           : OpenSSH 1.2.1 and later
 +#  PermitEmptyPasswords             : OpenSSH 1.2.1 and later
 +#  PermitOpen                       : OpenSSH 4.4.0 and later [3]
 +#  PermitRootLogin                  : OpenSSH 1.2.1 and later
 +#  PermitTunnel                     : OpenSSH 4.3.0 and later
 +#  PermitUserEnvironment            : OpenSSH 3.5.0 and later
 +#  PidFile                          : OpenSSH 2.1.0 and later
 +#  Port                             : OpenSSH 1.2.1 and later
 +#  PrintLastLog                     : OpenSSH 2.9.0 and later
 +#  PrintMotd                        : OpenSSH 1.2.1 and later
 +#  Protocol                         : OpenSSH 2.1.0 and later
 +#  PubkeyAuthentication             : OpenSSH 2.5.0 and later
 +#  RhostsAuthentication             : OpenSSH 1.2.1 and later
 +#  RhostsRSAAuthentication          : OpenSSH 1.2.1 and later
 +#  RSAAuthentication                : OpenSSH 1.2.1 and later
 +#  ServerKeyBits                    : OpenSSH 1.2.1 and later
 +#  SkeyAuthentication               : OpenSSH 1.2.1 and later [1]
 +#  StrictModes                      : OpenSSH 1.2.1 and later
 +#  Subsystem                        : OpenSSH 2.2.0 and later
 +#  SyslogFacility                   : OpenSSH 1.2.1 and later
 +#  TCPKeepAlive                     : OpenSSH 3.8.0 and later
 +#  UseDNS                           : OpenSSH 3.7.0 and later
 +#  UseLogin                         : OpenSSH 1.2.1 and later
 +#  UsePAM                           : OpenSSH 3.7.0 and later [1][2]
 +#  UsePrivilegeSeparation           : OpenSSH 3.2.2 and later
 +#  VerifyReverseMapping             : OpenSSH 3.1.0 and later
 +#  X11DisplayOffset                 : OpenSSH 1.2.1 and later [3]
 +#  X11Forwarding                    : OpenSSH 1.2.1 and later
 +#  X11UseLocalhost                  : OpenSSH 3.1.0 and later
 +#  XAuthLocation                    : OpenSSH 2.1.1 and later [3]
 +#
 +#  [1] Option only available if activated at compile time
 +#  [2] Option specific for portable versions
 +#  [3] Option not used in our ssh server config file
 +
 +
 +#***************************************************************************
 +# Initialize sshd config with options actually supported in OpenSSH 2.9.9
 +#
 +logmsg 'generating ssh server config file...' if($verbose);
 +@cfgarr = ();
 +push @cfgarr, '# This is a generated file.  Do not edit.';
 +push @cfgarr, "# $sshdverstr sshd configuration file for curl testing";
 +push @cfgarr, '#';
 +
 +# AllowUsers and DenyUsers options should use lowercase on Windows
 +# and do not support quotes around values for some unknown reason.
 +if ($sshdid =~ /OpenSSH-Windows/) {
 +    my $username_lc = lc $username;
 +    if (exists $ENV{USERDOMAIN}) {
 +        my $userdomain_lc = lc $ENV{USERDOMAIN};
 +        $username_lc = "$userdomain_lc\\$username_lc";
 +    }
 +    $username_lc =~ s/ /\?/g; # replace space with ?
 +    push @cfgarr, "DenyUsers !$username_lc";
 +    push @cfgarr, "AllowUsers $username_lc";
 +} else {
 +    push @cfgarr, "DenyUsers !$username";
 +    push @cfgarr, "AllowUsers $username";
 +}
 +
 +push @cfgarr, 'DenyGroups';
 +push @cfgarr, 'AllowGroups';
 +push @cfgarr, '#';
 +push @cfgarr, "AuthorizedKeysFile $clipubkeyf_config";
 +push @cfgarr, "AuthorizedKeysFile2 $clipubkeyf_config";
 +push @cfgarr, "HostKey $hstprvkeyf_config";
 +if ($sshdid !~ /OpenSSH-Windows/) {
 +    push @cfgarr, "PidFile $pidfile_config";
 +}
 +push @cfgarr, '#';
 +push @cfgarr, "Port $port";
 +push @cfgarr, "ListenAddress $listenaddr";
 +push @cfgarr, 'Protocol 2';
 +push @cfgarr, '#';
 +push @cfgarr, 'AllowTcpForwarding yes';
 +push @cfgarr, 'Banner none';
 +push @cfgarr, 'ChallengeResponseAuthentication no';
 +push @cfgarr, 'ClientAliveCountMax 3';
 +push @cfgarr, 'ClientAliveInterval 0';
 +push @cfgarr, 'GatewayPorts no';
 +push @cfgarr, 'HostbasedAuthentication no';
 +push @cfgarr, 'HostbasedUsesNameFromPacketOnly no';
 +push @cfgarr, 'IgnoreRhosts yes';
 +push @cfgarr, 'IgnoreUserKnownHosts yes';
 +push @cfgarr, 'KeyRegenerationInterval 0';
 +push @cfgarr, 'LoginGraceTime 30';
 +push @cfgarr, "LogLevel $loglevel";
 +push @cfgarr, 'MaxStartups 5';
 +push @cfgarr, 'PasswordAuthentication no';
 +push @cfgarr, 'PermitEmptyPasswords no';
 +push @cfgarr, 'PermitRootLogin no';
 +push @cfgarr, 'PrintLastLog no';
 +push @cfgarr, 'PrintMotd no';
 +push @cfgarr, 'PubkeyAuthentication yes';
 +push @cfgarr, 'RhostsRSAAuthentication no';
 +push @cfgarr, 'RSAAuthentication no';
 +push @cfgarr, 'ServerKeyBits 768';
 +push @cfgarr, 'StrictModes no';
 +push @cfgarr, "Subsystem sftp \"$sftpsrv_config\"";
 +push @cfgarr, 'SyslogFacility AUTH';
 +push @cfgarr, 'UseLogin no';
 +push @cfgarr, 'X11Forwarding no';
 +push @cfgarr, '#';
 +
 +
 +#***************************************************************************
 +# Write out initial sshd configuration file for curl's tests
 +#
 +$error = dump_array($sshdconfig, @cfgarr);
 +if($error) {
 +    logmsg $error;
 +    exit 1;
 +}
 +
 +
 +#***************************************************************************
 +# Verifies at run time if sshd supports a given configuration file option
 +#
 +sub sshd_supports_opt {
 +    my ($option, $value) = @_;
 +    my $err;
 +    #
 +    if((($sshdid =~ /OpenSSH/) && ($sshdvernum >= 310)) ||
 +        ($sshdid =~ /SunSSH/)) {
 +        # ssh daemon supports command line options -t -f and -o
 +        $err = grep /((Unsupported)|(Bad configuration)|(Deprecated)) 
option.*$option/,
 +                    qx("$sshd" -t -f $sshdconfig -o "$option=$value" 2>&1);
 +        return !$err;
 +    }
 +    if(($sshdid =~ /OpenSSH/) && ($sshdvernum >= 299)) {
 +        # ssh daemon supports command line options -t and -f
 +        $err = dump_array($sshdconfig, (@cfgarr, "$option $value"));
 +        if($err) {
 +            logmsg $err;
 +            return 0;
 +        }
 +        $err = grep /((Unsupported)|(Bad configuration)|(Deprecated)) 
option.*$option/,
 +                    qx("$sshd" -t -f $sshdconfig 2>&1);
 +        unlink $sshdconfig;
 +        return !$err;
 +    }
 +    return 0;
 +}
 +
 +
 +#***************************************************************************
 +# Kerberos Authentication support may have not been built into sshd
 +#
 +if(sshd_supports_opt('KerberosAuthentication','no')) {
 +    push @cfgarr, 'KerberosAuthentication no';
 +}
 +if(sshd_supports_opt('KerberosGetAFSToken','no')) {
 +    push @cfgarr, 'KerberosGetAFSToken no';
 +}
 +if(sshd_supports_opt('KerberosOrLocalPasswd','no')) {
 +    push @cfgarr, 'KerberosOrLocalPasswd no';
 +}
 +if(sshd_supports_opt('KerberosTgtPassing','no')) {
 +    push @cfgarr, 'KerberosTgtPassing no';
 +}
 +if(sshd_supports_opt('KerberosTicketCleanup','yes')) {
 +    push @cfgarr, 'KerberosTicketCleanup yes';
 +}
 +
 +
 +#***************************************************************************
 +# Andrew File System support may have not been built into sshd
 +#
 +if(sshd_supports_opt('AFSTokenPassing','no')) {
 +    push @cfgarr, 'AFSTokenPassing no';
 +}
 +
 +
 +#***************************************************************************
 +# S/Key authentication support may have not been built into sshd
 +#
 +if(sshd_supports_opt('SkeyAuthentication','no')) {
 +    push @cfgarr, 'SkeyAuthentication no';
 +}
 +
 +
 +#***************************************************************************
 +# GSSAPI Authentication support may have not been built into sshd
 +#
 +my $sshd_builtwith_GSSAPI;
 +if(sshd_supports_opt('GSSAPIAuthentication','no')) {
 +    push @cfgarr, 'GSSAPIAuthentication no';
 +    $sshd_builtwith_GSSAPI = 1;
 +}
 +if(sshd_supports_opt('GSSAPICleanupCredentials','yes')) {
 +    push @cfgarr, 'GSSAPICleanupCredentials yes';
 +}
 +if(sshd_supports_opt('GSSAPIKeyExchange','no')) {
 +    push @cfgarr, 'GSSAPIKeyExchange no';
 +}
 +if(sshd_supports_opt('GSSAPIStoreDelegatedCredentials','no')) {
 +    push @cfgarr, 'GSSAPIStoreDelegatedCredentials no';
 +}
 +if(sshd_supports_opt('GSSCleanupCreds','yes')) {
 +    push @cfgarr, 'GSSCleanupCreds yes';
 +}
 +if(sshd_supports_opt('GSSUseSessionCredCache','no')) {
 +    push @cfgarr, 'GSSUseSessionCredCache no';
 +}
 +push @cfgarr, '#';
 +
 +
 +#***************************************************************************
 +# Options that might be supported or not in sshd OpenSSH 2.9.9 and later
 +#
 +if(sshd_supports_opt('AcceptEnv','')) {
 +    push @cfgarr, 'AcceptEnv';
 +}
 +if(sshd_supports_opt('AddressFamily','any')) {
 +    # Address family must be specified before ListenAddress
 +    splice @cfgarr, 14, 0, 'AddressFamily any';
 +}
 +if(sshd_supports_opt('Compression','no')) {
 +    push @cfgarr, 'Compression no';
 +}
 +if(sshd_supports_opt('KbdInteractiveAuthentication','no')) {
 +    push @cfgarr, 'KbdInteractiveAuthentication no';
 +}
 +if(sshd_supports_opt('KeepAlive','no')) {
 +    push @cfgarr, 'KeepAlive no';
 +}
 +if(sshd_supports_opt('LookupClientHostnames','no')) {
 +    push @cfgarr, 'LookupClientHostnames no';
 +}
 +if(sshd_supports_opt('MaxAuthTries','10')) {
 +    push @cfgarr, 'MaxAuthTries 10';
 +}
 +if(sshd_supports_opt('PAMAuthenticationViaKbdInt','no')) {
 +    push @cfgarr, 'PAMAuthenticationViaKbdInt no';
 +}
 +if(sshd_supports_opt('PermitTunnel','no')) {
 +    push @cfgarr, 'PermitTunnel no';
 +}
 +if(sshd_supports_opt('PermitUserEnvironment','no')) {
 +    push @cfgarr, 'PermitUserEnvironment no';
 +}
 +if(sshd_supports_opt('RhostsAuthentication','no')) {
 +    push @cfgarr, 'RhostsAuthentication no';
 +}
 +if(sshd_supports_opt('TCPKeepAlive','no')) {
 +    push @cfgarr, 'TCPKeepAlive no';
 +}
 +if(sshd_supports_opt('UseDNS','no')) {
 +    push @cfgarr, 'UseDNS no';
 +}
 +if(sshd_supports_opt('UsePAM','no')) {
 +    push @cfgarr, 'UsePAM no';
 +}
 +
 +if($sshdid =~ /OpenSSH/) {
 +    # http://bugs.opensolaris.org/bugdatabase/view_bug.do?bug_id=6492415
 +    if(sshd_supports_opt('UsePrivilegeSeparation','no')) {
 +        push @cfgarr, 'UsePrivilegeSeparation no';
 +    }
 +}
 +
 +if(sshd_supports_opt('VerifyReverseMapping','no')) {
 +    push @cfgarr, 'VerifyReverseMapping no';
 +}
 +if(sshd_supports_opt('X11UseLocalhost','yes')) {
 +    push @cfgarr, 'X11UseLocalhost yes';
 +}
 +push @cfgarr, '#';
 +
 +
 +#***************************************************************************
 +# Write out resulting sshd configuration file for curl's tests
 +#
 +$error = dump_array($sshdconfig, @cfgarr);
 +if($error) {
 +    logmsg $error;
 +    exit 1;
 +}
 +
 +
 +#***************************************************************************
 +# Verify that sshd actually supports our generated configuration file
 +#
 +if(system "\"$sshd\" -t -f $sshdconfig > $sshdlog 2>&1") {
 +    logmsg "sshd configuration file $sshdconfig failed verification";
 +    display_sshdlog();
 +    display_sshdconfig();
 +    exit 1;
 +}
 +
 +
 +#***************************************************************************
 +# Generate ssh client host key database file for curl's tests
 +#
 +if((! -e $knownhosts) || (! -s $knownhosts)) {
 +    logmsg 'generating ssh client known hosts file...' if($verbose);
 +    unlink($knownhosts);
 +    if(open(RSAKEYFILE, "<$hstpubkeyf")) {
 +        my @rsahostkey = do { local $/ = ' '; <RSAKEYFILE> };
 +        if(close(RSAKEYFILE)) {
 +            if(open(KNOWNHOSTS, ">$knownhosts")) {
 +                print KNOWNHOSTS "$listenaddr ssh-rsa $rsahostkey[1]\n";
 +                if(!close(KNOWNHOSTS)) {
 +                    $error = "Error: cannot close file $knownhosts";
 +                }
 +            }
 +            else {
 +                $error = "Error: cannot write file $knownhosts";
 +            }
 +        }
 +        else {
 +            $error = "Error: cannot close file $hstpubkeyf";
 +        }
 +    }
 +    else {
 +        $error = "Error: cannot read file $hstpubkeyf";
 +    }
 +    if($error) {
 +        logmsg $error;
 +        exit 1;
 +    }
 +}
 +
 +
 +#***************************************************************************
 +# Convert paths for curl's tests running on Windows using Cygwin OpenSSH
 +#
 +my $identity_config = abs_path("$path/$identity");
 +my $knownhosts_config = abs_path("$path/$knownhosts");
 +
 +if (pathhelp::os_is_win()) {
 +    # Ensure to use MinGW/Cygwin paths
 +    $identity_config = pathhelp::build_sys_abs_path($identity_config);
 +    $knownhosts_config = pathhelp::build_sys_abs_path($knownhosts_config);
 +}
 +if ($sshdid =~ /OpenSSH-Windows/) {
 +    # Ensure to use native Windows paths with OpenSSH for Windows
 +    $identity_config = pathhelp::sys_native_abs_path($identity);
 +    $knownhosts_config = pathhelp::sys_native_abs_path($knownhosts);
 +}
 +
 +#***************************************************************************
 +#  ssh client configuration file options we might use and version support
 +#
 +#  AddressFamily                     : OpenSSH 3.7.0 and later
 +#  BatchMode                         : OpenSSH 1.2.1 and later
 +#  BindAddress                       : OpenSSH 2.9.9 and later
 +#  ChallengeResponseAuthentication   : OpenSSH 2.5.0 and later
 +#  CheckHostIP                       : OpenSSH 1.2.1 and later
 +#  Cipher                            : OpenSSH 1.2.1 and later [3]
 +#  Ciphers                           : OpenSSH 2.1.0 and later [3]
 +#  ClearAllForwardings               : OpenSSH 2.9.9 and later
 +#  Compression                       : OpenSSH 1.2.1 and later
 +#  CompressionLevel                  : OpenSSH 1.2.1 and later [3]
 +#  ConnectionAttempts                : OpenSSH 1.2.1 and later
 +#  ConnectTimeout                    : OpenSSH 3.7.0 and later
 +#  ControlMaster                     : OpenSSH 3.9.0 and later
 +#  ControlPath                       : OpenSSH 3.9.0 and later
 +#  DisableBanner                     :  SunSSH 1.2.0 and later
 +#  DynamicForward                    : OpenSSH 2.9.0 and later
 +#  EnableSSHKeysign                  : OpenSSH 3.6.0 and later
 +#  EscapeChar                        : OpenSSH 1.2.1 and later [3]
 +#  ExitOnForwardFailure              : OpenSSH 4.4.0 and later
 +#  ForwardAgent                      : OpenSSH 1.2.1 and later
 +#  ForwardX11                        : OpenSSH 1.2.1 and later
 +#  ForwardX11Trusted                 : OpenSSH 3.8.0 and later
 +#  GatewayPorts                      : OpenSSH 1.2.1 and later
 +#  GlobalKnownHostsFile              : OpenSSH 1.2.1 and later
 +#  GSSAPIAuthentication              : OpenSSH 3.7.0 and later [1]
 +#  GSSAPIDelegateCredentials         : OpenSSH 3.7.0 and later [1]
 +#  HashKnownHosts                    : OpenSSH 4.0.0 and later
 +#  Host                              : OpenSSH 1.2.1 and later
 +#  HostbasedAuthentication           : OpenSSH 2.9.0 and later
 +#  HostKeyAlgorithms                 : OpenSSH 2.9.0 and later [3]
 +#  HostKeyAlias                      : OpenSSH 2.5.0 and later [3]
 +#  HostName                          : OpenSSH 1.2.1 and later
 +#  IdentitiesOnly                    : OpenSSH 3.9.0 and later
 +#  IdentityFile                      : OpenSSH 1.2.1 and later
 +#  IgnoreIfUnknown                   :  SunSSH 1.2.0 and later
 +#  KeepAlive                         : OpenSSH 1.2.1 and later
 +#  KbdInteractiveAuthentication      : OpenSSH 2.3.0 and later
 +#  KbdInteractiveDevices             : OpenSSH 2.3.0 and later [3]
 +#  LocalCommand                      : OpenSSH 4.3.0 and later [3]
 +#  LocalForward                      : OpenSSH 1.2.1 and later [3]
 +#  LogLevel                          : OpenSSH 1.2.1 and later
 +#  MACs                              : OpenSSH 2.5.0 and later [3]
 +#  NoHostAuthenticationForLocalhost  : OpenSSH 3.0.0 and later
 +#  NumberOfPasswordPrompts           : OpenSSH 1.2.1 and later
 +#  PasswordAuthentication            : OpenSSH 1.2.1 and later
 +#  PermitLocalCommand                : OpenSSH 4.3.0 and later
 +#  Port                              : OpenSSH 1.2.1 and later
 +#  PreferredAuthentications          : OpenSSH 2.5.2 and later
 +#  Protocol                          : OpenSSH 2.1.0 and later
 +#  ProxyCommand                      : OpenSSH 1.2.1 and later [3]
 +#  PubkeyAuthentication              : OpenSSH 2.5.0 and later
 +#  RekeyLimit                        : OpenSSH 3.7.0 and later
 +#  RemoteForward                     : OpenSSH 1.2.1 and later [3]
 +#  RhostsRSAAuthentication           : OpenSSH 1.2.1 and later
 +#  RSAAuthentication                 : OpenSSH 1.2.1 and later
 +#  SendEnv                           : OpenSSH 3.9.0 and later
 +#  ServerAliveCountMax               : OpenSSH 3.8.0 and later
 +#  ServerAliveInterval               : OpenSSH 3.8.0 and later
 +#  SmartcardDevice                   : OpenSSH 2.9.9 and later [1][3]
 +#  StrictHostKeyChecking             : OpenSSH 1.2.1 and later
 +#  TCPKeepAlive                      : OpenSSH 3.8.0 and later
 +#  Tunnel                            : OpenSSH 4.3.0 and later
 +#  TunnelDevice                      : OpenSSH 4.3.0 and later [3]
 +#  UsePAM                            : OpenSSH 3.7.0 and later [1][2][3]
 +#  UsePrivilegedPort                 : OpenSSH 1.2.1 and later
 +#  User                              : OpenSSH 1.2.1 and later
 +#  UserKnownHostsFile                : OpenSSH 1.2.1 and later
 +#  VerifyHostKeyDNS                  : OpenSSH 3.8.0 and later
 +#  XAuthLocation                     : OpenSSH 2.1.1 and later [3]
 +#
 +#  [1] Option only available if activated at compile time
 +#  [2] Option specific for portable versions
 +#  [3] Option not used in our ssh client config file
 +
 +
 +#***************************************************************************
 +# Initialize ssh config with options actually supported in OpenSSH 2.9.9
 +#
 +logmsg 'generating ssh client config file...' if($verbose);
 +@cfgarr = ();
 +push @cfgarr, '# This is a generated file.  Do not edit.';
 +push @cfgarr, "# $sshverstr ssh client configuration file for curl testing";
 +push @cfgarr, '#';
 +push @cfgarr, 'Host *';
 +push @cfgarr, '#';
 +push @cfgarr, "Port $port";
 +push @cfgarr, "HostName $listenaddr";
 +push @cfgarr, "User $username";
 +push @cfgarr, 'Protocol 2';
 +push @cfgarr, '#';
 +
 +# BindAddress option is not supported by OpenSSH for Windows
 +if (!($sshdid =~ /OpenSSH-Windows/)) {
 +    push @cfgarr, "BindAddress $listenaddr";
 +}
 +
 +push @cfgarr, '#';
 +push @cfgarr, "IdentityFile $identity_config";
 +push @cfgarr, "UserKnownHostsFile $knownhosts_config";
 +push @cfgarr, '#';
 +push @cfgarr, 'BatchMode yes';
 +push @cfgarr, 'ChallengeResponseAuthentication no';
 +push @cfgarr, 'CheckHostIP no';
 +push @cfgarr, 'ClearAllForwardings no';
 +push @cfgarr, 'Compression no';
 +push @cfgarr, 'ConnectionAttempts 3';
 +push @cfgarr, 'ForwardAgent no';
 +push @cfgarr, 'ForwardX11 no';
 +push @cfgarr, 'GatewayPorts no';
 +push @cfgarr, 'GlobalKnownHostsFile /dev/null';
 +push @cfgarr, 'HostbasedAuthentication no';
 +push @cfgarr, 'KbdInteractiveAuthentication no';
 +push @cfgarr, "LogLevel $loglevel";
 +push @cfgarr, 'NumberOfPasswordPrompts 0';
 +push @cfgarr, 'PasswordAuthentication no';
 +push @cfgarr, 'PreferredAuthentications publickey';
 +push @cfgarr, 'PubkeyAuthentication yes';
 +
 +# RSA authentication options are not supported by OpenSSH for Windows
 +if (!($sshdid =~ /OpenSSH-Windows/)) {
 +    push @cfgarr, 'RhostsRSAAuthentication no';
 +    push @cfgarr, 'RSAAuthentication no';
 +}
 +
 +# Disabled StrictHostKeyChecking since it makes the tests fail on my
 +# OpenSSH_6.0p1 on Debian Linux / Daniel
 +push @cfgarr, 'StrictHostKeyChecking no';
 +push @cfgarr, 'UsePrivilegedPort no';
 +push @cfgarr, '#';
 +
 +
 +#***************************************************************************
 +# Options supported in ssh client newer than OpenSSH 2.9.9
 +#
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 370)) {
 +    push @cfgarr, 'AddressFamily any';
 +}
 +
 +if((($sshid =~ /OpenSSH/) && ($sshvernum >= 370)) ||
 +   (($sshid =~ /SunSSH/) && ($sshvernum >= 120))) {
 +    push @cfgarr, 'ConnectTimeout 30';
 +}
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 390)) {
 +    push @cfgarr, 'ControlMaster no';
 +}
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 420)) {
 +    push @cfgarr, 'ControlPath none';
 +}
 +
 +if(($sshid =~ /SunSSH/) && ($sshvernum >= 120)) {
 +    push @cfgarr, 'DisableBanner yes';
 +}
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 360)) {
 +    push @cfgarr, 'EnableSSHKeysign no';
 +}
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 440)) {
 +    push @cfgarr, 'ExitOnForwardFailure yes';
 +}
 +
 +if((($sshid =~ /OpenSSH/) && ($sshvernum >= 380)) ||
 +   (($sshid =~ /SunSSH/) && ($sshvernum >= 120))) {
 +    push @cfgarr, 'ForwardX11Trusted no';
 +}
 +
 +if(($sshd_builtwith_GSSAPI) && ($sshdid eq $sshid) &&
 +   ($sshdvernum == $sshvernum)) {
 +    push @cfgarr, 'GSSAPIAuthentication no';
 +    push @cfgarr, 'GSSAPIDelegateCredentials no';
 +    if($sshid =~ /SunSSH/) {
 +        push @cfgarr, 'GSSAPIKeyExchange no';
 +    }
 +}
 +
 +if((($sshid =~ /OpenSSH/) && ($sshvernum >= 400)) ||
 +   (($sshid =~ /SunSSH/) && ($sshvernum >= 120))) {
 +    push @cfgarr, 'HashKnownHosts no';
 +}
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 390)) {
 +    push @cfgarr, 'IdentitiesOnly yes';
 +}
 +
 +if(($sshid =~ /SunSSH/) && ($sshvernum >= 120)) {
 +    push @cfgarr, 'IgnoreIfUnknown no';
 +}
 +
 +if((($sshid =~ /OpenSSH/) && ($sshvernum < 380)) ||
 +    ($sshid =~ /SunSSH/)) {
 +    push @cfgarr, 'KeepAlive no';
 +}
 +
 +if((($sshid =~ /OpenSSH/) && ($sshvernum >= 300)) ||
 +    ($sshid =~ /SunSSH/)) {
 +    push @cfgarr, 'NoHostAuthenticationForLocalhost no';
 +}
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 430)) {
 +    push @cfgarr, 'PermitLocalCommand no';
 +}
 +
 +if((($sshid =~ /OpenSSH/) && ($sshvernum >= 370)) ||
 +   (($sshid =~ /SunSSH/) && ($sshvernum >= 120))) {
 +    push @cfgarr, 'RekeyLimit 1G';
 +}
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 390)) {
 +    push @cfgarr, 'SendEnv';
 +}
 +
 +if((($sshid =~ /OpenSSH/) && ($sshvernum >= 380)) ||
 +   (($sshid =~ /SunSSH/) && ($sshvernum >= 120))) {
 +    push @cfgarr, 'ServerAliveCountMax 3';
 +    push @cfgarr, 'ServerAliveInterval 0';
 +}
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 380)) {
 +    push @cfgarr, 'TCPKeepAlive no';
 +}
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 430)) {
 +    push @cfgarr, 'Tunnel no';
 +}
 +
 +if(($sshid =~ /OpenSSH/) && ($sshvernum >= 380)) {
 +    push @cfgarr, 'VerifyHostKeyDNS no';
 +}
 +
 +push @cfgarr, '#';
 +
 +
 +#***************************************************************************
 +# Write out resulting ssh client configuration file for curl's tests
 +#
 +$error = dump_array($sshconfig, @cfgarr);
 +if($error) {
 +    logmsg $error;
 +    exit 1;
 +}
 +
 +
 +#***************************************************************************
 +# Initialize client sftp config with options actually supported.
 +#
 +logmsg 'generating sftp client config file...' if($verbose);
 +splice @cfgarr, 1, 1, "# $sshverstr sftp client configuration file for curl 
testing";
 +#
 +for(my $i = scalar(@cfgarr) - 1; $i > 0; $i--) {
 +    if($cfgarr[$i] =~ /^DynamicForward/) {
 +        splice @cfgarr, $i, 1;
 +        next;
 +    }
 +    if($cfgarr[$i] =~ /^ClearAllForwardings/) {
 +        splice @cfgarr, $i, 1, "ClearAllForwardings yes";
 +        next;
 +    }
 +}
 +
 +
 +#***************************************************************************
 +# Write out resulting sftp client configuration file for curl's tests
 +#
 +$error = dump_array($sftpconfig, @cfgarr);
 +if($error) {
 +    logmsg $error;
 +    exit 1;
 +}
 +@cfgarr = ();
 +
 +
 +#***************************************************************************
 +# Generate client sftp commands batch file for sftp server verification
 +#
 +logmsg 'generating sftp client commands file...' if($verbose);
 +push @cfgarr, 'pwd';
 +push @cfgarr, 'quit';
 +$error = dump_array($sftpcmds, @cfgarr);
 +if($error) {
 +    logmsg $error;
 +    exit 1;
 +}
 +@cfgarr = ();
 +
 +#***************************************************************************
 +# Prepare command line of ssh server daemon
 +#
 +my $cmd = "\"$sshd\" -e -D -f $sshdconfig > $sshdlog 2>&1";
 +logmsg "SCP/SFTP server listening on port $port" if($verbose);
 +logmsg "RUN: $cmd" if($verbose);
 +
 +#***************************************************************************
 +# Start the ssh server daemon on Windows without forking it
 +#
 +if ($sshdid =~ /OpenSSH-Windows/) {
 +    # Fake pidfile for ssh server on Windows.
 +    if(open(OUT, ">$pidfile")) {
 +        print OUT $$ . "\n";
 +        close(OUT);
 +    }
 +
 +    # Put an "exec" in front of the command so that the child process
 +    # keeps this child's process ID by being tied to the spawned shell.
 +    exec("exec $cmd") || die "Can't exec() $cmd: $!";
 +    # exec() will create a new process, but ties the existence of the
 +    # new process to the parent waiting perl.exe and sh.exe processes.
 +
 +    # exec() should never return back here to this process. We protect
 +    # ourselves by calling die() just in case something goes really bad.
 +    die "error: exec() has returned";
 +}
 +
 +#***************************************************************************
 +# Start the ssh server daemon without forking it
 +#
 +my $rc = system($cmd);
 +if($rc == -1) {
 +    logmsg "\"$sshd\" failed with: $!";
 +}
 +elsif($rc & 127) {
 +    logmsg sprintf("\"$sshd\" died with signal %d, and %s coredump",
 +                   ($rc & 127), ($rc & 128)?'a':'no');
 +}
 +elsif($verbose && ($rc >> 8)) {
 +    logmsg sprintf("\"$sshd\" exited with %d", $rc >> 8);
 +}
 +
 +
 +#***************************************************************************
 +# Clean up once the server has stopped
 +#
 +unlink($hstprvkeyf, $hstpubkeyf, $hstpubmd5f,
 +       $cliprvkeyf, $clipubkeyf, $knownhosts,
 +       $sshdconfig, $sshconfig, $sftpconfig);
 +
 +exit 0;
diff --cc tests/symbol-scan.pl.in
index a9853c2c4,000000000..5d8bad168
mode 100755,000000..100755
--- a/tests/symbol-scan.pl.in
+++ b/tests/symbol-scan.pl.in
@@@ -1,183 -1,0 +1,183 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2010 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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 script grew out of help from Przemyslaw Iskra and Balint Szilakszi
 +# a late evening in the #curl IRC channel on freenode.
 +#
 +
 +use strict;
 +use warnings;
 +use vars qw($Cpreprocessor);
 +
 +#
 +# configurehelp perl module is generated by configure script
 +#
 +my $rc = eval {
 +    require configurehelp;
 +    configurehelp->import(qw(
 +        $Cpreprocessor
 +    ));
 +    1;
 +};
 +# Set default values if configure has not generated a configurehelp.pm file.
 +# This is the case with cmake.
 +if (!$rc) {
 +    $Cpreprocessor = 'cpp';
 +}
 +
 +# we may get the dir root pointed out
 +my $root=$ARGV[0] || ".";
 +
 +# need an include directory when building out-of-tree
 +my $i = ($ARGV[1]) ? "-I$ARGV[1] " : '';
 +
 +my $h = "$root/include/gnurl/curl.h";
 +my $mh = "$root/include/gnurl/multi.h";
 +my $ua = "$root/include/gnurl/urlapi.h";
 +
 +my $verbose=0;
 +my $summary=0;
 +my $misses=0;
 +
 +my @syms;
 +my %doc;
 +my %rem;
 +
 +open H_IN, "-|", "$Cpreprocessor $i$h" || die "Cannot preprocess curl.h";
 +while ( <H_IN> ) {
 +    if ( /enum\s+(\S+\s+)?{/ .. /}/ ) {
 +        s/^\s+//;
 +        next unless /^CURL/;
 +        chomp;
 +        s/[,\s].*//;
 +        push @syms, $_;
 +    }
 +}
 +close H_IN || die "Error preprocessing curl.h";
 +
 +sub scanheader {
 +    my ($f)=@_;
 +    open H, "<$f";
 +    while(<H>) {
 +        if (/^#define (CURL[A-Za-z0-9_]*)/) {
 +            push @syms, $1;
 +        }
 +    }
 +    close H;
 +}
 +
 +scanheader($h);
 +scanheader($mh);
 +scanheader($ua);
 +
 +open S, "<$root/docs/libcurl/symbols-in-versions";
 +while(<S>) {
 +    if(/(^CURL[^ \n]*) *(.*)/) {
 +        my ($sym, $rest)=($1, $2);
 +        if($doc{$sym}) {
 +            print "Detected duplicate symbol: $sym\n";
 +            $misses++;
 +            next;
 +        }
 +        $doc{$sym}=$sym;
 +        my @a=split(/ +/, $rest);
 +        if($a[2]) {
 +            # this symbol is documented to have been present the last time
 +            # in this release
 +            $rem{$sym}=$a[2];
 +        }
 +    }
 +}
 +close S;
 +
 +my $ignored=0;
 +for my $e (sort @syms) {
 +    # OBSOLETE - names that are just placeholders for a position where we
 +    # previously had a name, that is now removed. The OBSOLETE names should
 +    # never be used for anything.
 +    #
 +    # CURL_EXTERN - is a define used for libcurl functions that are external,
 +    # public. No app or other code should ever use it.
 +    #
 +    # CURLINC_ - defines for header dual-include prevention, ignore those.
 +    #
 +    # *_LAST and *_LASTENTRY are just prefix for the placeholders used for the
 +    # last entry in many enum series.
 +    #
 +
 +    if($e =~ /(OBSOLETE|^CURL_EXTERN|^CURLINC_|_LAST\z|_LASTENTRY\z)/) {
 +        $ignored++;
 +        next;
 +    }
 +    if($doc{$e}) {
 +        if($verbose) {
 +            print $e."\n";
 +        }
 +        $doc{$e}="used";
 +        next;
 +    }
 +    else {
 +        print $e."\n";
 +        $misses++;
 +    }
 +}
 +
 +#
 +# now scan through all symbols that were present in the symbols-in-versions
 +# but not in the headers
 +#
 +# If the symbols were marked 'removed' in symbols-in-versions we don't output
 +# anything about it since that is perfectly fine.
 +#
 +
 +my $anyremoved;
 +
 +for my $e (sort keys %doc) {
 +    if(($doc{$e} ne "used") && !$rem{$e}) {
 +
 +        if(!$anyremoved++) {
 +            print "Missing symbols mentioned in symbols-in-versions\n";
 +            print "Add them to a header, or mark them as removed.\n";
 +        }
 +
 +        print "$e\n";
 +        $misses++;
 +    }
 +}
 +
 +if($summary) {
 +    print "Summary:\n";
 +    printf "%d symbols in headers (out of which %d are ignored)\n", 
scalar(@syms),
 +    $ignored;
 +    printf "%d symbols in headers are interesting\n",
 +    scalar(@syms)- $ignored;
 +    printf "%d symbols are listed in symbols-in-versions\n (out of which %d 
are listed as removed)\n", scalar(keys %doc), scalar(keys %rem);
 +    printf "%d symbols in symbols-in-versions should match the ones in 
headers\n", scalar(keys %doc) - scalar(keys %rem);
 +}
 +
 +if($misses) {
-     exit 2; # there are stuff to attend to!
++    exit 0; # there are stuff to attend to!
 +}
 +else {
 +    print "OK\n";
 +}
diff --cc tests/testcurl.pl.in
index b1008f606,000000000..de30edf07
mode 100755,000000..100755
--- a/tests/testcurl.pl.in
+++ b/tests/testcurl.pl.in
@@@ -1,814 -1,0 +1,806 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +
 +###########################
 +#  What is This Script?
 +###########################
 +
 +# testcurl.pl is the master script to use for automatic testing of curl
 +# directly off its source repository.
 +# This is written for the purpose of being run from a crontab job or similar
 +# at a regular interval. The output is suitable to be mailed to
 +# curl-autocompile@haxx.se to be dealt with automatically (make sure the
 +# subject includes the word "autobuild" as the mail gets silently discarded
 +# otherwise).  The most current build status (with a reasonable backlog) will
- # be published on the curl site, at https://curl.haxx.se/auto/
++# be published on the curl site, at https://curl.se/auto/
 +
 +# USAGE:
 +# testcurl.pl [options] [curl-daily-name] > output
 +
 +# Options:
 +#
 +# --configure=[options]    Configure options
 +# --crosscompile           This is a crosscompile
 +# --desc=[desc]            Description of your test system
 +# --email=[email]          Set email address to report as
 +# --extvercmd=[command]    Command to use for displaying version with cross 
compiles.
 +# --mktarball=[command]    Command to run after completed test
 +# --name=[name]            Set name to report as
 +# --notes=[notes]          More human-readable information about this 
configuration
 +# --nocvsup                Don't pull from git even though it is a git tree
 +# --nogitpull              Don't pull from git even though it is a git tree
 +# --nobuildconf            Don't run buildconf
 +# --noconfigure            Don't run configure
 +# --runtestopts=[options]  Options to pass to runtests.pl
 +# --setup=[file name]      File name to read setup from (deprecated)
 +# --target=[your os]       Specify your target environment.
 +#
 +# if [curl-daily-name] is omitted, a 'curl' git directory is assumed.
 +#
 +
 +use strict;
 +
 +use Cwd;
 +use File::Spec;
 +
 +# Turn on warnings (equivalent to -w, which can't be used with /usr/bin/env)
 +#BEGIN { $^W = 1; }
 +
 +use vars qw($version $fixed $infixed $CURLDIR $git $pwd $build $buildlog
 +            $buildlogname $configurebuild $targetos $confheader $binext
 +            $libext);
 +
 +use vars qw($name $email $desc $confopts $runtestopts $setupfile $mktarball
 +            $extvercmd $nogitpull $nobuildconf $crosscompile
 +            $timestamp $notes);
 +
 +# version of this script
 +$version='2014-11-25';
 +$fixed=0;
 +
 +# Determine if we're running from git or a canned copy of curl,
 +# or if we got a specific target option or setup file option.
 +$CURLDIR="curl";
 +if (-f ".git/config") {
 +  $CURLDIR = "./";
 +}
 +
 +$git=1;
 +$setupfile = 'setup';
 +$configurebuild = 1;
 +while ($ARGV[0]) {
 +  if ($ARGV[0] =~ /--target=/) {
 +    $targetos = (split(/=/, shift @ARGV, 2))[1];
 +  }
 +  elsif ($ARGV[0] =~ /--setup=/) {
 +    $setupfile = (split(/=/, shift @ARGV, 2))[1];
 +  }
 +  elsif ($ARGV[0] =~ /--extvercmd=/) {
 +    $extvercmd = (split(/=/, shift @ARGV, 2))[1];
 +  }
 +  elsif ($ARGV[0] =~ /--mktarball=/) {
 +    $mktarball = (split(/=/, shift @ARGV, 2))[1];
 +  }
 +  elsif ($ARGV[0] =~ /--name=/) {
 +    $name = (split(/=/, shift @ARGV, 2))[1];
 +  }
 +  elsif ($ARGV[0] =~ /--email=/) {
 +    $email = (split(/=/, shift @ARGV, 2))[1];
 +  }
 +  elsif ($ARGV[0] =~ /--desc=/) {
 +    $desc = (split(/=/, shift @ARGV, 2))[1];
 +  }
 +  elsif ($ARGV[0] =~ /--notes=/) {
 +    $notes = (split(/=/, shift @ARGV, 2))[1];
 +  }
 +  elsif ($ARGV[0] =~ /--configure=(.*)/) {
 +    $confopts = $1;
 +    shift @ARGV;
 +  }
 +  elsif (($ARGV[0] eq "--nocvsup") || ($ARGV[0] eq "--nogitpull")) {
 +    $nogitpull=1;
 +    shift @ARGV;
 +  }
 +  elsif ($ARGV[0] =~ /--nobuildconf/) {
 +    $nobuildconf=1;
 +    shift @ARGV;
 +  }
 +  elsif ($ARGV[0] =~ /--noconfigure/) {
 +    $configurebuild=0;
 +    shift @ARGV;
 +  }
 +  elsif ($ARGV[0] =~ /--crosscompile/) {
 +    $crosscompile=1;
 +    shift @ARGV;
 +  }
 +  elsif ($ARGV[0] =~ /--runtestopts=/) {
 +    $runtestopts = (split(/=/, shift @ARGV, 2))[1];
 +  }
 +  else {
 +    $CURLDIR=shift @ARGV;
 +    $git=0; # a given dir, assume not using git
 +  }
 +}
 +
 +# Do the platform-specific stuff here
 +$confheader = 'curl_config.h';
 +$binext = '';
 +$libext = '.la'; # .la since both libcurl and libcares are made with libtool
 +if ($^O eq 'MSWin32' || $targetos) {
 +  if (!$targetos) {
 +    # If no target defined on Win32 lets assume vc
 +    $targetos = 'vc';
 +  }
 +  if ($targetos =~ /vc/ || $targetos =~ /borland/ || $targetos =~ /watcom/) {
 +    $binext = '.exe';
 +    $libext = '.lib';
 +  }
 +  elsif ($targetos =~ /mingw/) {
 +    $binext = '.exe';
 +    if ($^O eq 'MSWin32') {
 +      $libext = '.a';
 +    }
 +  }
 +  elsif ($targetos =~ /netware/) {
 +    $configurebuild = 0;
 +    $binext = '.nlm';
 +    if ($^O eq 'MSWin32') {
 +      $libext = '.lib';
 +    }
 +    else {
 +      $libext = '.a';
 +    }
 +  }
 +}
 +
 +if (($^O eq 'MSWin32' || $^O eq 'cygwin' || $^O eq 'msys') &&
 +    ($targetos =~ /vc/ || $targetos =~ /mingw32/ ||
 +     $targetos =~ /borland/ || $targetos =~ /watcom/)) {
 +
 +  # Set these things only when building ON Windows and for Win32 platform.
 +  # FOR Windows since we might be cross-compiling on another system. Non-
 +  # Windows builds still default to configure-style builds with curl_config.h.
 +
 +  $configurebuild = 0;
 +  $confheader = 'config-win32.h';
 +}
 +
 +$ENV{LC_ALL}="C" if (($ENV{LC_ALL}) && ($ENV{LC_ALL} !~ /^C$/));
 +$ENV{LC_CTYPE}="C" if (($ENV{LC_CTYPE}) && ($ENV{LC_CTYPE} !~ /^C$/));
 +$ENV{LANG}="C";
 +
 +sub rmtree($) {
 +    my $target = $_[0];
 +    if ($^O eq 'MSWin32') {
 +      foreach (glob($target)) {
 +        s:/:\\:g;
 +        system("rd /s /q $_");
 +      }
 +    } else {
 +      system("rm -rf $target");
 +    }
 +}
 +
 +sub grepfile($$) {
 +    my ($target, $fn) = @_;
 +    open(F, $fn) or die;
 +    while (<F>) {
 +      if (/$target/) {
 +        close(F);
 +        return 1;
 +      }
 +    }
 +    close(F);
 +    return 0;
 +}
 +
 +sub logit($) {
 +    my $text=$_[0];
 +    if ($text) {
 +      print "testcurl: $text\n";
 +    }
 +}
 +
 +sub logit_spaced($) {
 +    my $text=$_[0];
 +    if ($text) {
 +      print "\ntestcurl: $text\n\n";
 +    }
 +}
 +
 +sub mydie($){
 +    my $text=$_[0];
 +    logit "$text";
 +    chdir $pwd; # cd back to the original root dir
 +
 +    if ($pwd && $build) {
 +      # we have a build directory name, remove the dir
 +      logit "removing the $build dir";
 +      rmtree "$pwd/$build";
 +    }
 +    if (-r $buildlog) {
 +      # we have a build log output file left, remove it
 +      logit "removing the $buildlogname file";
 +      unlink "$buildlog";
 +    }
 +    logit "ENDING HERE"; # last line logged!
 +    exit 1;
 +}
 +
 +sub get_host_triplet {
 +  my $triplet;
 +  my $configfile = "$pwd/$build/lib/curl_config.h";
 +
 +  if(-f $configfile && -s $configfile && open(LIBCONFIGH, "<$configfile")) {
 +    while(<LIBCONFIGH>) {
 +      if($_ =~ /^\#define\s+OS\s+"*([^"][^"]*)"*\s*/) {
 +        $triplet = $1;
 +        last;
 +      }
 +    }
 +    close(LIBCONFIGH);
 +  }
 +  return $triplet;
 +}
 +
 +if($name && $email && $desc) {
 +  # having these fields set are enough to continue, skip reading the setup
 +  # file
 +  $infixed=4;
 +  $fixed=4;
 +}
 +elsif (open(F, "$setupfile")) {
 +  while (<F>) {
 +    if (/(\w+)=(.*)/) {
 +      eval "\$$1=$2;";
 +    }
 +  }
 +  close(F);
 +  $infixed=$fixed;
 +}
 +else {
 +  $infixed=0;    # so that "additional args to configure" works properly 
first time...
 +}
 +
 +if (!$name) {
 +  print "please enter your name\n";
 +  $name = <>;
 +  chomp $name;
 +  $fixed=1;
 +}
 +
 +if (!$email) {
 +  print "please enter your contact email address\n";
 +  $email = <>;
 +  chomp $email;
 +  $fixed=2;
 +}
 +
 +if (!$desc) {
 +  print "please enter a one line system description\n";
 +  $desc = <>;
 +  chomp $desc;
 +  $fixed=3;
 +}
 +
 +if (!$confopts) {
 +  if ($infixed < 4) {
 +    print "please enter your additional arguments to configure\n";
 +    print "examples: --with-ssl --enable-debug --enable-ipv6 --with-krb4\n";
 +    $confopts = <>;
 +    chomp $confopts;
 +  }
 +}
 +
 +
 +if ($fixed < 4) {
 +    $fixed=4;
 +    open(F, ">$setupfile") or die;
 +    print F "name='$name'\n";
 +    print F "email='$email'\n";
 +    print F "desc='$desc'\n";
 +    print F "confopts='$confopts'\n";
 +    print F "notes='$notes'\n";
 +    print F "fixed='$fixed'\n";
 +    close(F);
 +}
 +
 +# Enable picky compiler warnings unless explicitly disabled
 +if (($confopts !~ /--enable-debug/) &&
 +    ($confopts !~ /--enable-warnings/) &&
 +    ($confopts !~ /--disable-warnings/)) {
 +  $confopts .= " --enable-warnings";
 +}
 +
 +my $str1066os = 'o' x 1066;
 +
 +# Set timestamp to the UTC this script is running. Its value might
 +# be changed later in the script to the value present in curlver.h
 +$timestamp = scalar(gmtime)." UTC";
 +
 +logit "STARTING HERE"; # first line logged, for scripts to trigger on
 +logit 'TRANSFER CONTROL ==== 1120 CHAR LINE' . $str1066os . 'LINE_END';
 +logit "NAME = $name";
 +logit "EMAIL = $email";
 +logit "DESC = $desc";
 +logit "NOTES = $notes";
 +logit "CONFOPTS = $confopts";
 +logit "RUNTESTOPTS = ".$runtestopts;
 +logit "CPPFLAGS = ".$ENV{CPPFLAGS};
 +logit "CFLAGS = ".$ENV{CFLAGS};
 +logit "LDFLAGS = ".$ENV{LDFLAGS};
 +logit "LIBS = ".$ENV{LIBS};
 +logit "CC = ".$ENV{CC};
 +logit "TMPDIR = ".$ENV{TMPDIR};
 +logit "MAKEFLAGS = ".$ENV{MAKEFLAGS};
 +logit "ACLOCAL_FLAGS = ".$ENV{ACLOCAL_FLAGS};
 +logit "PKG_CONFIG_PATH = ".$ENV{PKG_CONFIG_PATH};
 +logit "DYLD_LIBRARY_PATH = ".$ENV{DYLD_LIBRARY_PATH};
 +logit "LD_LIBRARY_PATH = ".$ENV{LD_LIBRARY_PATH};
 +logit "LIBRARY_PATH = ".$ENV{LIBRARY_PATH};
 +logit "SHLIB_PATH = ".$ENV{SHLIB_PATH};
 +logit "LIBPATH = ".$ENV{LIBPATH};
 +logit "target = ".$targetos;
 +logit "version = $version"; # script version
 +logit "date = $timestamp";  # When the test build starts
 +
 +$str1066os = undef;
 +
 +# Make $pwd to become the path without newline. We'll use that in order to cut
 +# off that path from all possible logs and error messages etc.
 +$pwd = getcwd();
 +
 +my $have_embedded_ares = 0;
 +
 +if (-d $CURLDIR) {
 +  if ($git && -d "$CURLDIR/.git") {
 +    logit "$CURLDIR is verified to be a fine git source dir";
 +    # remove the generated sources to force them to be re-generated each
 +    # time we run this test
 +    unlink "$CURLDIR/src/tool_hugehelp.c";
 +    # find out if curl source dir has an in-tree c-ares repo
 +    $have_embedded_ares = 1 if (-f "$CURLDIR/ares/GIT-INFO");
 +  } elsif (!$git && -f "$CURLDIR/tests/testcurl.pl") {
 +    logit "$CURLDIR is verified to be a fine daily source dir";
 +    # find out if curl source dir has an in-tree c-ares extracted tarball
 +    $have_embedded_ares = 1 if (-f "$CURLDIR/ares/ares_build.h");
 +  } else {
 +    mydie "$CURLDIR is not a daily source dir or checked out from git!"
 +  }
 +}
 +
 +# make the path absolute so we can use it everywhere
 +$CURLDIR = File::Spec->rel2abs("$CURLDIR");
 +
 +$build="build-$$";
 +$buildlogname="buildlog-$$";
 +$buildlog="$pwd/$buildlogname";
 +
 +# remove any previous left-overs
 +rmtree "build-*";
 +rmtree "buildlog-*";
 +
 +# this is to remove old build logs that ended up in the wrong dir
 +foreach (glob("$CURLDIR/buildlog-*")) { unlink $_; }
 +
 +# create a dir to build in
 +mkdir $build, 0777;
 +
 +if (-d $build) {
 +  logit "build dir $build was created fine";
 +} else {
 +  mydie "failed to create dir $build";
 +}
 +
 +# get in the curl source tree root
 +chdir $CURLDIR;
 +
 +# Do the git thing, or not...
 +if ($git) {
 +  my $gitstat = 0;
 +  my @commits;
 +
 +  # update quietly to the latest git
 +  if($nogitpull) {
 +    logit "skipping git pull (--nogitpull)";
 +  } else {
 +    logit "run git pull in curl";
 +    system("git pull 2>&1");
 +    $gitstat += $?;
 +    logit "failed to update from curl git ($?), continue anyway" if ($?);
 +
 +    # Set timestamp to the UTC the git update took place.
 +    $timestamp = scalar(gmtime)." UTC" if (!$gitstat);
 +  }
 +
 +  # get the last 5 commits for show (even if no pull was made)
 +  @commits=`git log --pretty=oneline --abbrev-commit -5`;
 +  logit "The most recent curl git commits:";
 +  for (@commits) {
 +    chomp ($_);
 +    logit "  $_";
 +  }
 +
 +  if (-d "ares/.git") {
 +    chdir "ares";
 +
 +    if($nogitpull) {
 +      logit "skipping git pull (--nogitpull) in ares";
 +    } else {
 +      logit "run git pull in ares";
 +      system("git pull 2>&1");
 +      $gitstat += $?;
 +      logit "failed to update from ares git ($?), continue anyway" if ($?);
 +
 +      # Set timestamp to the UTC the git update took place.
 +      $timestamp = scalar(gmtime)." UTC" if (!$gitstat);
 +    }
 +
 +    # get the last 5 commits for show (even if no pull was made)
 +    @commits=`git log --pretty=oneline --abbrev-commit -5`;
 +    logit "The most recent ares git commits:";
 +    for (@commits) {
 +      chomp ($_);
 +      logit "  $_";
 +    }
 +
 +    chdir "$CURLDIR";
 +  }
 +
 +  if($nobuildconf) {
 +    logit "told to not run buildconf";
 +  }
 +  elsif ($configurebuild) {
 +    # remove possible left-overs from the past
 +    unlink "configure";
 +    unlink "autom4te.cache";
 +
 +    # generate the build files
 +    logit "invoke buildconf";
 +    open(F, "./buildconf 2>&1 |") or die;
 +    open(LOG, ">$buildlog") or die;
 +    while (<F>) {
 +      my $ll = $_;
-       # ignore messages pertaining to third party m4 files we don't care
-       next if ($ll =~ /aclocal\/gtk\.m4/);
-       next if ($ll =~ /aclocal\/gtkextra\.m4/);
 +      print $ll;
 +      print LOG $ll;
 +    }
 +    close(F);
 +    close(LOG);
 +
-     if (grepfile("^buildconf: OK", $buildlog)) {
-       logit "buildconf was successful";
-     }
-     else {
-       mydie "buildconf was NOT successful";
-     }
++    logit "buildconf was successful";
 +  }
 +  else {
 +    logit "buildconf was successful (dummy message)";
 +  }
 +}
 +
 +# Set timestamp to the one in curlver.h if this isn't a git test build.
 +if ((-f "include/gnurl/curlver.h") &&
 +    (open(F, "<include/gnurl/curlver.h"))) {
 +  while (<F>) {
 +    chomp;
 +    if ($_ =~ /^\#define\s+LIBCURL_TIMESTAMP\s+\"(.+)\".*$/) {
 +      my $stampstring = $1;
 +      if ($stampstring !~ /DEV/) {
 +          $stampstring =~ s/\s+UTC//;
 +          $timestamp = $stampstring." UTC";
 +      }
 +      last;
 +    }
 +  }
 +  close(F);
 +}
 +
 +# Show timestamp we are using for this test build.
 +logit "timestamp = $timestamp";
 +
 +if ($configurebuild) {
 +  if (-f "configure") {
 +    logit "configure created (at least it exists)";
 +  } else {
 +    mydie "no configure created/found";
 +  }
 +} else {
 +  logit "configure created (dummy message)"; # dummy message to feign success
 +}
 +
 +sub findinpath {
 +  my $c;
 +  my $e;
 +  my $x = ($^O eq 'MSWin32') ? '.exe' : '';
 +  my $s = ($^O eq 'MSWin32') ? ';' : ':';
 +  my $p=$ENV{'PATH'};
 +  my @pa = split($s, $p);
 +  for $c (@_) {
 +    for $e (@pa) {
 +      if( -x "$e/$c$x") {
 +        return $c;
 +      }
 +    }
 +  }
 +}
 +
 +my $make = findinpath("gmake", "make", "nmake");
 +if(!$make) {
 +    mydie "Couldn't find make in the PATH";
 +}
 +# force to 'nmake' for VC builds
 +$make = "nmake" if ($targetos =~ /vc/);
 +# force to 'wmake' for Watcom builds
 +$make = "wmake" if ($targetos =~ /watcom/);
 +logit "going with $make as make";
 +
 +# change to build dir
 +chdir "$pwd/$build";
 +
 +if ($configurebuild) {
 +  # run configure script
 +  print `$CURLDIR/configure $confopts 2>&1`;
 +
 +  if (-f "lib/Makefile") {
 +    logit "configure seems to have finished fine";
 +  } else {
 +    mydie "configure didn't work";
 +  }
 +} else {
 +  logit "copying files to build dir ...";
 +  if (($^O eq 'MSWin32') && ($targetos !~ /netware/)) {
 +    system("xcopy /s /q \"$CURLDIR\" .");
 +    system("buildconf.bat");
 +  }
 +  elsif ($targetos =~ /netware/) {
 +    system("cp -afr $CURLDIR/* .");
 +    system("cp -af $CURLDIR/Makefile.dist Makefile");
 +    system("$make -i -C lib -f Makefile.netware prebuild");
 +    system("$make -i -C src -f Makefile.netware prebuild");
 +    if (-d "$CURLDIR/ares") {
 +      system("$make -i -C ares -f Makefile.netware prebuild");
 +    }
 +  }
 +  elsif ($^O eq 'linux') {
 +    system("cp -afr $CURLDIR/* .");
 +    system("cp -af $CURLDIR/Makefile.dist Makefile");
 +    system("$make -i -C lib -f Makefile.$targetos prebuild");
 +    system("$make -i -C src -f Makefile.$targetos prebuild");
 +    if (-d "$CURLDIR/ares") {
 +      system("cp -af $CURLDIR/ares/ares_build.h.dist ./ares/ares_build.h");
 +      system("$make -i -C ares -f Makefile.$targetos prebuild");
 +    }
 +  }
 +}
 +
 +if(-f "./libcurl.pc") {
 +  logit_spaced "display libcurl.pc";
 +  if(open(F, "<./libcurl.pc")) {
 +    while(<F>) {
 +      my $ll = $_;
 +      print $ll if(($ll !~ /^ *#/) && ($ll !~ /^ *$/));
 +    }
 +    close(F);
 +  }
 +}
 +
 +logit_spaced "display lib/$confheader";
 +open(F, "lib/$confheader") or die "lib/$confheader: $!";
 +while (<F>) {
 +  print if /^ *#/;
 +}
 +close(F);
 +
 +if (($have_embedded_ares) &&
 +    (grepfile("^#define USE_ARES", "lib/$confheader"))) {
 +  print "\n";
 +  logit "setup to build ares";
 +
 +  if(-f "./ares/libcares.pc") {
 +    logit_spaced  "display ares/libcares.pc";
 +    if(open(F, "<./ares/libcares.pc")) {
 +      while(<F>) {
 +        my $ll = $_;
 +        print $ll if(($ll !~ /^ *#/) && ($ll !~ /^ *$/));
 +      }
 +      close(F);
 +    }
 +  }
 +
 +  if(-f "./ares/ares_build.h") {
 +    logit_spaced "display ares/ares_build.h";
 +    if(open(F, "<./ares/ares_build.h")) {
 +      while(<F>) {
 +        my $ll = $_;
 +        print $ll if(($ll =~ /^ *# *define *CARES_/) && ($ll !~ 
/__CARES_BUILD_H/));
 +      }
 +      close(F);
 +    }
 +  }
 +  else {
 +    mydie "no ares_build.h created/found";
 +  }
 +
 +  $confheader =~ s/curl/ares/;
 +  logit_spaced "display ares/$confheader";
 +  if(open(F, "ares/$confheader")) {
 +      while (<F>) {
 +          print if /^ *#/;
 +      }
 +      close(F);
 +  }
 +
 +  print "\n";
 +  logit "build ares";
 +  chdir "ares";
 +
 +  if ($targetos && !$configurebuild) {
 +      logit "$make -f Makefile.$targetos";
 +      open(F, "$make -f Makefile.$targetos 2>&1 |") or die;
 +  }
 +  else {
 +      logit "$make";
 +      open(F, "$make 2>&1 |") or die;
 +  }
 +  while (<F>) {
 +    s/$pwd//g;
 +    print;
 +  }
 +  close(F);
 +
 +  if (-f "libcares$libext") {
 +    logit "ares is now built successfully (libcares$libext)";
 +  } else {
 +    mydie "ares build failed (libcares$libext)";
 +  }
 +
 +  # cd back to the curl build dir
 +  chdir "$pwd/$build";
 +}
 +
 +my $mkcmd = "$make -i" . ($targetos && !$configurebuild ? " $targetos" : "");
 +logit "$mkcmd";
 +open(F, "$mkcmd 2>&1 |") or die;
 +while (<F>) {
 +  s/$pwd//g;
 +  print;
 +}
 +close(F);
 +
 +if (-f "lib/libcurl$libext") {
 +  logit "libcurl was created fine (libcurl$libext)";
 +}
 +else {
 +  mydie "libcurl was not created (libcurl$libext)";
 +}
 +
 +if (-f "src/curl$binext") {
 +  logit "curl was created fine (curl$binext)";
 +}
 +else {
 +  mydie "curl was not created (curl$binext)";
 +}
 +
 +if (!$crosscompile || (($extvercmd ne '') && (-x $extvercmd))) {
 +  logit "display curl${binext} --version output";
 +  my $cmd = ($extvercmd ne '' ? $extvercmd.' ' : '')."./src/curl${binext} 
--version|";
 +  open(F, $cmd);
 +  while(<F>) {
 +    # strip CR from output on non-win32 platforms (wine on Linux)
 +    s/\r// if ($^O ne 'MSWin32');
 +    print;
 +  }
 +  close(F);
 +}
 +
 +if ($configurebuild && !$crosscompile) {
 +  my $host_triplet = get_host_triplet();
 +  # build example programs for selected build targets
 +  if(($host_triplet =~ /([^-]+)-([^-]+)-irix(.*)/) ||
 +     ($host_triplet =~ /([^-]+)-([^-]+)-aix(.*)/) ||
 +     ($host_triplet =~ /([^-]+)-([^-]+)-osf(.*)/) ||
 +     ($host_triplet =~ /([^-]+)-([^-]+)-solaris2(.*)/)) {
 +    chdir "$pwd/$build/docs/examples";
 +    logit_spaced "build examples";
 +    open(F, "$make -i 2>&1 |") or die;
 +    open(LOG, ">$buildlog") or die;
 +    while (<F>) {
 +      s/$pwd//g;
 +      print;
 +      print LOG;
 +    }
 +    close(F);
 +    close(LOG);
 +    chdir "$pwd/$build";
 +  }
 +  # build and run full test suite
 +  my $o;
 +  if($runtestopts) {
 +      $o = "TEST_F=\"$runtestopts\" ";
 +  }
 +  logit "$make -k ${o}test-full";
 +  open(F, "$make -k ${o}test-full 2>&1 |") or die;
 +  open(LOG, ">$buildlog") or die;
 +  while (<F>) {
 +    s/$pwd//g;
 +    print;
 +    print LOG;
 +  }
 +  close(F);
 +  close(LOG);
 +
 +  if (grepfile("^TEST", $buildlog)) {
 +    logit "tests were run";
 +  } else {
 +    mydie "test suite failure";
 +  }
 +
 +  if (grepfile("^TESTFAIL:", $buildlog)) {
 +    logit "the tests were not successful";
 +  } else {
 +    logit "the tests were successful!";
 +  }
 +}
 +else {
 +  if($crosscompile) {
 +    my $host_triplet = get_host_triplet();
 +    # build example programs for selected cross-compiles
 +    if(($host_triplet =~ /([^-]+)-([^-]+)-mingw(.*)/) ||
 +       ($host_triplet =~ /([^-]+)-([^-]+)-android(.*)/)) {
 +      chdir "$pwd/$build/docs/examples";
 +      logit_spaced "build examples";
 +      open(F, "$make -i 2>&1 |") or die;
 +      open(LOG, ">$buildlog") or die;
 +      while (<F>) {
 +        s/$pwd//g;
 +        print;
 +        print LOG;
 +      }
 +      close(F);
 +      close(LOG);
 +      chdir "$pwd/$build";
 +    }
 +    # build test harness programs for selected cross-compiles
 +    if($host_triplet =~ /([^-]+)-([^-]+)-mingw(.*)/) {
 +      chdir "$pwd/$build/tests";
 +      logit_spaced "build test harness";
 +      open(F, "$make -i 2>&1 |") or die;
 +      open(LOG, ">$buildlog") or die;
 +      while (<F>) {
 +        s/$pwd//g;
 +        print;
 +        print LOG;
 +      }
 +      close(F);
 +      close(LOG);
 +      chdir "$pwd/$build";
 +    }
 +    logit_spaced "cross-compiling, can't run tests";
 +  }
 +  # dummy message to feign success
 +  print "TESTDONE: 1 tests out of 0 (dummy message)\n";
 +}
 +
 +# create a tarball if we got that option.
 +if (($mktarball ne '') && (-x $mktarball)) {
 +  system($mktarball);
 +}
 +
 +# mydie to cleanup
 +mydie "ending nicely";
diff --cc tests/tftpserver.pl.in
index 891b0ec40,000000000..a82a58a3a
mode 100755,000000..100755
--- a/tests/tftpserver.pl.in
+++ b/tests/tftpserver.pl.in
@@@ -1,123 -1,0 +1,123 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 1998 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +#***************************************************************************
 +
 +BEGIN {
 +    push(@INC, $ENV{'srcdir'}) if(defined $ENV{'srcdir'});
 +    push(@INC, ".");
 +}
 +
 +use strict;
 +use warnings;
 +
 +use serverhelp qw(
 +    server_pidfilename
 +    server_logfilename
 +    );
 +
 +use sshhelp qw(
 +    exe_ext
 +    );
 +
 +my $verbose = 0;     # set to 1 for debugging
 +my $port = 8997;     # just a default
 +my $ipvnum = 4;      # default IP version of tftp server
 +my $idnum = 1;       # default tftp server instance number
 +my $proto = 'tftp';  # protocol the tftp server speaks
 +my $pidfile;
 +my $portfile;
 +my $logfile;
 +my $srcdir;
 +my $fork;
 +
 +my $flags  = "";
 +my $path   = '.';
 +my $logdir = $path .'/log';
 +
 +while(@ARGV) {
 +    if($ARGV[0] eq '--pidfile') {
 +        if($ARGV[1]) {
 +            $pidfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--portfile') {
 +        if($ARGV[1]) {
 +            $portfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--logfile') {
 +        if($ARGV[1]) {
 +            $logfile = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--srcdir') {
 +        if($ARGV[1]) {
 +            $srcdir = $ARGV[1];
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--ipv4') {
 +        $ipvnum = 4;
 +    }
 +    elsif($ARGV[0] eq '--ipv6') {
 +        $ipvnum = 6;
 +    }
 +    elsif($ARGV[0] eq '--port') {
 +        if($ARGV[1] =~ /^(\d+)$/) {
 +            $port = $1;
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--id') {
 +        if($ARGV[1] =~ /^(\d+)$/) {
 +            $idnum = $1 if($1 > 0);
 +            shift @ARGV;
 +        }
 +    }
 +    elsif($ARGV[0] eq '--verbose') {
 +        $verbose = 1;
 +    }
 +    else {
 +        print STDERR "\nWarning: tftpserver.pl unknown parameter: $ARGV[0]\n";
 +    }
 +    shift @ARGV;
 +}
 +
 +if(!$srcdir) {
 +    $srcdir = $ENV{'srcdir'} || '.';
 +}
 +if(!$pidfile) {
 +    $pidfile = "$path/". server_pidfilename($proto, $ipvnum, $idnum);
 +}
 +if(!$logfile) {
 +    $logfile = server_logfilename($logdir, $proto, $ipvnum, $idnum);
 +}
 +
 +$flags .= "--pidfile \"$pidfile\" ".
 +    "--portfile \"$portfile\" ".
 +    "--logfile \"$logfile\" ";
 +$flags .= "--ipv$ipvnum --port $port --srcdir \"$srcdir\"";
 +
 +exec("server/tftpd".exe_ext('SRV')." $flags");
diff --cc tests/version-scan.pl.in
index 7c56d0501,000000000..c466d1a58
mode 100755,000000..100755
--- a/tests/version-scan.pl.in
+++ b/tests/version-scan.pl.in
@@@ -1,66 -1,0 +1,66 @@@
 +#!AWKPERL
 +#***************************************************************************
 +#                                  _   _ ____  _
 +#  Project                     ___| | | |  _ \| |
 +#                             / __| | | | |_) | |
 +#                            | (__| |_| |  _ <| |___
 +#                             \___|\___/|_| \_\_____|
 +#
 +# Copyright (C) 2010 - 2020, Daniel Stenberg, <daniel@haxx.se>, 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.
++# are also available at https://curl.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.
 +#
 +###########################################################################
 +#
 +# Verify that curl_version_info.3 documents all the CURL_VERSION_ bits
 +# from the header.
 +#
 +
 +use strict;
 +use warnings;
 +
 +my $manpage=$ARGV[0];
 +my $header=$ARGV[1];
 +my %manversion;
 +my %headerversion;
 +my $error;
 +
 +open(M, "<$manpage");
 +while(<M>) {
 +    if($_ =~ /^.ip (CURL_VERSION_[A-Z0-9_]+)/i) {
 +        $manversion{$1}++;
 +    }
 +}
 +close(M);
 +
 +open(H, "<$header");
 +while(<H>) {
 +    if($_ =~ /^\#define (CURL_VERSION_[A-Z0-9_]+)/i) {
 +        $headerversion{$1}++;
 +    }
 +}
 +close(H);
 +
 +for my $h (keys %headerversion) {
 +    if(!$manversion{$h}) {
 +        print STDERR "$manpage: missing $h\n";
 +        $error++;
 +    }
 +}
 +for my $h (keys %manversion) {
 +    if(!$headerversion{$h}) {
 +        print STDERR "$manpage: $h is not in the header!\n";
 +        $error++;
 +    }
 +}
 +
 +exit $error;

-- 
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.



reply via email to

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