From 619e5550ccd2c818884959a926ae521556e65e32 Mon Sep 17 00:00:00 2001 From: Rim Date: Mon, 11 Dec 2023 20:30:44 -0500 Subject: [PATCH] Add deps locally --- deps/GSL | 1 - deps/GSL/.clang-format | 34 + deps/GSL/.gitattributes | 1 + deps/GSL/.github/workflows/android.yml | 50 + .../.github/workflows/cmake_find_package.yml | 25 + deps/GSL/.github/workflows/ios.yml | 52 + deps/GSL/.gitignore | 16 + deps/GSL/CMakeLists.txt | 48 + deps/GSL/CMakeSettings.json | 18 + deps/GSL/CONTRIBUTING.md | 29 + deps/GSL/GSL.natvis | 32 + deps/GSL/LICENSE | 21 + deps/GSL/README.md | 218 + deps/GSL/SECURITY.md | 41 + deps/GSL/ThirdPartyNotices.txt | 41 + deps/GSL/azure-pipelines.yml | 66 + deps/GSL/docs/headers.md | 853 ++ deps/GSL/include/CMakeLists.txt | 13 + deps/GSL/include/gsl/algorithm | 63 + deps/GSL/include/gsl/assert | 133 + deps/GSL/include/gsl/byte | 188 + deps/GSL/include/gsl/gsl | 32 + deps/GSL/include/gsl/narrow | 84 + deps/GSL/include/gsl/pointers | 348 + deps/GSL/include/gsl/span | 849 ++ deps/GSL/include/gsl/span_ext | 214 + deps/GSL/include/gsl/string_span | 4 + deps/GSL/include/gsl/util | 157 + deps/GSL/include/gsl/zstring | 58 + deps/GSL/pipelines/jobs.yml | 43 + deps/GSL/pipelines/setup_apple.yml | 9 + deps/GSL/pipelines/setup_clang.yml | 13 + deps/GSL/pipelines/setup_gcc.yml | 14 + deps/GSL/pipelines/steps.yml | 0 deps/GSL/tests/CMakeLists.txt | 316 + deps/GSL/tests/CMakeLists.txt.in | 14 + deps/GSL/tests/algorithm_tests.cpp | 224 + deps/GSL/tests/assertion_tests.cpp | 60 + deps/GSL/tests/at_tests.cpp | 173 + deps/GSL/tests/byte_tests.cpp | 134 + deps/GSL/tests/deathTestCommon.h | 11 + deps/GSL/tests/no_exception_ensure_tests.cpp | 55 + deps/GSL/tests/notnull_tests.cpp | 636 ++ deps/GSL/tests/owner_tests.cpp | 43 + deps/GSL/tests/span_compatibility_tests.cpp | 1023 ++ deps/GSL/tests/span_ext_tests.cpp | 380 + deps/GSL/tests/span_tests.cpp | 1383 +++ deps/GSL/tests/strict_notnull_tests.cpp | 304 + deps/GSL/tests/utils_tests.cpp | 165 + deps/curl | 1 - deps/curl/.azure-pipelines.yml | 249 + deps/curl/.circleci/config.yml | 540 + deps/curl/.cirrus.yml | 85 + deps/curl/.dcignore | 7 + deps/curl/.dir-locals.el | 33 + deps/curl/.git-blame-ignore-revs | 6 + deps/curl/.gitattributes | 18 + deps/curl/.github/CODEOWNERS | 3 + deps/curl/.github/CONTRIBUTING.md | 29 + deps/curl/.github/FUNDING.yml | 6 + .../.github/ISSUE_TEMPLATE/bug_report.yml | 55 + deps/curl/.github/ISSUE_TEMPLATE/config.yml | 15 + deps/curl/.github/labeler.yml | 493 + deps/curl/.github/lock.yml | 12 + deps/curl/.github/scripts/cleanspell.pl | 79 + .../curl/.github/scripts/codespell-ignore.txt | 15 + deps/curl/.github/scripts/spellcheck.words | 921 ++ deps/curl/.github/scripts/spellcheck.yaml | 32 + deps/curl/.github/scripts/verify-examples.pl | 93 + deps/curl/.github/scripts/verify-synopsis.pl | 81 + deps/curl/.github/stale.yml | 21 + .../.github/workflows/appveyor-status.yml | 41 + deps/curl/.github/workflows/awslc.yml | 152 + .../.github/workflows/codeql-analysis.yml | 80 + deps/curl/.github/workflows/codespell.yml | 36 + .../.github/workflows/configure-vs-cmake.yml | 45 + deps/curl/.github/workflows/distcheck.yml | 122 + deps/curl/.github/workflows/fuzz.yml | 50 + .../workflows/hacktoberfest-accepted.yml | 67 + deps/curl/.github/workflows/label.yml | 26 + deps/curl/.github/workflows/linkcheck.yml | 36 + deps/curl/.github/workflows/linux.yml | 434 + deps/curl/.github/workflows/linux32.yml | 93 + deps/curl/.github/workflows/macos.yml | 242 + deps/curl/.github/workflows/man-examples.yml | 30 + deps/curl/.github/workflows/ngtcp2-linux.yml | 270 + deps/curl/.github/workflows/proselint.yml | 68 + deps/curl/.github/workflows/quiche-linux.yml | 210 + deps/curl/.github/workflows/reuse.yml | 29 + deps/curl/.github/workflows/spellcheck.yml | 66 + deps/curl/.github/workflows/synopsis.yml | 28 + deps/curl/.github/workflows/torture.yml | 92 + deps/curl/.github/workflows/wolfssl.yml | 105 + deps/curl/.gitignore | 67 + deps/curl/.mailmap | 110 + deps/curl/.reuse/dep5 | 98 + deps/curl/CHANGES | 7 + deps/curl/CMake/CMakeConfigurableFile.in | 24 + deps/curl/CMake/CurlSymbolHiding.cmake | 84 + deps/curl/CMake/CurlTests.c | 445 + deps/curl/CMake/FindBearSSL.cmake | 32 + deps/curl/CMake/FindBrotli.cmake | 43 + deps/curl/CMake/FindCARES.cmake | 47 + deps/curl/CMake/FindGSS.cmake | 312 + deps/curl/CMake/FindLibPSL.cmake | 45 + deps/curl/CMake/FindLibSSH2.cmake | 45 + deps/curl/CMake/FindMSH3.cmake | 70 + deps/curl/CMake/FindMbedTLS.cmake | 36 + deps/curl/CMake/FindNGHTTP2.cmake | 41 + deps/curl/CMake/FindNGHTTP3.cmake | 78 + deps/curl/CMake/FindNGTCP2.cmake | 117 + deps/curl/CMake/FindQUICHE.cmake | 70 + deps/curl/CMake/FindWolfSSL.cmake | 36 + deps/curl/CMake/FindZstd.cmake | 78 + deps/curl/CMake/Macros.cmake | 109 + deps/curl/CMake/OtherTests.cmake | 221 + deps/curl/CMake/PickyWarnings.cmake | 216 + deps/curl/CMake/Platforms/WindowsCache.cmake | 187 + deps/curl/CMake/Utilities.cmake | 35 + deps/curl/CMake/cmake_uninstall.cmake.in | 49 + deps/curl/CMake/curl-config.cmake.in | 40 + deps/curl/CMakeLists.txt | 1782 +++ deps/curl/COPYING | 22 + deps/curl/GIT-INFO | 44 + deps/curl/LICENSES/BSD-3-Clause.txt | 11 + deps/curl/LICENSES/BSD-4-Clause-UC.txt | 15 + deps/curl/LICENSES/ISC.txt | 12 + deps/curl/LICENSES/curl.txt | 22 + deps/curl/MacOSX-Framework | 160 + deps/curl/Makefile.am | 539 + deps/curl/Makefile.dist | 92 + deps/curl/README | 55 + deps/curl/README.md | 68 + deps/curl/RELEASE-NOTES | 418 + deps/curl/SECURITY.md | 16 + deps/curl/acinclude.m4 | 1840 ++++ deps/curl/appveyor.yml | 443 + deps/curl/buildconf | 8 + deps/curl/buildconf.bat | 319 + deps/curl/configure.ac | 4857 +++++++++ deps/curl/curl-config.in | 196 + deps/curl/docs/.gitignore | 8 + deps/curl/docs/ALTSVC.md | 44 + deps/curl/docs/BINDINGS.md | 138 + deps/curl/docs/BUFQ.md | 141 + deps/curl/docs/BUFREF.md | 81 + deps/curl/docs/BUG-BOUNTY.md | 78 + deps/curl/docs/BUGS.md | 265 + deps/curl/docs/CHECKSRC.md | 184 + deps/curl/docs/CIPHERS.md | 427 + deps/curl/docs/CMakeLists.txt | 26 + deps/curl/docs/CODE_OF_CONDUCT.md | 32 + deps/curl/docs/CODE_REVIEW.md | 168 + deps/curl/docs/CODE_STYLE.md | 310 + deps/curl/docs/CONNECTION-FILTERS.md | 127 + deps/curl/docs/CONTRIBUTE.md | 316 + deps/curl/docs/CURL-DISABLE.md | 168 + deps/curl/docs/DEPRECATE.md | 48 + deps/curl/docs/DYNBUF.md | 128 + deps/curl/docs/EARLY-RELEASE.md | 67 + deps/curl/docs/EXPERIMENTAL.md | 24 + deps/curl/docs/FAQ | 1561 +++ deps/curl/docs/FEATURES.md | 219 + deps/curl/docs/GOVERNANCE.md | 182 + deps/curl/docs/HELP-US.md | 89 + deps/curl/docs/HISTORY.md | 437 + deps/curl/docs/HSTS.md | 42 + deps/curl/docs/HTTP-COOKIES.md | 147 + deps/curl/docs/HTTP2.md | 102 + deps/curl/docs/HTTP3.md | 379 + deps/curl/docs/HYPER.md | 73 + deps/curl/docs/INSTALL.cmake | 89 + deps/curl/docs/INSTALL.md | 624 ++ deps/curl/docs/INTERNALS.md | 56 + deps/curl/docs/IPFS.md | 82 + deps/curl/docs/KNOWN_BUGS | 604 + deps/curl/docs/MAIL-ETIQUETTE | 285 + deps/curl/docs/MANUAL.md | 1002 ++ deps/curl/docs/MQTT.md | 27 + deps/curl/docs/Makefile.am | 135 + deps/curl/docs/NEW-PROTOCOL.md | 110 + deps/curl/docs/PARALLEL-TRANSFERS.md | 50 + deps/curl/docs/README.md | 12 + deps/curl/docs/RELEASE-PROCEDURE.md | 117 + deps/curl/docs/ROADMAP.md | 24 + deps/curl/docs/RUSTLS.md | 26 + deps/curl/docs/SECURITY-ADVISORY.md | 129 + deps/curl/docs/SSL-PROBLEMS.md | 97 + deps/curl/docs/SSLCERTS.md | 155 + deps/curl/docs/THANKS | 3044 ++++++ deps/curl/docs/THANKS-filter | 139 + deps/curl/docs/TODO | 1394 +++ deps/curl/docs/TheArtOfHttpScripting.md | 712 ++ deps/curl/docs/URL-SYNTAX.md | 391 + deps/curl/docs/VERSIONS.md | 57 + deps/curl/docs/VULN-DISCLOSURE-POLICY.md | 293 + deps/curl/docs/WEBSOCKET.md | 136 + deps/curl/docs/cmdline-opts/CMakeLists.txt | 35 + deps/curl/docs/cmdline-opts/MANPAGE.md | 73 + deps/curl/docs/cmdline-opts/Makefile.am | 41 + deps/curl/docs/cmdline-opts/Makefile.inc | 286 + .../docs/cmdline-opts/abstract-unix-socket.d | 15 + deps/curl/docs/cmdline-opts/alt-svc.d | 21 + deps/curl/docs/cmdline-opts/anyauth.d | 22 + deps/curl/docs/cmdline-opts/append.d | 16 + deps/curl/docs/cmdline-opts/aws-sigv4.d | 22 + deps/curl/docs/cmdline-opts/basic.d | 17 + deps/curl/docs/cmdline-opts/ca-native.d | 21 + deps/curl/docs/cmdline-opts/cacert.d | 35 + deps/curl/docs/cmdline-opts/capath.d | 21 + deps/curl/docs/cmdline-opts/cert-status.d | 19 + deps/curl/docs/cmdline-opts/cert-type.d | 18 + deps/curl/docs/cmdline-opts/cert.d | 49 + deps/curl/docs/cmdline-opts/ciphers.d | 16 + deps/curl/docs/cmdline-opts/compressed-ssh.d | 13 + deps/curl/docs/cmdline-opts/compressed.d | 21 + deps/curl/docs/cmdline-opts/config.d | 77 + deps/curl/docs/cmdline-opts/connect-timeout.d | 22 + deps/curl/docs/cmdline-opts/connect-to.d | 24 + deps/curl/docs/cmdline-opts/continue-at.d | 20 + deps/curl/docs/cmdline-opts/cookie-jar.d | 31 + deps/curl/docs/cmdline-opts/cookie.d | 42 + deps/curl/docs/cmdline-opts/create-dirs.d | 19 + .../curl/docs/cmdline-opts/create-file-mode.d | 17 + deps/curl/docs/cmdline-opts/crlf.d | 15 + deps/curl/docs/cmdline-opts/crlfile.d | 14 + deps/curl/docs/cmdline-opts/curves.d | 22 + deps/curl/docs/cmdline-opts/data-ascii.d | 13 + deps/curl/docs/cmdline-opts/data-binary.d | 25 + deps/curl/docs/cmdline-opts/data-raw.d | 15 + deps/curl/docs/cmdline-opts/data-urlencode.d | 42 + deps/curl/docs/cmdline-opts/data.d | 41 + deps/curl/docs/cmdline-opts/delegation.d | 24 + deps/curl/docs/cmdline-opts/digest.d | 15 + deps/curl/docs/cmdline-opts/disable-eprt.d | 25 + deps/curl/docs/cmdline-opts/disable-epsv.d | 23 + deps/curl/docs/cmdline-opts/disable.d | 17 + .../cmdline-opts/disallow-username-in-url.d | 13 + deps/curl/docs/cmdline-opts/dns-interface.d | 16 + deps/curl/docs/cmdline-opts/dns-ipv4-addr.d | 16 + deps/curl/docs/cmdline-opts/dns-ipv6-addr.d | 16 + deps/curl/docs/cmdline-opts/dns-servers.d | 16 + deps/curl/docs/cmdline-opts/doh-cert-status.d | 11 + deps/curl/docs/cmdline-opts/doh-insecure.d | 11 + deps/curl/docs/cmdline-opts/doh-url.d | 21 + deps/curl/docs/cmdline-opts/dump-header.d | 21 + deps/curl/docs/cmdline-opts/egd-file.d | 17 + deps/curl/docs/cmdline-opts/engine.d | 15 + deps/curl/docs/cmdline-opts/etag-compare.d | 23 + deps/curl/docs/cmdline-opts/etag-save.d | 16 + .../docs/cmdline-opts/expect100-timeout.d | 19 + deps/curl/docs/cmdline-opts/fail-early.d | 25 + deps/curl/docs/cmdline-opts/fail-with-body.d | 20 + deps/curl/docs/cmdline-opts/fail.d | 22 + deps/curl/docs/cmdline-opts/false-start.d | 18 + deps/curl/docs/cmdline-opts/form-escape.d | 13 + deps/curl/docs/cmdline-opts/form-string.d | 17 + deps/curl/docs/cmdline-opts/form.d | 134 + deps/curl/docs/cmdline-opts/ftp-account.d | 14 + .../cmdline-opts/ftp-alternative-to-user.d | 16 + deps/curl/docs/cmdline-opts/ftp-create-dirs.d | 14 + deps/curl/docs/cmdline-opts/ftp-method.d | 30 + deps/curl/docs/cmdline-opts/ftp-pasv.d | 20 + deps/curl/docs/cmdline-opts/ftp-port.d | 41 + deps/curl/docs/cmdline-opts/ftp-pret.d | 14 + .../curl/docs/cmdline-opts/ftp-skip-pasv-ip.d | 18 + .../curl/docs/cmdline-opts/ftp-ssl-ccc-mode.d | 16 + deps/curl/docs/cmdline-opts/ftp-ssl-ccc.d | 15 + deps/curl/docs/cmdline-opts/ftp-ssl-control.d | 14 + deps/curl/docs/cmdline-opts/gen.pl | 750 ++ deps/curl/docs/cmdline-opts/get.d | 20 + deps/curl/docs/cmdline-opts/globoff.d | 15 + .../cmdline-opts/happy-eyeballs-timeout-ms.d | 21 + .../curl/docs/cmdline-opts/haproxy-clientip.d | 29 + .../curl/docs/cmdline-opts/haproxy-protocol.d | 17 + deps/curl/docs/cmdline-opts/head.d | 15 + deps/curl/docs/cmdline-opts/header.d | 57 + deps/curl/docs/cmdline-opts/help.d | 21 + deps/curl/docs/cmdline-opts/hostpubmd5.d | 15 + deps/curl/docs/cmdline-opts/hostpubsha256.d | 17 + deps/curl/docs/cmdline-opts/hsts.d | 26 + deps/curl/docs/cmdline-opts/http0.9.d | 19 + deps/curl/docs/cmdline-opts/http1.0.d | 16 + deps/curl/docs/cmdline-opts/http1.1.d | 14 + .../docs/cmdline-opts/http2-prior-knowledge.d | 18 + deps/curl/docs/cmdline-opts/http2.d | 25 + deps/curl/docs/cmdline-opts/http3-only.d | 25 + deps/curl/docs/cmdline-opts/http3.d | 27 + .../docs/cmdline-opts/ignore-content-length.d | 19 + deps/curl/docs/cmdline-opts/include.d | 19 + deps/curl/docs/cmdline-opts/insecure.d | 33 + deps/curl/docs/cmdline-opts/interface.d | 19 + deps/curl/docs/cmdline-opts/ipfs-gateway.d | 32 + deps/curl/docs/cmdline-opts/ipv4.d | 17 + deps/curl/docs/cmdline-opts/ipv6.d | 17 + deps/curl/docs/cmdline-opts/json.d | 35 + .../docs/cmdline-opts/junk-session-cookies.d | 15 + deps/curl/docs/cmdline-opts/keepalive-time.d | 21 + deps/curl/docs/cmdline-opts/key-type.d | 14 + deps/curl/docs/cmdline-opts/key.d | 27 + deps/curl/docs/cmdline-opts/krb.d | 16 + deps/curl/docs/cmdline-opts/libcurl.d | 15 + deps/curl/docs/cmdline-opts/limit-rate.d | 29 + deps/curl/docs/cmdline-opts/list-only.d | 36 + deps/curl/docs/cmdline-opts/local-port.d | 15 + .../curl/docs/cmdline-opts/location-trusted.d | 15 + deps/curl/docs/cmdline-opts/location.d | 33 + deps/curl/docs/cmdline-opts/login-options.d | 25 + deps/curl/docs/cmdline-opts/mail-auth.d | 14 + deps/curl/docs/cmdline-opts/mail-from.d | 13 + .../docs/cmdline-opts/mail-rcpt-allowfails.d | 22 + deps/curl/docs/cmdline-opts/mail-rcpt.d | 22 + deps/curl/docs/cmdline-opts/manual.d | 12 + deps/curl/docs/cmdline-opts/max-filesize.d | 26 + deps/curl/docs/cmdline-opts/max-redirs.d | 15 + deps/curl/docs/cmdline-opts/max-time.d | 23 + deps/curl/docs/cmdline-opts/metalink.d | 12 + deps/curl/docs/cmdline-opts/negotiate.d | 19 + deps/curl/docs/cmdline-opts/netrc-file.d | 17 + deps/curl/docs/cmdline-opts/netrc-optional.d | 13 + deps/curl/docs/cmdline-opts/netrc.d | 30 + deps/curl/docs/cmdline-opts/next.d | 27 + deps/curl/docs/cmdline-opts/no-alpn.d | 19 + deps/curl/docs/cmdline-opts/no-buffer.d | 18 + deps/curl/docs/cmdline-opts/no-clobber.d | 19 + deps/curl/docs/cmdline-opts/no-keepalive.d | 15 + deps/curl/docs/cmdline-opts/no-npn.d | 19 + .../docs/cmdline-opts/no-progress-meter.d | 15 + deps/curl/docs/cmdline-opts/no-sessionid.d | 19 + deps/curl/docs/cmdline-opts/noproxy.d | 27 + deps/curl/docs/cmdline-opts/ntlm-wb.d | 13 + deps/curl/docs/cmdline-opts/ntlm.d | 22 + deps/curl/docs/cmdline-opts/oauth2-bearer.d | 17 + deps/curl/docs/cmdline-opts/output-dir.d | 19 + deps/curl/docs/cmdline-opts/output.d | 49 + deps/curl/docs/cmdline-opts/page-footer | 322 + deps/curl/docs/cmdline-opts/page-header | 258 + .../docs/cmdline-opts/parallel-immediate.d | 15 + deps/curl/docs/cmdline-opts/parallel-max.d | 18 + deps/curl/docs/cmdline-opts/parallel.d | 14 + deps/curl/docs/cmdline-opts/pass.d | 13 + deps/curl/docs/cmdline-opts/path-as-is.d | 13 + deps/curl/docs/cmdline-opts/pinnedpubkey.d | 38 + deps/curl/docs/cmdline-opts/post301.d | 16 + deps/curl/docs/cmdline-opts/post302.d | 16 + deps/curl/docs/cmdline-opts/post303.d | 15 + deps/curl/docs/cmdline-opts/preproxy.d | 26 + deps/curl/docs/cmdline-opts/progress-bar.d | 20 + deps/curl/docs/cmdline-opts/proto-default.d | 20 + deps/curl/docs/cmdline-opts/proto-redir.d | 22 + deps/curl/docs/cmdline-opts/proto.d | 48 + deps/curl/docs/cmdline-opts/proxy-anyauth.d | 12 + deps/curl/docs/cmdline-opts/proxy-basic.d | 13 + deps/curl/docs/cmdline-opts/proxy-ca-native.d | 21 + deps/curl/docs/cmdline-opts/proxy-cacert.d | 12 + deps/curl/docs/cmdline-opts/proxy-capath.d | 12 + deps/curl/docs/cmdline-opts/proxy-cert-type.d | 12 + deps/curl/docs/cmdline-opts/proxy-cert.d | 12 + deps/curl/docs/cmdline-opts/proxy-ciphers.d | 18 + deps/curl/docs/cmdline-opts/proxy-crlfile.d | 12 + deps/curl/docs/cmdline-opts/proxy-digest.d | 12 + deps/curl/docs/cmdline-opts/proxy-header.d | 32 + deps/curl/docs/cmdline-opts/proxy-http2.d | 18 + deps/curl/docs/cmdline-opts/proxy-insecure.d | 11 + deps/curl/docs/cmdline-opts/proxy-key-type.d | 12 + deps/curl/docs/cmdline-opts/proxy-key.d | 12 + deps/curl/docs/cmdline-opts/proxy-negotiate.d | 13 + deps/curl/docs/cmdline-opts/proxy-ntlm.d | 12 + deps/curl/docs/cmdline-opts/proxy-pass.d | 12 + .../docs/cmdline-opts/proxy-pinnedpubkey.d | 22 + .../docs/cmdline-opts/proxy-service-name.d | 12 + .../docs/cmdline-opts/proxy-ssl-allow-beast.d | 11 + .../cmdline-opts/proxy-ssl-auto-client-cert.d | 11 + .../docs/cmdline-opts/proxy-tls13-ciphers.d | 21 + .../docs/cmdline-opts/proxy-tlsauthtype.d | 12 + .../docs/cmdline-opts/proxy-tlspassword.d | 12 + deps/curl/docs/cmdline-opts/proxy-tlsuser.d | 12 + deps/curl/docs/cmdline-opts/proxy-tlsv1.d | 11 + deps/curl/docs/cmdline-opts/proxy-user.d | 23 + deps/curl/docs/cmdline-opts/proxy.d | 51 + deps/curl/docs/cmdline-opts/proxy1.0.d | 17 + deps/curl/docs/cmdline-opts/proxytunnel.d | 18 + deps/curl/docs/cmdline-opts/pubkey.d | 19 + deps/curl/docs/cmdline-opts/quote.d | 87 + deps/curl/docs/cmdline-opts/random-file.d | 16 + deps/curl/docs/cmdline-opts/range.d | 50 + deps/curl/docs/cmdline-opts/rate.d | 35 + deps/curl/docs/cmdline-opts/raw.d | 13 + deps/curl/docs/cmdline-opts/referer.d | 20 + .../docs/cmdline-opts/remote-header-name.d | 34 + deps/curl/docs/cmdline-opts/remote-name-all.d | 14 + deps/curl/docs/cmdline-opts/remote-name.d | 28 + deps/curl/docs/cmdline-opts/remote-time.d | 14 + deps/curl/docs/cmdline-opts/remove-on-error.d | 15 + deps/curl/docs/cmdline-opts/request-target.d | 19 + deps/curl/docs/cmdline-opts/request.d | 54 + deps/curl/docs/cmdline-opts/resolve.d | 39 + .../curl/docs/cmdline-opts/retry-all-errors.d | 34 + .../docs/cmdline-opts/retry-connrefused.d | 12 + deps/curl/docs/cmdline-opts/retry-delay.d | 15 + deps/curl/docs/cmdline-opts/retry-max-time.d | 17 + deps/curl/docs/cmdline-opts/retry.d | 25 + deps/curl/docs/cmdline-opts/sasl-authzid.d | 19 + deps/curl/docs/cmdline-opts/sasl-ir.d | 11 + deps/curl/docs/cmdline-opts/service-name.d | 12 + deps/curl/docs/cmdline-opts/show-error.d | 13 + deps/curl/docs/cmdline-opts/silent.d | 17 + deps/curl/docs/cmdline-opts/socks4.d | 28 + deps/curl/docs/cmdline-opts/socks4a.d | 27 + deps/curl/docs/cmdline-opts/socks5-basic.d | 13 + .../docs/cmdline-opts/socks5-gssapi-nec.d | 14 + .../docs/cmdline-opts/socks5-gssapi-service.d | 13 + deps/curl/docs/cmdline-opts/socks5-gssapi.d | 14 + deps/curl/docs/cmdline-opts/socks5-hostname.d | 27 + deps/curl/docs/cmdline-opts/socks5.d | 29 + deps/curl/docs/cmdline-opts/speed-limit.d | 15 + deps/curl/docs/cmdline-opts/speed-time.d | 18 + deps/curl/docs/cmdline-opts/ssl-allow-beast.d | 17 + .../docs/cmdline-opts/ssl-auto-client-cert.d | 14 + deps/curl/docs/cmdline-opts/ssl-no-revoke.d | 13 + deps/curl/docs/cmdline-opts/ssl-reqd.d | 23 + .../cmdline-opts/ssl-revoke-best-effort.d | 13 + deps/curl/docs/cmdline-opts/ssl.d | 26 + deps/curl/docs/cmdline-opts/sslv2.d | 17 + deps/curl/docs/cmdline-opts/sslv3.d | 17 + deps/curl/docs/cmdline-opts/stderr.d | 14 + deps/curl/docs/cmdline-opts/styled-output.d | 16 + .../cmdline-opts/suppress-connect-headers.d | 14 + deps/curl/docs/cmdline-opts/tcp-fastopen.d | 14 + deps/curl/docs/cmdline-opts/tcp-nodelay.d | 15 + deps/curl/docs/cmdline-opts/telnet-option.d | 23 + deps/curl/docs/cmdline-opts/tftp-blksize.d | 15 + deps/curl/docs/cmdline-opts/tftp-no-options.d | 16 + deps/curl/docs/cmdline-opts/time-cond.d | 27 + deps/curl/docs/cmdline-opts/tls-max.d | 34 + deps/curl/docs/cmdline-opts/tls13-ciphers.d | 21 + deps/curl/docs/cmdline-opts/tlsauthtype.d | 16 + deps/curl/docs/cmdline-opts/tlspassword.d | 15 + deps/curl/docs/cmdline-opts/tlsuser.d | 15 + deps/curl/docs/cmdline-opts/tlsv1.0.d | 16 + deps/curl/docs/cmdline-opts/tlsv1.1.d | 16 + deps/curl/docs/cmdline-opts/tlsv1.2.d | 16 + deps/curl/docs/cmdline-opts/tlsv1.3.d | 18 + deps/curl/docs/cmdline-opts/tlsv1.d | 17 + deps/curl/docs/cmdline-opts/tr-encoding.d | 13 + deps/curl/docs/cmdline-opts/trace-ascii.d | 24 + deps/curl/docs/cmdline-opts/trace-config.d | 21 + deps/curl/docs/cmdline-opts/trace-ids.d | 12 + deps/curl/docs/cmdline-opts/trace-time.d | 12 + deps/curl/docs/cmdline-opts/trace.d | 21 + deps/curl/docs/cmdline-opts/unix-socket.d | 13 + deps/curl/docs/cmdline-opts/upload-file.d | 43 + deps/curl/docs/cmdline-opts/url-query.d | 25 + deps/curl/docs/cmdline-opts/url.d | 26 + deps/curl/docs/cmdline-opts/use-ascii.d | 15 + deps/curl/docs/cmdline-opts/user-agent.d | 20 + deps/curl/docs/cmdline-opts/user.d | 44 + deps/curl/docs/cmdline-opts/variable.d | 55 + deps/curl/docs/cmdline-opts/verbose.d | 28 + deps/curl/docs/cmdline-opts/version.d | 88 + deps/curl/docs/cmdline-opts/write-out.d | 292 + deps/curl/docs/cmdline-opts/xattr.d | 15 + deps/curl/docs/curl-config.1 | 105 + deps/curl/docs/examples/.checksrc | 3 + deps/curl/docs/examples/.gitignore | 101 + deps/curl/docs/examples/10-at-a-time.c | 156 + deps/curl/docs/examples/Makefile.am | 73 + deps/curl/docs/examples/Makefile.example | 55 + deps/curl/docs/examples/Makefile.inc | 156 + deps/curl/docs/examples/Makefile.mk | 74 + deps/curl/docs/examples/README.md | 41 + deps/curl/docs/examples/adddocsref.pl | 58 + deps/curl/docs/examples/altsvc.c | 58 + deps/curl/docs/examples/anyauthput.c | 157 + deps/curl/docs/examples/cacertinmem.c | 183 + deps/curl/docs/examples/certinfo.c | 87 + deps/curl/docs/examples/chkspeed.c | 222 + deps/curl/docs/examples/connect-to.c | 70 + deps/curl/docs/examples/cookie_interface.c | 142 + deps/curl/docs/examples/crawler.c | 237 + deps/curl/docs/examples/debug.c | 156 + deps/curl/docs/examples/default-scheme.c | 57 + deps/curl/docs/examples/ephiperfifo.c | 547 + deps/curl/docs/examples/evhiperfifo.c | 450 + deps/curl/docs/examples/externalsocket.c | 175 + deps/curl/docs/examples/fileupload.c | 89 + deps/curl/docs/examples/ftp-wildcard.c | 152 + deps/curl/docs/examples/ftpget.c | 94 + deps/curl/docs/examples/ftpgetinfo.c | 93 + deps/curl/docs/examples/ftpgetresp.c | 79 + deps/curl/docs/examples/ftpsget.c | 101 + deps/curl/docs/examples/ftpupload.c | 142 + deps/curl/docs/examples/ftpuploadfrommem.c | 126 + deps/curl/docs/examples/ftpuploadresume.c | 167 + deps/curl/docs/examples/getinfo.c | 54 + deps/curl/docs/examples/getinmemory.c | 118 + deps/curl/docs/examples/getredirect.c | 72 + deps/curl/docs/examples/getreferrer.c | 59 + deps/curl/docs/examples/ghiper.c | 438 + deps/curl/docs/examples/headerapi.c | 81 + deps/curl/docs/examples/hiperfifo.c | 464 + deps/curl/docs/examples/href_extractor.c | 88 + deps/curl/docs/examples/hsts-preload.c | 118 + deps/curl/docs/examples/htmltidy.c | 130 + deps/curl/docs/examples/htmltitle.cpp | 296 + deps/curl/docs/examples/http-options.c | 59 + deps/curl/docs/examples/http-post.c | 61 + deps/curl/docs/examples/http2-download.c | 235 + deps/curl/docs/examples/http2-pushinmemory.c | 190 + deps/curl/docs/examples/http2-serverpush.c | 277 + deps/curl/docs/examples/http2-upload.c | 304 + deps/curl/docs/examples/http3-present.c | 49 + deps/curl/docs/examples/http3.c | 55 + deps/curl/docs/examples/httpcustomheader.c | 72 + deps/curl/docs/examples/httpput-postfields.c | 105 + deps/curl/docs/examples/httpput.c | 123 + deps/curl/docs/examples/https.c | 83 + deps/curl/docs/examples/imap-append.c | 130 + deps/curl/docs/examples/imap-authzid.c | 73 + deps/curl/docs/examples/imap-copy.c | 73 + deps/curl/docs/examples/imap-create.c | 69 + deps/curl/docs/examples/imap-delete.c | 69 + deps/curl/docs/examples/imap-examine.c | 69 + deps/curl/docs/examples/imap-fetch.c | 67 + deps/curl/docs/examples/imap-list.c | 68 + deps/curl/docs/examples/imap-lsub.c | 70 + deps/curl/docs/examples/imap-multi.c | 83 + deps/curl/docs/examples/imap-noop.c | 69 + deps/curl/docs/examples/imap-search.c | 73 + deps/curl/docs/examples/imap-ssl.c | 94 + deps/curl/docs/examples/imap-store.c | 84 + deps/curl/docs/examples/imap-tls.c | 94 + deps/curl/docs/examples/interface.c | 52 + deps/curl/docs/examples/ipv6.c | 62 + deps/curl/docs/examples/keepalive.c | 55 + deps/curl/docs/examples/localport.c | 53 + deps/curl/docs/examples/maxconnects.c | 66 + deps/curl/docs/examples/multi-app.c | 118 + deps/curl/docs/examples/multi-debugcallback.c | 166 + deps/curl/docs/examples/multi-double.c | 97 + deps/curl/docs/examples/multi-event.c | 242 + deps/curl/docs/examples/multi-formadd.c | 115 + deps/curl/docs/examples/multi-legacy.c | 179 + deps/curl/docs/examples/multi-post.c | 105 + deps/curl/docs/examples/multi-single.c | 84 + deps/curl/docs/examples/multi-uv.c | 237 + deps/curl/docs/examples/multithread.c | 96 + deps/curl/docs/examples/parseurl.c | 80 + deps/curl/docs/examples/persistent.c | 70 + deps/curl/docs/examples/pop3-authzid.c | 72 + deps/curl/docs/examples/pop3-dele.c | 72 + deps/curl/docs/examples/pop3-list.c | 66 + deps/curl/docs/examples/pop3-multi.c | 84 + deps/curl/docs/examples/pop3-noop.c | 72 + deps/curl/docs/examples/pop3-retr.c | 66 + deps/curl/docs/examples/pop3-ssl.c | 93 + deps/curl/docs/examples/pop3-stat.c | 72 + deps/curl/docs/examples/pop3-tls.c | 93 + deps/curl/docs/examples/pop3-top.c | 69 + deps/curl/docs/examples/pop3-uidl.c | 69 + deps/curl/docs/examples/post-callback.c | 156 + deps/curl/docs/examples/postinmemory.c | 114 + deps/curl/docs/examples/postit2-formadd.c | 112 + deps/curl/docs/examples/postit2.c | 104 + deps/curl/docs/examples/progressfunc.c | 97 + deps/curl/docs/examples/protofeats.c | 52 + deps/curl/docs/examples/resolve.c | 58 + deps/curl/docs/examples/rtsp-options.c | 55 + deps/curl/docs/examples/sendrecv.c | 162 + deps/curl/docs/examples/sepheaders.c | 96 + deps/curl/docs/examples/sessioninfo.c | 112 + deps/curl/docs/examples/sftpget.c | 112 + deps/curl/docs/examples/sftpuploadresume.c | 137 + .../docs/examples/shared-connection-cache.c | 87 + deps/curl/docs/examples/simple.c | 53 + deps/curl/docs/examples/simplepost.c | 59 + deps/curl/docs/examples/simplessl.c | 143 + deps/curl/docs/examples/smooth-gtk-thread.c | 218 + deps/curl/docs/examples/smtp-authzid.c | 162 + deps/curl/docs/examples/smtp-expn.c | 81 + deps/curl/docs/examples/smtp-mail.c | 150 + deps/curl/docs/examples/smtp-mime.c | 168 + deps/curl/docs/examples/smtp-multi.c | 153 + deps/curl/docs/examples/smtp-ssl.c | 170 + deps/curl/docs/examples/smtp-tls.c | 173 + deps/curl/docs/examples/smtp-vrfy.c | 81 + deps/curl/docs/examples/sslbackend.c | 79 + deps/curl/docs/examples/synctime.c | 377 + deps/curl/docs/examples/threaded-ssl.c | 168 + deps/curl/docs/examples/unixsocket.c | 67 + deps/curl/docs/examples/url2file.c | 88 + deps/curl/docs/examples/urlapi.c | 77 + deps/curl/docs/examples/usercertinmem.c | 228 + deps/curl/docs/examples/version-check.pl | 105 + deps/curl/docs/examples/websocket-cb.c | 68 + deps/curl/docs/examples/websocket.c | 131 + deps/curl/docs/examples/xmlstream.c | 168 + deps/curl/docs/libcurl/.gitignore | 8 + deps/curl/docs/libcurl/ABI.md | 68 + deps/curl/docs/libcurl/CMakeLists.txt | 78 + deps/curl/docs/libcurl/Makefile.am | 80 + deps/curl/docs/libcurl/Makefile.inc | 124 + deps/curl/docs/libcurl/curl_easy_cleanup.3 | 82 + deps/curl/docs/libcurl/curl_easy_duphandle.3 | 78 + deps/curl/docs/libcurl/curl_easy_escape.3 | 79 + deps/curl/docs/libcurl/curl_easy_getinfo.3 | 329 + deps/curl/docs/libcurl/curl_easy_header.3 | 152 + deps/curl/docs/libcurl/curl_easy_init.3 | 82 + deps/curl/docs/libcurl/curl_easy_nextheader.3 | 106 + .../docs/libcurl/curl_easy_option_by_id.3 | 59 + .../docs/libcurl/curl_easy_option_by_name.3 | 58 + .../curl/docs/libcurl/curl_easy_option_next.3 | 92 + deps/curl/docs/libcurl/curl_easy_pause.3 | 131 + deps/curl/docs/libcurl/curl_easy_perform.3 | 90 + deps/curl/docs/libcurl/curl_easy_recv.3 | 109 + deps/curl/docs/libcurl/curl_easy_reset.3 | 61 + deps/curl/docs/libcurl/curl_easy_send.3 | 101 + deps/curl/docs/libcurl/curl_easy_setopt.3 | 749 ++ deps/curl/docs/libcurl/curl_easy_strerror.3 | 64 + deps/curl/docs/libcurl/curl_easy_unescape.3 | 79 + deps/curl/docs/libcurl/curl_easy_upkeep.3 | 84 + deps/curl/docs/libcurl/curl_escape.3 | 63 + deps/curl/docs/libcurl/curl_formadd.3 | 285 + deps/curl/docs/libcurl/curl_formfree.3 | 81 + deps/curl/docs/libcurl/curl_formget.3 | 76 + deps/curl/docs/libcurl/curl_free.3 | 57 + deps/curl/docs/libcurl/curl_getdate.3 | 125 + deps/curl/docs/libcurl/curl_getenv.3 | 60 + deps/curl/docs/libcurl/curl_global_cleanup.3 | 77 + deps/curl/docs/libcurl/curl_global_init.3 | 124 + deps/curl/docs/libcurl/curl_global_init_mem.3 | 88 + deps/curl/docs/libcurl/curl_global_sslset.3 | 139 + deps/curl/docs/libcurl/curl_global_trace.3 | 121 + deps/curl/docs/libcurl/curl_mime_addpart.3 | 75 + deps/curl/docs/libcurl/curl_mime_data.3 | 81 + deps/curl/docs/libcurl/curl_mime_data_cb.3 | 173 + deps/curl/docs/libcurl/curl_mime_encoder.3 | 105 + deps/curl/docs/libcurl/curl_mime_filedata.3 | 93 + deps/curl/docs/libcurl/curl_mime_filename.3 | 84 + deps/curl/docs/libcurl/curl_mime_free.3 | 70 + deps/curl/docs/libcurl/curl_mime_headers.3 | 84 + deps/curl/docs/libcurl/curl_mime_init.3 | 77 + deps/curl/docs/libcurl/curl_mime_name.3 | 72 + deps/curl/docs/libcurl/curl_mime_subparts.3 | 88 + deps/curl/docs/libcurl/curl_mime_type.3 | 91 + deps/curl/docs/libcurl/curl_mprintf.3 | 259 + .../curl/docs/libcurl/curl_multi_add_handle.3 | 93 + deps/curl/docs/libcurl/curl_multi_assign.3 | 84 + deps/curl/docs/libcurl/curl_multi_cleanup.3 | 71 + deps/curl/docs/libcurl/curl_multi_fdset.3 | 124 + .../docs/libcurl/curl_multi_get_handles.3 | 82 + deps/curl/docs/libcurl/curl_multi_info_read.3 | 107 + deps/curl/docs/libcurl/curl_multi_init.3 | 63 + deps/curl/docs/libcurl/curl_multi_perform.3 | 110 + deps/curl/docs/libcurl/curl_multi_poll.3 | 125 + .../docs/libcurl/curl_multi_remove_handle.3 | 78 + deps/curl/docs/libcurl/curl_multi_setopt.3 | 98 + deps/curl/docs/libcurl/curl_multi_socket.3 | 100 + .../docs/libcurl/curl_multi_socket_action.3 | 123 + .../curl/docs/libcurl/curl_multi_socket_all.3 | 1 + deps/curl/docs/libcurl/curl_multi_strerror.3 | 56 + deps/curl/docs/libcurl/curl_multi_timeout.3 | 93 + deps/curl/docs/libcurl/curl_multi_wait.3 | 118 + deps/curl/docs/libcurl/curl_multi_wakeup.3 | 96 + .../docs/libcurl/curl_pushheader_byname.3 | 88 + .../curl/docs/libcurl/curl_pushheader_bynum.3 | 75 + deps/curl/docs/libcurl/curl_share_cleanup.3 | 59 + deps/curl/docs/libcurl/curl_share_init.3 | 61 + deps/curl/docs/libcurl/curl_share_setopt.3 | 65 + deps/curl/docs/libcurl/curl_share_strerror.3 | 55 + deps/curl/docs/libcurl/curl_slist_append.3 | 80 + deps/curl/docs/libcurl/curl_slist_free_all.3 | 63 + deps/curl/docs/libcurl/curl_strequal.3 | 63 + deps/curl/docs/libcurl/curl_strnequal.3 | 1 + deps/curl/docs/libcurl/curl_unescape.3 | 70 + deps/curl/docs/libcurl/curl_url.3 | 69 + deps/curl/docs/libcurl/curl_url_cleanup.3 | 56 + deps/curl/docs/libcurl/curl_url_dup.3 | 61 + deps/curl/docs/libcurl/curl_url_get.3 | 178 + deps/curl/docs/libcurl/curl_url_set.3 | 211 + deps/curl/docs/libcurl/curl_url_strerror.3 | 58 + deps/curl/docs/libcurl/curl_version.3 | 52 + deps/curl/docs/libcurl/curl_version_info.3 | 323 + deps/curl/docs/libcurl/curl_ws_meta.3 | 129 + deps/curl/docs/libcurl/curl_ws_recv.3 | 79 + deps/curl/docs/libcurl/curl_ws_send.3 | 111 + deps/curl/docs/libcurl/libcurl-easy.3 | 65 + deps/curl/docs/libcurl/libcurl-env-dbg.3 | 97 + deps/curl/docs/libcurl/libcurl-env.3 | 92 + deps/curl/docs/libcurl/libcurl-errors.3 | 439 + deps/curl/docs/libcurl/libcurl-multi.3 | 184 + deps/curl/docs/libcurl/libcurl-security.3 | 426 + deps/curl/docs/libcurl/libcurl-share.3 | 71 + deps/curl/docs/libcurl/libcurl-thread.3 | 96 + deps/curl/docs/libcurl/libcurl-tutorial.3 | 1398 +++ deps/curl/docs/libcurl/libcurl-url.3 | 151 + deps/curl/docs/libcurl/libcurl-ws.3 | 118 + deps/curl/docs/libcurl/libcurl.3 | 228 + deps/curl/docs/libcurl/libcurl.m4 | 274 + deps/curl/docs/libcurl/mksymbolsmanpage.pl | 103 + deps/curl/docs/libcurl/opts/CMakeLists.txt | 35 + .../docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3 | 81 + .../libcurl/opts/CURLINFO_APPCONNECT_TIME.3 | 75 + .../libcurl/opts/CURLINFO_APPCONNECT_TIME_T.3 | 77 + deps/curl/docs/libcurl/opts/CURLINFO_CAINFO.3 | 70 + deps/curl/docs/libcurl/opts/CURLINFO_CAPATH.3 | 70 + .../docs/libcurl/opts/CURLINFO_CERTINFO.3 | 105 + .../libcurl/opts/CURLINFO_CONDITION_UNMET.3 | 84 + .../docs/libcurl/opts/CURLINFO_CONNECT_TIME.3 | 71 + .../libcurl/opts/CURLINFO_CONNECT_TIME_T.3 | 74 + .../curl/docs/libcurl/opts/CURLINFO_CONN_ID.3 | 75 + .../opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3 | 74 + .../opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3 | 71 + .../opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3 | 73 + .../opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3 | 70 + .../docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3 | 79 + .../docs/libcurl/opts/CURLINFO_COOKIELIST.3 | 86 + .../libcurl/opts/CURLINFO_EFFECTIVE_METHOD.3 | 76 + .../libcurl/opts/CURLINFO_EFFECTIVE_URL.3 | 72 + .../docs/libcurl/opts/CURLINFO_FILETIME.3 | 80 + .../docs/libcurl/opts/CURLINFO_FILETIME_T.3 | 82 + .../libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3 | 74 + .../docs/libcurl/opts/CURLINFO_HEADER_SIZE.3 | 69 + .../libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3 | 81 + .../libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3 | 69 + .../docs/libcurl/opts/CURLINFO_HTTP_VERSION.3 | 65 + .../docs/libcurl/opts/CURLINFO_LASTSOCKET.3 | 81 + .../docs/libcurl/opts/CURLINFO_LOCAL_IP.3 | 76 + .../docs/libcurl/opts/CURLINFO_LOCAL_PORT.3 | 72 + .../libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3 | 72 + .../libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.3 | 73 + .../docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3 | 69 + .../docs/libcurl/opts/CURLINFO_OS_ERRNO.3 | 66 + .../libcurl/opts/CURLINFO_PRETRANSFER_TIME.3 | 77 + .../opts/CURLINFO_PRETRANSFER_TIME_T.3 | 79 + .../docs/libcurl/opts/CURLINFO_PRIMARY_IP.3 | 77 + .../docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3 | 71 + .../curl/docs/libcurl/opts/CURLINFO_PRIVATE.3 | 72 + .../docs/libcurl/opts/CURLINFO_PROTOCOL.3 | 76 + .../libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3 | 82 + .../docs/libcurl/opts/CURLINFO_PROXY_ERROR.3 | 109 + .../opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3 | 68 + .../libcurl/opts/CURLINFO_REDIRECT_COUNT.3 | 66 + .../libcurl/opts/CURLINFO_REDIRECT_TIME.3 | 74 + .../libcurl/opts/CURLINFO_REDIRECT_TIME_T.3 | 76 + .../docs/libcurl/opts/CURLINFO_REDIRECT_URL.3 | 73 + .../curl/docs/libcurl/opts/CURLINFO_REFERER.3 | 70 + .../docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3 | 67 + .../libcurl/opts/CURLINFO_RESPONSE_CODE.3 | 69 + .../docs/libcurl/opts/CURLINFO_RETRY_AFTER.3 | 73 + .../libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3 | 65 + .../libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3 | 65 + .../libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3 | 69 + .../libcurl/opts/CURLINFO_RTSP_SESSION_ID.3 | 70 + deps/curl/docs/libcurl/opts/CURLINFO_SCHEME.3 | 72 + .../libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3 | 77 + .../libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.3 | 74 + .../docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3 | 73 + .../libcurl/opts/CURLINFO_SIZE_UPLOAD_T.3 | 71 + .../libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3 | 72 + .../libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.3 | 71 + .../docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3 | 70 + .../libcurl/opts/CURLINFO_SPEED_UPLOAD_T.3 | 68 + .../docs/libcurl/opts/CURLINFO_SSL_ENGINES.3 | 69 + .../libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3 | 69 + .../opts/CURLINFO_STARTTRANSFER_TIME.3 | 75 + .../opts/CURLINFO_STARTTRANSFER_TIME_T.3 | 77 + .../docs/libcurl/opts/CURLINFO_TLS_SESSION.3 | 78 + .../docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3 | 165 + .../docs/libcurl/opts/CURLINFO_TOTAL_TIME.3 | 73 + .../docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.3 | 75 + .../curl/docs/libcurl/opts/CURLINFO_XFER_ID.3 | 75 + .../opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3 | 63 + .../CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3 | 62 + .../docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3 | 72 + .../opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3 | 61 + .../opts/CURLMOPT_MAX_HOST_CONNECTIONS.3 | 74 + .../opts/CURLMOPT_MAX_PIPELINE_LENGTH.3 | 66 + .../opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3 | 72 + .../docs/libcurl/opts/CURLMOPT_PIPELINING.3 | 74 + .../opts/CURLMOPT_PIPELINING_SERVER_BL.3 | 71 + .../opts/CURLMOPT_PIPELINING_SITE_BL.3 | 68 + .../docs/libcurl/opts/CURLMOPT_PUSHDATA.3 | 89 + .../docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3 | 139 + .../docs/libcurl/opts/CURLMOPT_SOCKETDATA.3 | 83 + .../libcurl/opts/CURLMOPT_SOCKETFUNCTION.3 | 126 + .../docs/libcurl/opts/CURLMOPT_TIMERDATA.3 | 76 + .../libcurl/opts/CURLMOPT_TIMERFUNCTION.3 | 104 + .../opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3 | 73 + .../libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3 | 63 + .../libcurl/opts/CURLOPT_ACCEPT_ENCODING.3 | 112 + .../docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3 | 65 + deps/curl/docs/libcurl/opts/CURLOPT_ALTSVC.3 | 94 + .../docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.3 | 91 + deps/curl/docs/libcurl/opts/CURLOPT_APPEND.3 | 63 + .../docs/libcurl/opts/CURLOPT_AUTOREFERER.3 | 75 + .../docs/libcurl/opts/CURLOPT_AWS_SIGV4.3 | 111 + .../docs/libcurl/opts/CURLOPT_BUFFERSIZE.3 | 82 + deps/curl/docs/libcurl/opts/CURLOPT_CAINFO.3 | 89 + .../docs/libcurl/opts/CURLOPT_CAINFO_BLOB.3 | 85 + deps/curl/docs/libcurl/opts/CURLOPT_CAPATH.3 | 81 + .../libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.3 | 84 + .../curl/docs/libcurl/opts/CURLOPT_CERTINFO.3 | 92 + .../libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3 | 153 + .../docs/libcurl/opts/CURLOPT_CHUNK_DATA.3 | 104 + .../libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3 | 83 + .../libcurl/opts/CURLOPT_CLOSESOCKETDATA.3 | 77 + .../opts/CURLOPT_CLOSESOCKETFUNCTION.3 | 88 + .../libcurl/opts/CURLOPT_CONNECTTIMEOUT.3 | 91 + .../libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3 | 66 + .../docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 | 85 + .../docs/libcurl/opts/CURLOPT_CONNECT_TO.3 | 119 + .../opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3 | 111 + .../opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3 | 106 + .../opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3 | 108 + deps/curl/docs/libcurl/opts/CURLOPT_COOKIE.3 | 93 + .../docs/libcurl/opts/CURLOPT_COOKIEFILE.3 | 101 + .../docs/libcurl/opts/CURLOPT_COOKIEJAR.3 | 88 + .../docs/libcurl/opts/CURLOPT_COOKIELIST.3 | 131 + .../docs/libcurl/opts/CURLOPT_COOKIESESSION.3 | 77 + .../libcurl/opts/CURLOPT_COPYPOSTFIELDS.3 | 80 + deps/curl/docs/libcurl/opts/CURLOPT_CRLF.3 | 64 + deps/curl/docs/libcurl/opts/CURLOPT_CRLFILE.3 | 84 + deps/curl/docs/libcurl/opts/CURLOPT_CURLU.3 | 81 + .../docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3 | 124 + .../docs/libcurl/opts/CURLOPT_DEBUGDATA.3 | 88 + .../docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3 | 205 + .../libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3 | 91 + .../docs/libcurl/opts/CURLOPT_DIRLISTONLY.3 | 82 + .../opts/CURLOPT_DISALLOW_USERNAME_IN_URL.3 | 70 + .../libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3 | 92 + .../docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3 | 71 + .../docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3 | 72 + .../docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3 | 72 + .../docs/libcurl/opts/CURLOPT_DNS_SERVERS.3 | 78 + .../opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.3 | 77 + .../opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3 | 70 + .../libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.3 | 92 + .../libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.3 | 105 + .../opts/CURLOPT_DOH_SSL_VERIFYSTATUS.3 | 78 + deps/curl/docs/libcurl/opts/CURLOPT_DOH_URL.3 | 95 + .../docs/libcurl/opts/CURLOPT_EGDSOCKET.3 | 69 + .../docs/libcurl/opts/CURLOPT_ERRORBUFFER.3 | 103 + .../opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3 | 65 + .../docs/libcurl/opts/CURLOPT_FAILONERROR.3 | 76 + .../curl/docs/libcurl/opts/CURLOPT_FILETIME.3 | 74 + .../docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3 | 81 + .../libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3 | 89 + .../libcurl/opts/CURLOPT_FOLLOWLOCATION.3 | 93 + .../docs/libcurl/opts/CURLOPT_FORBID_REUSE.3 | 71 + .../docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3 | 70 + deps/curl/docs/libcurl/opts/CURLOPT_FTPPORT.3 | 101 + .../docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3 | 72 + .../docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3 | 69 + .../opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3 | 70 + .../opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3 | 89 + .../libcurl/opts/CURLOPT_FTP_FILEMETHOD.3 | 81 + .../libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3 | 74 + .../docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3 | 74 + .../docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3 | 78 + .../docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3 | 76 + .../docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3 | 68 + .../libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3 | 68 + .../opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 | 72 + .../libcurl/opts/CURLOPT_HAPROXYPROTOCOL.3 | 66 + .../libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.3 | 65 + deps/curl/docs/libcurl/opts/CURLOPT_HEADER.3 | 78 + .../docs/libcurl/opts/CURLOPT_HEADERDATA.3 | 91 + .../libcurl/opts/CURLOPT_HEADERFUNCTION.3 | 132 + .../docs/libcurl/opts/CURLOPT_HEADEROPT.3 | 83 + deps/curl/docs/libcurl/opts/CURLOPT_HSTS.3 | 83 + .../docs/libcurl/opts/CURLOPT_HSTSREADDATA.3 | 74 + .../libcurl/opts/CURLOPT_HSTSREADFUNCTION.3 | 108 + .../docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.3 | 74 + .../libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.3 | 112 + .../docs/libcurl/opts/CURLOPT_HSTS_CTRL.3 | 75 + .../libcurl/opts/CURLOPT_HTTP09_ALLOWED.3 | 66 + .../libcurl/opts/CURLOPT_HTTP200ALIASES.3 | 76 + .../curl/docs/libcurl/opts/CURLOPT_HTTPAUTH.3 | 143 + deps/curl/docs/libcurl/opts/CURLOPT_HTTPGET.3 | 73 + .../docs/libcurl/opts/CURLOPT_HTTPHEADER.3 | 170 + .../curl/docs/libcurl/opts/CURLOPT_HTTPPOST.3 | 101 + .../libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3 | 77 + .../opts/CURLOPT_HTTP_CONTENT_DECODING.3 | 63 + .../opts/CURLOPT_HTTP_TRANSFER_DECODING.3 | 62 + .../docs/libcurl/opts/CURLOPT_HTTP_VERSION.3 | 106 + .../opts/CURLOPT_IGNORE_CONTENT_LENGTH.3 | 74 + .../docs/libcurl/opts/CURLOPT_INFILESIZE.3 | 87 + .../libcurl/opts/CURLOPT_INFILESIZE_LARGE.3 | 82 + .../docs/libcurl/opts/CURLOPT_INTERFACE.3 | 85 + .../libcurl/opts/CURLOPT_INTERLEAVEDATA.3 | 74 + .../libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3 | 103 + .../docs/libcurl/opts/CURLOPT_IOCTLDATA.3 | 74 + .../docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3 | 104 + .../docs/libcurl/opts/CURLOPT_IPRESOLVE.3 | 79 + .../docs/libcurl/opts/CURLOPT_ISSUERCERT.3 | 79 + .../libcurl/opts/CURLOPT_ISSUERCERT_BLOB.3 | 94 + .../opts/CURLOPT_KEEP_SENDING_ON_ERROR.3 | 70 + .../docs/libcurl/opts/CURLOPT_KEYPASSWD.3 | 70 + .../curl/docs/libcurl/opts/CURLOPT_KRBLEVEL.3 | 68 + .../docs/libcurl/opts/CURLOPT_LOCALPORT.3 | 66 + .../libcurl/opts/CURLOPT_LOCALPORTRANGE.3 | 69 + .../docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3 | 79 + .../libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3 | 72 + .../libcurl/opts/CURLOPT_LOW_SPEED_TIME.3 | 69 + .../docs/libcurl/opts/CURLOPT_MAIL_AUTH.3 | 78 + .../docs/libcurl/opts/CURLOPT_MAIL_FROM.3 | 71 + .../docs/libcurl/opts/CURLOPT_MAIL_RCPT.3 | 81 + .../opts/CURLOPT_MAIL_RCPT_ALLOWFAILS.3 | 82 + .../docs/libcurl/opts/CURLOPT_MAXAGE_CONN.3 | 73 + .../docs/libcurl/opts/CURLOPT_MAXCONNECTS.3 | 77 + .../docs/libcurl/opts/CURLOPT_MAXFILESIZE.3 | 71 + .../libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3 | 71 + .../libcurl/opts/CURLOPT_MAXLIFETIME_CONN.3 | 75 + .../docs/libcurl/opts/CURLOPT_MAXREDIRS.3 | 74 + .../opts/CURLOPT_MAX_RECV_SPEED_LARGE.3 | 71 + .../opts/CURLOPT_MAX_SEND_SPEED_LARGE.3 | 73 + .../curl/docs/libcurl/opts/CURLOPT_MIMEPOST.3 | 84 + .../docs/libcurl/opts/CURLOPT_MIME_OPTIONS.3 | 97 + deps/curl/docs/libcurl/opts/CURLOPT_NETRC.3 | 126 + .../docs/libcurl/opts/CURLOPT_NETRC_FILE.3 | 68 + .../opts/CURLOPT_NEW_DIRECTORY_PERMS.3 | 65 + .../libcurl/opts/CURLOPT_NEW_FILE_PERMS.3 | 62 + deps/curl/docs/libcurl/opts/CURLOPT_NOBODY.3 | 80 + .../docs/libcurl/opts/CURLOPT_NOPROGRESS.3 | 67 + deps/curl/docs/libcurl/opts/CURLOPT_NOPROXY.3 | 91 + .../curl/docs/libcurl/opts/CURLOPT_NOSIGNAL.3 | 80 + .../libcurl/opts/CURLOPT_OPENSOCKETDATA.3 | 94 + .../libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3 | 134 + .../curl/docs/libcurl/opts/CURLOPT_PASSWORD.3 | 73 + .../docs/libcurl/opts/CURLOPT_PATH_AS_IS.3 | 79 + .../libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3 | 140 + .../curl/docs/libcurl/opts/CURLOPT_PIPEWAIT.3 | 80 + deps/curl/docs/libcurl/opts/CURLOPT_PORT.3 | 74 + deps/curl/docs/libcurl/opts/CURLOPT_POST.3 | 104 + .../docs/libcurl/opts/CURLOPT_POSTFIELDS.3 | 126 + .../docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3 | 73 + .../opts/CURLOPT_POSTFIELDSIZE_LARGE.3 | 73 + .../docs/libcurl/opts/CURLOPT_POSTQUOTE.3 | 74 + .../docs/libcurl/opts/CURLOPT_POSTREDIR.3 | 82 + .../curl/docs/libcurl/opts/CURLOPT_PREQUOTE.3 | 78 + .../docs/libcurl/opts/CURLOPT_PREREQDATA.3 | 75 + .../libcurl/opts/CURLOPT_PREREQFUNCTION.3 | 116 + .../docs/libcurl/opts/CURLOPT_PRE_PROXY.3 | 87 + deps/curl/docs/libcurl/opts/CURLOPT_PRIVATE.3 | 74 + .../docs/libcurl/opts/CURLOPT_PROGRESSDATA.3 | 82 + .../libcurl/opts/CURLOPT_PROGRESSFUNCTION.3 | 127 + .../docs/libcurl/opts/CURLOPT_PROTOCOLS.3 | 106 + .../docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.3 | 90 + deps/curl/docs/libcurl/opts/CURLOPT_PROXY.3 | 137 + .../docs/libcurl/opts/CURLOPT_PROXYAUTH.3 | 79 + .../docs/libcurl/opts/CURLOPT_PROXYHEADER.3 | 81 + .../docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3 | 72 + .../docs/libcurl/opts/CURLOPT_PROXYPORT.3 | 70 + .../docs/libcurl/opts/CURLOPT_PROXYTYPE.3 | 88 + .../docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3 | 74 + .../docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3 | 73 + .../docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3 | 95 + .../libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.3 | 94 + .../docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3 | 83 + .../docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3 | 85 + .../libcurl/opts/CURLOPT_PROXY_ISSUERCERT.3 | 84 + .../opts/CURLOPT_PROXY_ISSUERCERT_BLOB.3 | 98 + .../libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3 | 72 + .../opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3 | 122 + .../libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3 | 67 + .../docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3 | 81 + .../libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3 | 77 + .../libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.3 | 87 + .../docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3 | 80 + .../libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3 | 70 + .../libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.3 | 88 + .../libcurl/opts/CURLOPT_PROXY_SSLVERSION.3 | 110 + .../opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3 | 93 + .../libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3 | 109 + .../opts/CURLOPT_PROXY_SSL_VERIFYHOST.3 | 96 + .../opts/CURLOPT_PROXY_SSL_VERIFYPEER.3 | 97 + .../opts/CURLOPT_PROXY_TLS13_CIPHERS.3 | 81 + .../opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3 | 73 + .../libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3 | 81 + .../opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3 | 73 + .../opts/CURLOPT_PROXY_TRANSFER_MODE.3 | 71 + deps/curl/docs/libcurl/opts/CURLOPT_PUT.3 | 92 + .../docs/libcurl/opts/CURLOPT_QUICK_EXIT.3 | 63 + deps/curl/docs/libcurl/opts/CURLOPT_QUOTE.3 | 133 + .../docs/libcurl/opts/CURLOPT_RANDOM_FILE.3 | 69 + deps/curl/docs/libcurl/opts/CURLOPT_RANGE.3 | 86 + .../curl/docs/libcurl/opts/CURLOPT_READDATA.3 | 79 + .../docs/libcurl/opts/CURLOPT_READFUNCTION.3 | 125 + .../libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3 | 117 + .../opts/CURLOPT_REDIR_PROTOCOLS_STR.3 | 96 + deps/curl/docs/libcurl/opts/CURLOPT_REFERER.3 | 69 + .../libcurl/opts/CURLOPT_REQUEST_TARGET.3 | 69 + deps/curl/docs/libcurl/opts/CURLOPT_RESOLVE.3 | 116 + .../opts/CURLOPT_RESOLVER_START_DATA.3 | 72 + .../opts/CURLOPT_RESOLVER_START_FUNCTION.3 | 89 + .../docs/libcurl/opts/CURLOPT_RESUME_FROM.3 | 82 + .../libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3 | 80 + .../libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3 | 64 + .../docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3 | 122 + .../libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3 | 63 + .../libcurl/opts/CURLOPT_RTSP_SESSION_ID.3 | 69 + .../libcurl/opts/CURLOPT_RTSP_STREAM_URI.3 | 74 + .../libcurl/opts/CURLOPT_RTSP_TRANSPORT.3 | 69 + .../docs/libcurl/opts/CURLOPT_SASL_AUTHZID.3 | 74 + deps/curl/docs/libcurl/opts/CURLOPT_SASL_IR.3 | 74 + .../curl/docs/libcurl/opts/CURLOPT_SEEKDATA.3 | 73 + .../docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3 | 103 + .../opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3 | 77 + .../docs/libcurl/opts/CURLOPT_SERVICE_NAME.3 | 68 + deps/curl/docs/libcurl/opts/CURLOPT_SHARE.3 | 90 + .../docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3 | 77 + .../libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3 | 133 + .../docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.3 | 71 + .../libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3 | 67 + .../opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3 | 70 + .../libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3 | 69 + .../libcurl/opts/CURLOPT_SSH_COMPRESSION.3 | 66 + .../libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.3 | 75 + .../opts/CURLOPT_SSH_HOSTKEYFUNCTION.3 | 96 + .../opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3 | 72 + .../opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3 | 67 + .../docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3 | 77 + .../libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3 | 143 + .../libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3 | 70 + .../opts/CURLOPT_SSH_PRIVATE_KEYFILE.3 | 72 + .../libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3 | 72 + deps/curl/docs/libcurl/opts/CURLOPT_SSLCERT.3 | 90 + .../docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3 | 73 + .../docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.3 | 85 + .../docs/libcurl/opts/CURLOPT_SSLENGINE.3 | 76 + .../libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3 | 72 + deps/curl/docs/libcurl/opts/CURLOPT_SSLKEY.3 | 73 + .../docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3 | 74 + .../docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.3 | 89 + .../docs/libcurl/opts/CURLOPT_SSLVERSION.3 | 124 + .../libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3 | 94 + .../docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3 | 126 + .../libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3 | 168 + .../docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.3 | 64 + .../libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3 | 62 + .../libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3 | 64 + .../libcurl/opts/CURLOPT_SSL_FALSESTART.3 | 64 + .../docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3 | 106 + .../opts/CURLOPT_SSL_SESSIONID_CACHE.3 | 67 + .../libcurl/opts/CURLOPT_SSL_VERIFYHOST.3 | 115 + .../libcurl/opts/CURLOPT_SSL_VERIFYPEER.3 | 100 + .../libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3 | 70 + deps/curl/docs/libcurl/opts/CURLOPT_STDERR.3 | 68 + .../libcurl/opts/CURLOPT_STREAM_DEPENDS.3 | 79 + .../libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3 | 83 + .../docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3 | 83 + .../opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.3 | 101 + .../docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.3 | 66 + .../docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3 | 73 + .../docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3 | 72 + .../docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3 | 71 + .../docs/libcurl/opts/CURLOPT_TCP_NODELAY.3 | 73 + .../docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3 | 68 + .../docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3 | 66 + .../libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3 | 80 + .../docs/libcurl/opts/CURLOPT_TIMECONDITION.3 | 74 + deps/curl/docs/libcurl/opts/CURLOPT_TIMEOUT.3 | 92 + .../docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3 | 66 + .../docs/libcurl/opts/CURLOPT_TIMEVALUE.3 | 71 + .../libcurl/opts/CURLOPT_TIMEVALUE_LARGE.3 | 73 + .../docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.3 | 81 + .../libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3 | 72 + .../docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3 | 76 + .../libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3 | 71 + .../docs/libcurl/opts/CURLOPT_TRAILERDATA.3 | 63 + .../libcurl/opts/CURLOPT_TRAILERFUNCTION.3 | 110 + .../docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3 | 68 + .../libcurl/opts/CURLOPT_TRANSFER_ENCODING.3 | 70 + .../libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3 | 89 + .../libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3 | 80 + .../libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.3 | 85 + deps/curl/docs/libcurl/opts/CURLOPT_UPLOAD.3 | 99 + .../libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.3 | 82 + deps/curl/docs/libcurl/opts/CURLOPT_URL.3 | 144 + .../docs/libcurl/opts/CURLOPT_USERAGENT.3 | 69 + .../curl/docs/libcurl/opts/CURLOPT_USERNAME.3 | 93 + deps/curl/docs/libcurl/opts/CURLOPT_USERPWD.3 | 100 + deps/curl/docs/libcurl/opts/CURLOPT_USE_SSL.3 | 80 + deps/curl/docs/libcurl/opts/CURLOPT_VERBOSE.3 | 73 + .../docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3 | 118 + .../docs/libcurl/opts/CURLOPT_WRITEDATA.3 | 65 + .../docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3 | 138 + .../docs/libcurl/opts/CURLOPT_WS_OPTIONS.3 | 75 + .../docs/libcurl/opts/CURLOPT_XFERINFODATA.3 | 82 + .../libcurl/opts/CURLOPT_XFERINFOFUNCTION.3 | 122 + .../libcurl/opts/CURLOPT_XOAUTH2_BEARER.3 | 70 + .../docs/libcurl/opts/CURLSHOPT_LOCKFUNC.3 | 80 + deps/curl/docs/libcurl/opts/CURLSHOPT_SHARE.3 | 108 + .../docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.3 | 75 + .../docs/libcurl/opts/CURLSHOPT_UNSHARE.3 | 77 + .../docs/libcurl/opts/CURLSHOPT_USERDATA.3 | 65 + deps/curl/docs/libcurl/opts/Makefile.am | 63 + deps/curl/docs/libcurl/opts/Makefile.inc | 422 + deps/curl/docs/libcurl/opts/template.3 | 41 + deps/curl/docs/libcurl/symbols-in-versions | 1143 ++ deps/curl/docs/libcurl/symbols.pl | 102 + deps/curl/docs/mk-ca-bundle.1 | 120 + deps/curl/docs/options-in-versions | 270 + deps/curl/include/Makefile.am | 28 + deps/curl/include/README.md | 20 + deps/curl/include/curl/.gitignore | 7 + deps/curl/include/curl/Makefile.am | 41 + deps/curl/include/curl/curl.h | 3233 ++++++ deps/curl/include/curl/curlver.h | 79 + deps/curl/include/curl/easy.h | 125 + deps/curl/include/curl/header.h | 74 + deps/curl/include/curl/mprintf.h | 70 + deps/curl/include/curl/multi.h | 471 + deps/curl/include/curl/options.h | 70 + deps/curl/include/curl/stdcheaders.h | 35 + deps/curl/include/curl/system.h | 506 + deps/curl/include/curl/typecheck-gcc.h | 717 ++ deps/curl/include/curl/urlapi.h | 150 + deps/curl/include/curl/websockets.h | 84 + deps/curl/lib/.checksrc | 1 + deps/curl/lib/.gitattributes | 3 + deps/curl/lib/.gitignore | 17 + deps/curl/lib/CMakeLists.txt | 240 + deps/curl/lib/Makefile.am | 149 + deps/curl/lib/Makefile.inc | 370 + deps/curl/lib/Makefile.mk | 429 + deps/curl/lib/Makefile.soname | 42 + deps/curl/lib/altsvc.c | 717 ++ deps/curl/lib/altsvc.h | 81 + deps/curl/lib/amigaos.c | 247 + deps/curl/lib/amigaos.h | 41 + deps/curl/lib/arpa_telnet.h | 117 + deps/curl/lib/asyn-ares.c | 968 ++ deps/curl/lib/asyn-thread.c | 760 ++ deps/curl/lib/asyn.h | 184 + deps/curl/lib/base64.c | 293 + deps/curl/lib/bufq.c | 656 ++ deps/curl/lib/bufq.h | 265 + deps/curl/lib/bufref.c | 129 + deps/curl/lib/bufref.h | 48 + deps/curl/lib/c-hyper.c | 1247 +++ deps/curl/lib/c-hyper.h | 59 + deps/curl/lib/cf-h1-proxy.c | 1114 ++ deps/curl/lib/cf-h1-proxy.h | 39 + deps/curl/lib/cf-h2-proxy.c | 1567 +++ deps/curl/lib/cf-h2-proxy.h | 39 + deps/curl/lib/cf-haproxy.c | 245 + deps/curl/lib/cf-haproxy.h | 39 + deps/curl/lib/cf-https-connect.c | 531 + deps/curl/lib/cf-https-connect.h | 58 + deps/curl/lib/cf-socket.c | 1996 ++++ deps/curl/lib/cf-socket.h | 191 + deps/curl/lib/cfilters.c | 802 ++ deps/curl/lib/cfilters.h | 616 ++ deps/curl/lib/config-amigaos.h | 129 + deps/curl/lib/config-dos.h | 138 + deps/curl/lib/config-mac.h | 103 + deps/curl/lib/config-os400.h | 340 + deps/curl/lib/config-plan9.h | 147 + deps/curl/lib/config-riscos.h | 280 + deps/curl/lib/config-win32.h | 571 + deps/curl/lib/config-win32ce.h | 312 + deps/curl/lib/conncache.c | 588 + deps/curl/lib/conncache.h | 122 + deps/curl/lib/connect.c | 1455 +++ deps/curl/lib/connect.h | 132 + deps/curl/lib/content_encoding.c | 1034 ++ deps/curl/lib/content_encoding.h | 34 + deps/curl/lib/cookie.c | 1785 +++ deps/curl/lib/cookie.h | 138 + deps/curl/lib/curl_addrinfo.c | 592 + deps/curl/lib/curl_addrinfo.h | 108 + deps/curl/lib/curl_base64.h | 41 + deps/curl/lib/curl_config.h.cmake | 813 ++ deps/curl/lib/curl_ctype.h | 51 + deps/curl/lib/curl_des.c | 69 + deps/curl/lib/curl_des.h | 40 + deps/curl/lib/curl_endian.c | 84 + deps/curl/lib/curl_endian.h | 36 + deps/curl/lib/curl_fnmatch.c | 390 + deps/curl/lib/curl_fnmatch.h | 46 + deps/curl/lib/curl_get_line.c | 86 + deps/curl/lib/curl_get_line.h | 31 + deps/curl/lib/curl_gethostname.c | 102 + deps/curl/lib/curl_gethostname.h | 33 + deps/curl/lib/curl_gssapi.c | 152 + deps/curl/lib/curl_gssapi.h | 63 + deps/curl/lib/curl_hmac.h | 78 + deps/curl/lib/curl_krb5.h | 52 + deps/curl/lib/curl_ldap.h | 36 + deps/curl/lib/curl_md4.h | 39 + deps/curl/lib/curl_md5.h | 67 + deps/curl/lib/curl_memory.h | 178 + deps/curl/lib/curl_memrchr.c | 64 + deps/curl/lib/curl_memrchr.h | 44 + deps/curl/lib/curl_multibyte.c | 179 + deps/curl/lib/curl_multibyte.h | 91 + deps/curl/lib/curl_ntlm_core.c | 669 ++ deps/curl/lib/curl_ntlm_core.h | 79 + deps/curl/lib/curl_ntlm_wb.c | 500 + deps/curl/lib/curl_ntlm_wb.h | 45 + deps/curl/lib/curl_path.c | 199 + deps/curl/lib/curl_path.h | 49 + deps/curl/lib/curl_printf.h | 51 + deps/curl/lib/curl_range.c | 96 + deps/curl/lib/curl_range.h | 31 + deps/curl/lib/curl_rtmp.c | 338 + deps/curl/lib/curl_rtmp.h | 35 + deps/curl/lib/curl_sasl.c | 755 ++ deps/curl/lib/curl_sasl.h | 165 + deps/curl/lib/curl_setup.h | 802 ++ deps/curl/lib/curl_setup_once.h | 418 + deps/curl/lib/curl_sha256.h | 50 + deps/curl/lib/curl_sspi.c | 239 + deps/curl/lib/curl_sspi.h | 123 + deps/curl/lib/curl_threads.c | 153 + deps/curl/lib/curl_threads.h | 65 + deps/curl/lib/curl_trc.c | 241 + deps/curl/lib/curl_trc.h | 146 + deps/curl/lib/curlx.h | 118 + deps/curl/lib/dict.c | 320 + deps/curl/lib/dict.h | 31 + deps/curl/lib/doh.c | 998 ++ deps/curl/lib/doh.h | 128 + deps/curl/lib/dynbuf.c | 279 + deps/curl/lib/dynbuf.h | 93 + deps/curl/lib/dynhds.c | 396 + deps/curl/lib/dynhds.h | 183 + deps/curl/lib/easy.c | 1327 +++ deps/curl/lib/easy_lock.h | 111 + deps/curl/lib/easygetopt.c | 98 + deps/curl/lib/easyif.h | 41 + deps/curl/lib/easyoptions.c | 378 + deps/curl/lib/easyoptions.h | 37 + deps/curl/lib/escape.c | 234 + deps/curl/lib/escape.h | 44 + deps/curl/lib/file.c | 583 + deps/curl/lib/file.h | 42 + deps/curl/lib/fileinfo.c | 46 + deps/curl/lib/fileinfo.h | 40 + deps/curl/lib/fopen.c | 153 + deps/curl/lib/fopen.h | 30 + deps/curl/lib/formdata.c | 960 ++ deps/curl/lib/formdata.h | 59 + deps/curl/lib/ftp.c | 4446 ++++++++ deps/curl/lib/ftp.h | 167 + deps/curl/lib/ftplistparser.c | 1041 ++ deps/curl/lib/ftplistparser.h | 77 + deps/curl/lib/functypes.h | 115 + deps/curl/lib/getenv.c | 80 + deps/curl/lib/getinfo.c | 625 ++ deps/curl/lib/getinfo.h | 29 + deps/curl/lib/gopher.c | 242 + deps/curl/lib/gopher.h | 34 + deps/curl/lib/hash.c | 370 + deps/curl/lib/hash.h | 102 + deps/curl/lib/headers.c | 395 + deps/curl/lib/headers.h | 55 + deps/curl/lib/hmac.c | 173 + deps/curl/lib/hostasyn.c | 124 + deps/curl/lib/hostip.c | 1463 +++ deps/curl/lib/hostip.h | 229 + deps/curl/lib/hostip4.c | 301 + deps/curl/lib/hostip6.c | 157 + deps/curl/lib/hostsyn.c | 104 + deps/curl/lib/hsts.c | 587 + deps/curl/lib/hsts.h | 69 + deps/curl/lib/http.c | 4954 +++++++++ deps/curl/lib/http.h | 333 + deps/curl/lib/http1.c | 346 + deps/curl/lib/http1.h | 63 + deps/curl/lib/http2.c | 2829 +++++ deps/curl/lib/http2.h | 77 + deps/curl/lib/http_aws_sigv4.c | 808 ++ deps/curl/lib/http_aws_sigv4.h | 31 + deps/curl/lib/http_chunks.c | 315 + deps/curl/lib/http_chunks.h | 100 + deps/curl/lib/http_digest.c | 185 + deps/curl/lib/http_digest.h | 44 + deps/curl/lib/http_negotiate.c | 224 + deps/curl/lib/http_negotiate.h | 43 + deps/curl/lib/http_ntlm.c | 275 + deps/curl/lib/http_ntlm.h | 44 + deps/curl/lib/http_proxy.c | 336 + deps/curl/lib/http_proxy.h | 61 + deps/curl/lib/idn.c | 287 + deps/curl/lib/idn.h | 44 + deps/curl/lib/if2ip.c | 260 + deps/curl/lib/if2ip.h | 92 + deps/curl/lib/imap.c | 2114 ++++ deps/curl/lib/imap.h | 101 + deps/curl/lib/inet_ntop.c | 205 + deps/curl/lib/inet_ntop.h | 39 + deps/curl/lib/inet_pton.c | 242 + deps/curl/lib/inet_pton.h | 41 + deps/curl/lib/krb5.c | 902 ++ deps/curl/lib/ldap.c | 1107 ++ deps/curl/lib/libcurl.plist.in | 35 + deps/curl/lib/libcurl.rc | 65 + deps/curl/lib/libcurl.vers.in | 13 + deps/curl/lib/llist.c | 146 + deps/curl/lib/llist.h | 52 + deps/curl/lib/macos.c | 55 + deps/curl/lib/macos.h | 39 + deps/curl/lib/md4.c | 526 + deps/curl/lib/md5.c | 656 ++ deps/curl/lib/memdebug.c | 482 + deps/curl/lib/memdebug.h | 202 + deps/curl/lib/mime.c | 2025 ++++ deps/curl/lib/mime.h | 174 + deps/curl/lib/mprintf.c | 1172 ++ deps/curl/lib/mqtt.c | 845 ++ deps/curl/lib/mqtt.h | 62 + deps/curl/lib/multi.c | 3743 +++++++ deps/curl/lib/multihandle.h | 179 + deps/curl/lib/multiif.h | 97 + deps/curl/lib/netrc.c | 349 + deps/curl/lib/netrc.h | 43 + deps/curl/lib/nonblock.c | 84 + deps/curl/lib/nonblock.h | 32 + deps/curl/lib/noproxy.c | 266 + deps/curl/lib/noproxy.h | 45 + deps/curl/lib/openldap.c | 1212 ++ deps/curl/lib/optiontable.pl | 152 + deps/curl/lib/parsedate.c | 644 ++ deps/curl/lib/parsedate.h | 38 + deps/curl/lib/pingpong.c | 501 + deps/curl/lib/pingpong.h | 164 + deps/curl/lib/pop3.c | 1587 +++ deps/curl/lib/pop3.h | 97 + deps/curl/lib/progress.c | 625 ++ deps/curl/lib/progress.h | 76 + deps/curl/lib/psl.c | 113 + deps/curl/lib/psl.h | 49 + deps/curl/lib/rand.c | 289 + deps/curl/lib/rand.h | 50 + deps/curl/lib/rename.c | 73 + deps/curl/lib/rename.h | 29 + deps/curl/lib/rtsp.c | 1003 ++ deps/curl/lib/rtsp.h | 80 + deps/curl/lib/select.c | 403 + deps/curl/lib/select.h | 114 + deps/curl/lib/sendf.c | 802 ++ deps/curl/lib/sendf.h | 189 + deps/curl/lib/setopt.c | 3167 ++++++ deps/curl/lib/setopt.h | 32 + deps/curl/lib/setup-os400.h | 144 + deps/curl/lib/setup-vms.h | 444 + deps/curl/lib/setup-win32.h | 118 + deps/curl/lib/sha256.c | 545 + deps/curl/lib/share.c | 290 + deps/curl/lib/share.h | 68 + deps/curl/lib/sigpipe.h | 80 + deps/curl/lib/slist.c | 146 + deps/curl/lib/slist.h | 41 + deps/curl/lib/smb.c | 1203 ++ deps/curl/lib/smb.h | 60 + deps/curl/lib/smtp.c | 1929 ++++ deps/curl/lib/smtp.h | 100 + deps/curl/lib/sockaddr.h | 44 + deps/curl/lib/socketpair.c | 193 + deps/curl/lib/socketpair.h | 54 + deps/curl/lib/socks.c | 1263 +++ deps/curl/lib/socks.h | 61 + deps/curl/lib/socks_gssapi.c | 536 + deps/curl/lib/socks_sspi.c | 614 ++ deps/curl/lib/speedcheck.c | 79 + deps/curl/lib/speedcheck.h | 35 + deps/curl/lib/splay.c | 278 + deps/curl/lib/splay.h | 58 + deps/curl/lib/strcase.c | 204 + deps/curl/lib/strcase.h | 54 + deps/curl/lib/strdup.c | 147 + deps/curl/lib/strdup.h | 38 + deps/curl/lib/strerror.c | 1116 ++ deps/curl/lib/strerror.h | 39 + deps/curl/lib/strtok.c | 68 + deps/curl/lib/strtok.h | 36 + deps/curl/lib/strtoofft.c | 245 + deps/curl/lib/strtoofft.h | 54 + deps/curl/lib/system_win32.c | 241 + deps/curl/lib/system_win32.h | 49 + deps/curl/lib/telnet.c | 1643 +++ deps/curl/lib/telnet.h | 30 + deps/curl/lib/tftp.c | 1405 +++ deps/curl/lib/tftp.h | 33 + deps/curl/lib/timediff.c | 88 + deps/curl/lib/timediff.h | 52 + deps/curl/lib/timeval.c | 237 + deps/curl/lib/timeval.h | 62 + deps/curl/lib/transfer.c | 1919 ++++ deps/curl/lib/transfer.h | 73 + deps/curl/lib/url.c | 4062 +++++++ deps/curl/lib/url.h | 81 + deps/curl/lib/urlapi-int.h | 39 + deps/curl/lib/urlapi.c | 1953 ++++ deps/curl/lib/urldata.h | 2038 ++++ deps/curl/lib/vauth/cleartext.c | 138 + deps/curl/lib/vauth/cram.c | 97 + deps/curl/lib/vauth/digest.c | 994 ++ deps/curl/lib/vauth/digest.h | 40 + deps/curl/lib/vauth/digest_sspi.c | 668 ++ deps/curl/lib/vauth/gsasl.c | 127 + deps/curl/lib/vauth/krb5_gssapi.c | 323 + deps/curl/lib/vauth/krb5_sspi.c | 474 + deps/curl/lib/vauth/ntlm.c | 780 ++ deps/curl/lib/vauth/ntlm.h | 143 + deps/curl/lib/vauth/ntlm_sspi.c | 372 + deps/curl/lib/vauth/oauth2.c | 108 + deps/curl/lib/vauth/spnego_gssapi.c | 281 + deps/curl/lib/vauth/spnego_sspi.c | 364 + deps/curl/lib/vauth/vauth.c | 163 + deps/curl/lib/vauth/vauth.h | 238 + deps/curl/lib/version.c | 674 ++ deps/curl/lib/version_win32.c | 319 + deps/curl/lib/version_win32.h | 56 + deps/curl/lib/vquic/curl_msh3.c | 1092 ++ deps/curl/lib/vquic/curl_msh3.h | 46 + deps/curl/lib/vquic/curl_ngtcp2.c | 2835 +++++ deps/curl/lib/vquic/curl_ngtcp2.h | 61 + deps/curl/lib/vquic/curl_quiche.c | 1717 +++ deps/curl/lib/vquic/curl_quiche.h | 50 + deps/curl/lib/vquic/vquic.c | 671 ++ deps/curl/lib/vquic/vquic.h | 64 + deps/curl/lib/vquic/vquic_int.h | 91 + deps/curl/lib/vssh/libssh.c | 2966 +++++ deps/curl/lib/vssh/libssh2.c | 3822 +++++++ deps/curl/lib/vssh/ssh.h | 273 + deps/curl/lib/vssh/wolfssh.c | 1171 ++ deps/curl/lib/vtls/bearssl.c | 1220 +++ deps/curl/lib/vtls/bearssl.h | 34 + deps/curl/lib/vtls/gtls.c | 1679 +++ deps/curl/lib/vtls/gtls.h | 75 + deps/curl/lib/vtls/hostcheck.c | 135 + deps/curl/lib/vtls/hostcheck.h | 33 + deps/curl/lib/vtls/keylog.c | 166 + deps/curl/lib/vtls/keylog.h | 58 + deps/curl/lib/vtls/mbedtls.c | 1294 +++ deps/curl/lib/vtls/mbedtls.h | 34 + deps/curl/lib/vtls/mbedtls_threadlock.c | 134 + deps/curl/lib/vtls/mbedtls_threadlock.h | 50 + deps/curl/lib/vtls/openssl.c | 4936 +++++++++ deps/curl/lib/vtls/openssl.h | 70 + deps/curl/lib/vtls/rustls.c | 730 ++ deps/curl/lib/vtls/rustls.h | 35 + deps/curl/lib/vtls/schannel.c | 2929 +++++ deps/curl/lib/vtls/schannel.h | 86 + deps/curl/lib/vtls/schannel_int.h | 170 + deps/curl/lib/vtls/schannel_verify.c | 787 ++ deps/curl/lib/vtls/sectransp.c | 3497 ++++++ deps/curl/lib/vtls/sectransp.h | 34 + deps/curl/lib/vtls/vtls.c | 2157 ++++ deps/curl/lib/vtls/vtls.h | 256 + deps/curl/lib/vtls/vtls_int.h | 207 + deps/curl/lib/vtls/wolfssl.c | 1407 +++ deps/curl/lib/vtls/wolfssl.h | 33 + deps/curl/lib/vtls/x509asn1.c | 1438 +++ deps/curl/lib/vtls/x509asn1.h | 80 + deps/curl/lib/warnless.c | 386 + deps/curl/lib/warnless.h | 106 + deps/curl/lib/ws.c | 1132 ++ deps/curl/lib/ws.h | 89 + deps/curl/libcurl.def | 94 + deps/curl/libcurl.pc.in | 41 + deps/curl/m4/.gitignore | 10 + deps/curl/m4/curl-amissl.m4 | 69 + deps/curl/m4/curl-bearssl.m4 | 110 + deps/curl/m4/curl-compilers.m4 | 1624 +++ deps/curl/m4/curl-confopts.m4 | 668 ++ deps/curl/m4/curl-functions.m4 | 5929 ++++++++++ deps/curl/m4/curl-gnutls.m4 | 167 + deps/curl/m4/curl-mbedtls.m4 | 111 + deps/curl/m4/curl-openssl.m4 | 416 + deps/curl/m4/curl-override.m4 | 98 + deps/curl/m4/curl-reentrant.m4 | 506 + deps/curl/m4/curl-rustls.m4 | 111 + deps/curl/m4/curl-schannel.m4 | 48 + deps/curl/m4/curl-sectransp.m4 | 45 + deps/curl/m4/curl-sysconfig.m4 | 54 + deps/curl/m4/curl-wolfssl.m4 | 175 + deps/curl/m4/xc-am-iface.m4 | 85 + deps/curl/m4/xc-cc-check.m4 | 97 + deps/curl/m4/xc-lt-iface.m4 | 466 + deps/curl/m4/xc-translit.m4 | 165 + deps/curl/m4/xc-val-flgs.m4 | 244 + deps/curl/m4/zz40-xc-ovr.m4 | 667 ++ deps/curl/m4/zz50-xc-ovr.m4 | 61 + deps/curl/m4/zz60-xc-ovr.m4 | 65 + deps/curl/maketgz | 225 + deps/curl/packages/Makefile.am | 51 + deps/curl/packages/OS400/README.OS400 | 391 + deps/curl/packages/OS400/ccsidcurl.c | 1527 +++ deps/curl/packages/OS400/ccsidcurl.h | 113 + deps/curl/packages/OS400/config400.default | 55 + deps/curl/packages/OS400/curl.cmd | 32 + deps/curl/packages/OS400/curl.inc.in | 3407 ++++++ deps/curl/packages/OS400/curlcl.c | 177 + deps/curl/packages/OS400/curlmain.c | 121 + deps/curl/packages/OS400/initscript.sh | 287 + deps/curl/packages/OS400/make-include.sh | 106 + deps/curl/packages/OS400/make-lib.sh | 183 + deps/curl/packages/OS400/make-src.sh | 99 + deps/curl/packages/OS400/make-tests.sh | 145 + deps/curl/packages/OS400/makefile.sh | 123 + deps/curl/packages/OS400/os400sys.c | 1040 ++ deps/curl/packages/OS400/os400sys.h | 57 + .../packages/OS400/rpg-examples/HEADERAPI | 146 + .../curl/packages/OS400/rpg-examples/HTTPPOST | 129 + .../curl/packages/OS400/rpg-examples/INMEMORY | 159 + deps/curl/packages/OS400/rpg-examples/SIMPLE1 | 108 + deps/curl/packages/OS400/rpg-examples/SIMPLE2 | 108 + .../packages/OS400/rpg-examples/SMTPSRCMBR | 239 + deps/curl/packages/README.md | 12 + deps/curl/packages/vms/Makefile.am | 59 + .../curl/packages/vms/backup_gnv_curl_src.com | 130 + .../packages/vms/build_curl-config_script.com | 153 + deps/curl/packages/vms/build_gnv_curl.com | 36 + .../packages/vms/build_gnv_curl_pcsi_desc.com | 489 + .../packages/vms/build_gnv_curl_pcsi_text.com | 195 + .../vms/build_gnv_curl_release_notes.com | 100 + deps/curl/packages/vms/build_libcurl_pc.com | 202 + deps/curl/packages/vms/build_vms.com | 1038 ++ deps/curl/packages/vms/clean_gnv_curl.com | 242 + .../curl/packages/vms/compare_curl_source.com | 363 + deps/curl/packages/vms/config_h.com | 2004 ++++ deps/curl/packages/vms/curl_crtl_init.c | 333 + .../packages/vms/curl_gnv_build_steps.txt | 290 + .../packages/vms/curl_release_note_start.txt | 77 + deps/curl/packages/vms/curl_startup.com | 98 + deps/curl/packages/vms/curlmsg.h | 143 + deps/curl/packages/vms/curlmsg.msg | 134 + deps/curl/packages/vms/curlmsg.sdl | 116 + deps/curl/packages/vms/curlmsg_vms.h | 143 + .../vms/generate_config_vms_h_curl.com | 450 + .../packages/vms/generate_vax_transfer.com | 273 + deps/curl/packages/vms/gnv_conftest.c_first | 58 + deps/curl/packages/vms/gnv_curl_configure.sh | 44 + .../curl/packages/vms/gnv_libcurl_symbols.opt | 181 + deps/curl/packages/vms/gnv_link_curl.com | 851 ++ .../curl/packages/vms/macro32_exactcase.patch | 11 + .../packages/vms/make_gnv_curl_install.sh | 44 + .../packages/vms/make_pcsi_curl_kit_name.com | 188 + .../packages/vms/pcsi_gnv_curl_file_list.txt | 125 + .../packages/vms/pcsi_product_gnv_curl.com | 197 + deps/curl/packages/vms/readme | 228 + .../packages/vms/report_openssl_version.c | 100 + .../packages/vms/setup_gnv_curl_build.com | 286 + deps/curl/packages/vms/stage_curl_install.com | 170 + deps/curl/packages/vms/vms_eco_level.h | 30 + deps/curl/plan9/README | 55 + deps/curl/plan9/include/mkfile | 36 + deps/curl/plan9/lib/mkfile | 41 + deps/curl/plan9/lib/mkfile.inc | 27 + deps/curl/plan9/mkfile | 38 + deps/curl/plan9/mkfile.proto | 32 + deps/curl/plan9/src/mkfile | 47 + deps/curl/plan9/src/mkfile.inc | 27 + deps/curl/projects/README.md | 160 + deps/curl/projects/Windows/.gitattributes | 5 + deps/curl/projects/Windows/.gitignore | 8 + deps/curl/projects/Windows/VC10/.gitignore | 8 + deps/curl/projects/Windows/VC10/curl-all.sln | 298 + .../curl/projects/Windows/VC10/lib/.gitignore | 10 + .../projects/Windows/VC10/lib/libcurl.sln | 181 + .../projects/Windows/VC10/lib/libcurl.tmpl | 2353 ++++ .../Windows/VC10/lib/libcurl.vcxproj.filters | 17 + .../curl/projects/Windows/VC10/src/.gitignore | 10 + deps/curl/projects/Windows/VC10/src/curl.sln | 181 + deps/curl/projects/Windows/VC10/src/curl.tmpl | 2643 +++++ .../Windows/VC10/src/curl.vcxproj.filters | 17 + deps/curl/projects/Windows/VC11/.gitignore | 8 + deps/curl/projects/Windows/VC11/curl-all.sln | 298 + .../curl/projects/Windows/VC11/lib/.gitignore | 10 + .../projects/Windows/VC11/lib/libcurl.sln | 181 + .../projects/Windows/VC11/lib/libcurl.tmpl | 2409 ++++ .../Windows/VC11/lib/libcurl.vcxproj.filters | 17 + .../curl/projects/Windows/VC11/src/.gitignore | 10 + deps/curl/projects/Windows/VC11/src/curl.sln | 181 + deps/curl/projects/Windows/VC11/src/curl.tmpl | 2699 +++++ .../Windows/VC11/src/curl.vcxproj.filters | 17 + deps/curl/projects/Windows/VC12/.gitignore | 8 + deps/curl/projects/Windows/VC12/curl-all.sln | 298 + .../curl/projects/Windows/VC12/lib/.gitignore | 10 + .../projects/Windows/VC12/lib/libcurl.sln | 181 + .../projects/Windows/VC12/lib/libcurl.tmpl | 2409 ++++ .../Windows/VC12/lib/libcurl.vcxproj.filters | 17 + .../curl/projects/Windows/VC12/src/.gitignore | 10 + deps/curl/projects/Windows/VC12/src/curl.sln | 181 + deps/curl/projects/Windows/VC12/src/curl.tmpl | 2699 +++++ .../Windows/VC12/src/curl.vcxproj.filters | 17 + deps/curl/projects/Windows/VC14.10/.gitignore | 9 + .../projects/Windows/VC14.10/curl-all.sln | 298 + .../projects/Windows/VC14.10/lib/.gitignore | 10 + .../projects/Windows/VC14.10/lib/libcurl.sln | 181 + .../projects/Windows/VC14.10/lib/libcurl.tmpl | 2381 ++++ .../VC14.10/lib/libcurl.vcxproj.filters | 17 + .../projects/Windows/VC14.10/src/.gitignore | 10 + .../projects/Windows/VC14.10/src/curl.sln | 181 + .../projects/Windows/VC14.10/src/curl.tmpl | 2671 +++++ .../Windows/VC14.10/src/curl.vcxproj.filters | 17 + deps/curl/projects/Windows/VC14.20/.gitignore | 9 + .../projects/Windows/VC14.20/curl-all.sln | 298 + .../projects/Windows/VC14.20/lib/.gitignore | 10 + .../projects/Windows/VC14.20/lib/libcurl.sln | 181 + .../projects/Windows/VC14.20/lib/libcurl.tmpl | 2381 ++++ .../VC14.20/lib/libcurl.vcxproj.filters | 17 + .../projects/Windows/VC14.20/src/.gitignore | 10 + .../projects/Windows/VC14.20/src/curl.sln | 181 + .../projects/Windows/VC14.20/src/curl.tmpl | 2671 +++++ .../Windows/VC14.20/src/curl.vcxproj.filters | 17 + deps/curl/projects/Windows/VC14.30/.gitignore | 9 + .../projects/Windows/VC14.30/curl-all.sln | 298 + .../projects/Windows/VC14.30/lib/.gitignore | 10 + .../projects/Windows/VC14.30/lib/libcurl.sln | 181 + .../projects/Windows/VC14.30/lib/libcurl.tmpl | 2381 ++++ .../VC14.30/lib/libcurl.vcxproj.filters | 17 + .../projects/Windows/VC14.30/src/.gitignore | 10 + .../projects/Windows/VC14.30/src/curl.sln | 181 + .../projects/Windows/VC14.30/src/curl.tmpl | 2671 +++++ .../Windows/VC14.30/src/curl.vcxproj.filters | 17 + deps/curl/projects/Windows/VC14/.gitignore | 9 + deps/curl/projects/Windows/VC14/curl-all.sln | 298 + .../curl/projects/Windows/VC14/lib/.gitignore | 10 + .../projects/Windows/VC14/lib/libcurl.sln | 181 + .../projects/Windows/VC14/lib/libcurl.tmpl | 2409 ++++ .../Windows/VC14/lib/libcurl.vcxproj.filters | 17 + .../curl/projects/Windows/VC14/src/.gitignore | 10 + deps/curl/projects/Windows/VC14/src/curl.sln | 181 + deps/curl/projects/Windows/VC14/src/curl.tmpl | 2699 +++++ .../Windows/VC14/src/curl.vcxproj.filters | 17 + deps/curl/projects/build-openssl.bat | 739 ++ deps/curl/projects/build-wolfssl.bat | 429 + deps/curl/projects/checksrc.bat | 225 + deps/curl/projects/generate.bat | 424 + deps/curl/projects/wolfssl_options.h | 308 + deps/curl/projects/wolfssl_override.props | 40 + deps/curl/scripts/Makefile.am | 63 + deps/curl/scripts/checksrc.pl | 988 ++ deps/curl/scripts/ciconfig.pl | 190 + deps/curl/scripts/cijobs.pl | 510 + deps/curl/scripts/cmp-config.pl | 125 + deps/curl/scripts/completion.pl | 166 + deps/curl/scripts/contributors.sh | 101 + deps/curl/scripts/contrithanks.sh | 77 + deps/curl/scripts/copyright.pl | 227 + deps/curl/scripts/coverage.sh | 39 + deps/curl/scripts/delta | 168 + deps/curl/scripts/firefox-db2pem.sh | 55 + deps/curl/scripts/installcheck.sh | 50 + deps/curl/scripts/log2changes.pl | 103 + deps/curl/scripts/mk-ca-bundle.pl | 713 ++ deps/curl/scripts/release-notes.pl | 243 + deps/curl/scripts/schemetable.c | 207 + deps/curl/scripts/singleuse.pl | 234 + deps/curl/scripts/updatemanpages.pl | 357 + deps/curl/src/.checksrc | 1 + deps/curl/src/.gitignore | 14 + deps/curl/src/CMakeLists.txt | 133 + deps/curl/src/Makefile.am | 165 + deps/curl/src/Makefile.inc | 153 + deps/curl/src/Makefile.mk | 111 + deps/curl/src/curl.rc | 113 + deps/curl/src/mkhelp.pl | 234 + deps/curl/src/slist_wc.c | 74 + deps/curl/src/slist_wc.h | 57 + deps/curl/src/tool_binmode.c | 53 + deps/curl/src/tool_binmode.h | 38 + deps/curl/src/tool_bname.c | 51 + deps/curl/src/tool_bname.h | 36 + deps/curl/src/tool_cb_dbg.c | 300 + deps/curl/src/tool_cb_dbg.h | 36 + deps/curl/src/tool_cb_hdr.c | 434 + deps/curl/src/tool_cb_hdr.h | 58 + deps/curl/src/tool_cb_prg.c | 285 + deps/curl/src/tool_cb_prg.h | 54 + deps/curl/src/tool_cb_rea.c | 132 + deps/curl/src/tool_cb_rea.h | 42 + deps/curl/src/tool_cb_see.c | 121 + deps/curl/src/tool_cb_see.h | 46 + deps/curl/src/tool_cb_wrt.c | 385 + deps/curl/src/tool_cb_wrt.h | 38 + deps/curl/src/tool_cfgable.c | 193 + deps/curl/src/tool_cfgable.h | 336 + deps/curl/src/tool_dirhie.c | 167 + deps/curl/src/tool_dirhie.h | 32 + deps/curl/src/tool_doswin.c | 796 ++ deps/curl/src/tool_doswin.h | 72 + deps/curl/src/tool_easysrc.c | 238 + deps/curl/src/tool_easysrc.h | 58 + deps/curl/src/tool_filetime.c | 156 + deps/curl/src/tool_filetime.h | 42 + deps/curl/src/tool_findfile.c | 157 + deps/curl/src/tool_findfile.h | 36 + deps/curl/src/tool_formparse.c | 907 ++ deps/curl/src/tool_formparse.h | 73 + deps/curl/src/tool_getparam.c | 2794 +++++ deps/curl/src/tool_getparam.h | 73 + deps/curl/src/tool_getpass.c | 207 + deps/curl/src/tool_getpass.h | 38 + deps/curl/src/tool_help.c | 217 + deps/curl/src/tool_help.h | 75 + deps/curl/src/tool_helpers.c | 134 + deps/curl/src/tool_helpers.h | 36 + deps/curl/src/tool_hugehelp.c.cvs | 31 + deps/curl/src/tool_hugehelp.h | 35 + deps/curl/src/tool_ipfs.c | 296 + deps/curl/src/tool_ipfs.h | 33 + deps/curl/src/tool_libinfo.c | 208 + deps/curl/src/tool_libinfo.h | 67 + deps/curl/src/tool_listhelp.c | 811 ++ deps/curl/src/tool_main.c | 297 + deps/curl/src/tool_main.h | 48 + deps/curl/src/tool_msgs.c | 145 + deps/curl/src/tool_msgs.h | 34 + deps/curl/src/tool_operate.c | 2827 +++++ deps/curl/src/tool_operate.h | 86 + deps/curl/src/tool_operhlp.c | 254 + deps/curl/src/tool_operhlp.h | 42 + deps/curl/src/tool_paramhlp.c | 707 ++ deps/curl/src/tool_paramhlp.h | 61 + deps/curl/src/tool_parsecfg.c | 352 + deps/curl/src/tool_parsecfg.h | 30 + deps/curl/src/tool_progress.c | 321 + deps/curl/src/tool_progress.h | 41 + deps/curl/src/tool_sdecls.h | 133 + deps/curl/src/tool_setopt.c | 673 ++ deps/curl/src/tool_setopt.h | 150 + deps/curl/src/tool_setup.h | 77 + deps/curl/src/tool_sleep.c | 61 + deps/curl/src/tool_sleep.h | 30 + deps/curl/src/tool_stderr.c | 71 + deps/curl/src/tool_stderr.h | 32 + deps/curl/src/tool_strdup.c | 44 + deps/curl/src/tool_strdup.h | 32 + deps/curl/src/tool_urlglob.c | 721 ++ deps/curl/src/tool_urlglob.h | 78 + deps/curl/src/tool_util.c | 161 + deps/curl/src/tool_util.h | 42 + deps/curl/src/tool_version.h | 36 + deps/curl/src/tool_vms.c | 220 + deps/curl/src/tool_vms.h | 48 + deps/curl/src/tool_writeout.c | 675 ++ deps/curl/src/tool_writeout.h | 113 + deps/curl/src/tool_writeout_json.c | 173 + deps/curl/src/tool_writeout_json.h | 37 + deps/curl/src/tool_xattr.c | 138 + deps/curl/src/tool_xattr.h | 45 + deps/curl/src/var.c | 464 + deps/curl/src/var.h | 47 + deps/curl/tests/.gitignore | 29 + deps/curl/tests/CI.md | 117 + deps/curl/tests/CMakeLists.txt | 55 + deps/curl/tests/FILEFORMAT.md | 667 ++ deps/curl/tests/Makefile.am | 129 + deps/curl/tests/README.md | 264 + deps/curl/tests/appveyor.pm | 130 + deps/curl/tests/azure.pm | 165 + deps/curl/tests/badsymbols.pl | 158 + deps/curl/tests/certs/.gitignore | 10 + deps/curl/tests/certs/EdelCurlRoot-ca.cacert | 95 + deps/curl/tests/certs/EdelCurlRoot-ca.cnf | 11 + deps/curl/tests/certs/EdelCurlRoot-ca.crt | 95 + deps/curl/tests/certs/EdelCurlRoot-ca.csr | 17 + deps/curl/tests/certs/EdelCurlRoot-ca.der | Bin 0 -> 1080 bytes deps/curl/tests/certs/EdelCurlRoot-ca.key | 28 + deps/curl/tests/certs/EdelCurlRoot-ca.prm | 30 + deps/curl/tests/certs/Makefile.am | 137 + .../certs/Server-localhost-firstSAN-sv.crl | 14 + .../certs/Server-localhost-firstSAN-sv.crt | 100 + .../certs/Server-localhost-firstSAN-sv.csr | 16 + .../certs/Server-localhost-firstSAN-sv.der | Bin 0 -> 1123 bytes .../certs/Server-localhost-firstSAN-sv.dhp | 0 .../certs/Server-localhost-firstSAN-sv.key | 28 + .../certs/Server-localhost-firstSAN-sv.pem | 167 + .../certs/Server-localhost-firstSAN-sv.prm | 39 + .../Server-localhost-firstSAN-sv.pub.der | Bin 0 -> 294 bytes .../Server-localhost-firstSAN-sv.pub.pem | 9 + ...Server-localhost-firstSAN-sv.pubkey-pinned | 1 + .../certs/Server-localhost-lastSAN-sv.crl | 15 + .../certs/Server-localhost-lastSAN-sv.crt | 100 + .../certs/Server-localhost-lastSAN-sv.csr | 16 + .../certs/Server-localhost-lastSAN-sv.der | Bin 0 -> 1123 bytes .../certs/Server-localhost-lastSAN-sv.dhp | 0 .../certs/Server-localhost-lastSAN-sv.key | 28 + .../certs/Server-localhost-lastSAN-sv.pem | 166 + .../certs/Server-localhost-lastSAN-sv.prm | 38 + .../certs/Server-localhost-lastSAN-sv.pub.der | Bin 0 -> 294 bytes .../certs/Server-localhost-lastSAN-sv.pub.pem | 9 + .../Server-localhost-lastSAN-sv.pubkey-pinned | 1 + deps/curl/tests/certs/Server-localhost-sv.crl | 12 + deps/curl/tests/certs/Server-localhost-sv.crt | 99 + deps/curl/tests/certs/Server-localhost-sv.csr | 16 + deps/curl/tests/certs/Server-localhost-sv.der | Bin 0 -> 1096 bytes deps/curl/tests/certs/Server-localhost-sv.dhp | 0 deps/curl/tests/certs/Server-localhost-sv.key | 28 + deps/curl/tests/certs/Server-localhost-sv.pem | 165 + deps/curl/tests/certs/Server-localhost-sv.prm | 38 + .../tests/certs/Server-localhost-sv.pub.der | Bin 0 -> 294 bytes .../tests/certs/Server-localhost-sv.pub.pem | 9 + .../certs/Server-localhost-sv.pubkey-pinned | 1 + .../tests/certs/Server-localhost.nn-sv.crl | 13 + .../tests/certs/Server-localhost.nn-sv.crt | 99 + .../tests/certs/Server-localhost.nn-sv.csr | 16 + .../tests/certs/Server-localhost.nn-sv.der | Bin 0 -> 1102 bytes .../tests/certs/Server-localhost.nn-sv.dhp | 0 .../tests/certs/Server-localhost.nn-sv.key | 28 + .../tests/certs/Server-localhost.nn-sv.pem | 165 + .../tests/certs/Server-localhost.nn-sv.prm | 38 + .../certs/Server-localhost.nn-sv.pub.der | Bin 0 -> 294 bytes .../certs/Server-localhost.nn-sv.pub.pem | 9 + .../Server-localhost.nn-sv.pubkey-pinned | 1 + .../tests/certs/Server-localhost0h-sv.crl | 14 + .../tests/certs/Server-localhost0h-sv.crt | 99 + .../tests/certs/Server-localhost0h-sv.csr | 16 + .../tests/certs/Server-localhost0h-sv.der | Bin 0 -> 1098 bytes .../tests/certs/Server-localhost0h-sv.dhp | 0 .../tests/certs/Server-localhost0h-sv.key | 28 + .../tests/certs/Server-localhost0h-sv.pem | 166 + .../tests/certs/Server-localhost0h-sv.prm | 39 + .../tests/certs/Server-localhost0h-sv.pub.der | Bin 0 -> 294 bytes .../tests/certs/Server-localhost0h-sv.pub.pem | 9 + .../certs/Server-localhost0h-sv.pubkey-pinned | 1 + deps/curl/tests/certs/scripts/Makefile.am | 30 + deps/curl/tests/certs/scripts/genroot.sh | 89 + deps/curl/tests/certs/scripts/genserv.sh | 143 + deps/curl/tests/certs/srp-verifier-conf | 3 + deps/curl/tests/certs/srp-verifier-db | 2 + deps/curl/tests/certs/stunnel-sv.crl | 15 + deps/curl/tests/certs/stunnel-sv.crt | 99 + deps/curl/tests/certs/stunnel-sv.csr | 16 + deps/curl/tests/certs/stunnel-sv.der | Bin 0 -> 1096 bytes deps/curl/tests/certs/stunnel-sv.dhp | 0 deps/curl/tests/certs/stunnel-sv.key | 28 + deps/curl/tests/certs/stunnel-sv.pem | 165 + deps/curl/tests/certs/stunnel-sv.prm | 38 + deps/curl/tests/certs/stunnel-sv.pub.der | Bin 0 -> 294 bytes deps/curl/tests/certs/stunnel-sv.pub.pem | 9 + .../curl/tests/certs/stunnel-sv.pubkey-pinned | 1 + deps/curl/tests/check-deprecated.pl | 329 + deps/curl/tests/check-translatable-options.pl | 147 + deps/curl/tests/config.in | 24 + deps/curl/tests/conftest.py | 60 + deps/curl/tests/convsrctest.pl | 263 + deps/curl/tests/data/.gitattributes | 5 + deps/curl/tests/data/.gitignore | 5 + deps/curl/tests/data/CMakeLists.txt | 26 + deps/curl/tests/data/DISABLED | 114 + deps/curl/tests/data/Makefile.am | 31 + deps/curl/tests/data/Makefile.inc | 262 + deps/curl/tests/data/test1 | 53 + deps/curl/tests/data/test10 | 64 + deps/curl/tests/data/test100 | 57 + deps/curl/tests/data/test1000 | 42 + deps/curl/tests/data/test1001 | 105 + deps/curl/tests/data/test1002 | 122 + deps/curl/tests/data/test1003 | 48 + deps/curl/tests/data/test1004 | 60 + deps/curl/tests/data/test1005 | 48 + deps/curl/tests/data/test1006 | 49 + deps/curl/tests/data/test1007 | 47 + deps/curl/tests/data/test1008 | 125 + deps/curl/tests/data/test1009 | 49 + deps/curl/tests/data/test101 | 58 + deps/curl/tests/data/test1010 | 58 + deps/curl/tests/data/test1011 | 74 + deps/curl/tests/data/test1012 | 77 + deps/curl/tests/data/test1013 | 37 + deps/curl/tests/data/test1014 | 37 + deps/curl/tests/data/test1015 | 52 + deps/curl/tests/data/test1016 | 39 + deps/curl/tests/data/test1017 | 40 + deps/curl/tests/data/test1018 | 39 + deps/curl/tests/data/test1019 | 42 + deps/curl/tests/data/test102 | 52 + deps/curl/tests/data/test1020 | 41 + deps/curl/tests/data/test1021 | 134 + deps/curl/tests/data/test1022 | 37 + deps/curl/tests/data/test1023 | 37 + deps/curl/tests/data/test1024 | 106 + deps/curl/tests/data/test1025 | 108 + deps/curl/tests/data/test1026 | 42 + deps/curl/tests/data/test1027 | 39 + deps/curl/tests/data/test1028 | 88 + deps/curl/tests/data/test1029 | 56 + deps/curl/tests/data/test103 | 54 + deps/curl/tests/data/test1030 | 106 + deps/curl/tests/data/test1031 | 75 + deps/curl/tests/data/test1032 | 54 + deps/curl/tests/data/test1033 | 58 + deps/curl/tests/data/test1034 | 57 + deps/curl/tests/data/test1035 | 50 + deps/curl/tests/data/test1036 | 61 + deps/curl/tests/data/test1037 | 54 + deps/curl/tests/data/test1038 | 53 + deps/curl/tests/data/test1039 | 53 + deps/curl/tests/data/test104 | 43 + deps/curl/tests/data/test1040 | 77 + deps/curl/tests/data/test1041 | 75 + deps/curl/tests/data/test1042 | 92 + deps/curl/tests/data/test1043 | 82 + deps/curl/tests/data/test1044 | 58 + deps/curl/tests/data/test1045 | 50 + deps/curl/tests/data/test1046 | 58 + deps/curl/tests/data/test1047 | 58 + deps/curl/tests/data/test1048 | 67 + deps/curl/tests/data/test1049 | 49 + deps/curl/tests/data/test105 | 51 + deps/curl/tests/data/test1050 | 66 + deps/curl/tests/data/test1051 | 115 + deps/curl/tests/data/test1052 | 110 + deps/curl/tests/data/test1053 | 130 + deps/curl/tests/data/test1054 | 79 + deps/curl/tests/data/test1055 | 93 + deps/curl/tests/data/test1056 | 85 + deps/curl/tests/data/test1057 | 52 + deps/curl/tests/data/test1058 | 51 + deps/curl/tests/data/test1059 | 57 + deps/curl/tests/data/test106 | 51 + deps/curl/tests/data/test1060 | 903 ++ deps/curl/tests/data/test1061 | 908 ++ deps/curl/tests/data/test1062 | 49 + deps/curl/tests/data/test1063 | 45 + deps/curl/tests/data/test1064 | 78 + deps/curl/tests/data/test1065 | 77 + deps/curl/tests/data/test1066 | 81 + deps/curl/tests/data/test1067 | 80 + deps/curl/tests/data/test1068 | 56 + deps/curl/tests/data/test1069 | 36 + deps/curl/tests/data/test107 | 51 + deps/curl/tests/data/test1070 | 63 + deps/curl/tests/data/test1071 | 112 + deps/curl/tests/data/test1072 | 80 + deps/curl/tests/data/test1073 | 74 + deps/curl/tests/data/test1074 | 76 + deps/curl/tests/data/test1075 | 91 + deps/curl/tests/data/test1076 | 77 + deps/curl/tests/data/test1077 | 75 + deps/curl/tests/data/test1078 | 99 + deps/curl/tests/data/test1079 | 75 + deps/curl/tests/data/test108 | 56 + deps/curl/tests/data/test1080 | 68 + deps/curl/tests/data/test1081 | 76 + deps/curl/tests/data/test1082 | 53 + deps/curl/tests/data/test1083 | 57 + deps/curl/tests/data/test1084 | 41 + deps/curl/tests/data/test1085 | 48 + deps/curl/tests/data/test1086 | 113 + deps/curl/tests/data/test1087 | 113 + deps/curl/tests/data/test1088 | 115 + deps/curl/tests/data/test1089 | 90 + deps/curl/tests/data/test109 | 48 + deps/curl/tests/data/test1090 | 97 + deps/curl/tests/data/test1091 | 47 + deps/curl/tests/data/test1092 | 55 + deps/curl/tests/data/test1093 | 49 + deps/curl/tests/data/test1094 | 55 + deps/curl/tests/data/test1095 | 82 + deps/curl/tests/data/test1096 | 51 + deps/curl/tests/data/test1097 | 80 + deps/curl/tests/data/test1098 | 73 + deps/curl/tests/data/test1099 | 52 + deps/curl/tests/data/test11 | 75 + deps/curl/tests/data/test110 | 52 + deps/curl/tests/data/test1100 | 114 + deps/curl/tests/data/test1101 | 52 + deps/curl/tests/data/test1102 | 51 + deps/curl/tests/data/test1103 | 48 + deps/curl/tests/data/test1104 | 88 + deps/curl/tests/data/test1105 | 69 + deps/curl/tests/data/test1106 | 56 + deps/curl/tests/data/test1107 | 53 + deps/curl/tests/data/test1108 | 45 + deps/curl/tests/data/test1109 | 44 + deps/curl/tests/data/test111 | 45 + deps/curl/tests/data/test1110 | 45 + deps/curl/tests/data/test1111 | 45 + deps/curl/tests/data/test1112 | 118 + deps/curl/tests/data/test1113 | 99 + deps/curl/tests/data/test1114 | 136 + deps/curl/tests/data/test1115 | 50 + deps/curl/tests/data/test1116 | 87 + deps/curl/tests/data/test1117 | 87 + deps/curl/tests/data/test1118 | 53 + deps/curl/tests/data/test1119 | 30 + deps/curl/tests/data/test112 | 49 + deps/curl/tests/data/test1120 | 46 + deps/curl/tests/data/test1121 | 45 + deps/curl/tests/data/test1122 | 69 + deps/curl/tests/data/test1123 | 198 + deps/curl/tests/data/test1124 | 67 + deps/curl/tests/data/test1125 | 67 + deps/curl/tests/data/test1126 | 50 + deps/curl/tests/data/test1127 | 59 + deps/curl/tests/data/test1128 | 84 + deps/curl/tests/data/test1129 | 96 + deps/curl/tests/data/test113 | 37 + deps/curl/tests/data/test1130 | 97 + deps/curl/tests/data/test1131 | 95 + deps/curl/tests/data/test1132 | 25 + deps/curl/tests/data/test1133 | 105 + deps/curl/tests/data/test1134 | 64 + deps/curl/tests/data/test1135 | 127 + deps/curl/tests/data/test1136 | 66 + deps/curl/tests/data/test1137 | 52 + deps/curl/tests/data/test1138 | 72 + deps/curl/tests/data/test1139 | 33 + deps/curl/tests/data/test114 | 38 + deps/curl/tests/data/test1140 | 32 + deps/curl/tests/data/test1141 | 72 + deps/curl/tests/data/test1142 | 65 + deps/curl/tests/data/test1143 | 48 + deps/curl/tests/data/test1144 | 72 + deps/curl/tests/data/test1145 | 40 + deps/curl/tests/data/test1146 | 45 + deps/curl/tests/data/test1147 | 68 + deps/curl/tests/data/test1148 | 67 + deps/curl/tests/data/test1149 | 64 + deps/curl/tests/data/test115 | 44 + deps/curl/tests/data/test1150 | 57 + deps/curl/tests/data/test1151 | 68 + deps/curl/tests/data/test1152 | 61 + deps/curl/tests/data/test1153 | 61 + deps/curl/tests/data/test1154 | 55 + deps/curl/tests/data/test1155 | 55 + deps/curl/tests/data/test1156 | 71 + deps/curl/tests/data/test1157 | 56 + deps/curl/tests/data/test1158 | 101 + deps/curl/tests/data/test1159 | 56 + deps/curl/tests/data/test116 | 55 + deps/curl/tests/data/test1160 | 55 + deps/curl/tests/data/test1161 | 55 + deps/curl/tests/data/test1162 | 56 + deps/curl/tests/data/test1163 | 52 + deps/curl/tests/data/test1164 | 54 + deps/curl/tests/data/test1165 | 25 + deps/curl/tests/data/test1166 | 52 + deps/curl/tests/data/test1167 | 24 + deps/curl/tests/data/test1168 | 77 + deps/curl/tests/data/test1169 | 34 + deps/curl/tests/data/test117 | 44 + deps/curl/tests/data/test1170 | 67 + deps/curl/tests/data/test1171 | 67 + deps/curl/tests/data/test1172 | 48 + deps/curl/tests/data/test1173 | 32 + deps/curl/tests/data/test1174 | 48 + deps/curl/tests/data/test1175 | 25 + deps/curl/tests/data/test1176 | 66 + deps/curl/tests/data/test1177 | 25 + deps/curl/tests/data/test1178 | 53 + deps/curl/tests/data/test1179 | 43 + deps/curl/tests/data/test118 | 49 + deps/curl/tests/data/test1180 | 48 + deps/curl/tests/data/test1181 | 48 + deps/curl/tests/data/test1182 | 36 + deps/curl/tests/data/test1183 | 48 + deps/curl/tests/data/test1184 | 108 + deps/curl/tests/data/test1185 | 184 + deps/curl/tests/data/test1186 | 101 + deps/curl/tests/data/test1187 | 66 + deps/curl/tests/data/test1188 | 56 + deps/curl/tests/data/test1189 | 111 + deps/curl/tests/data/test119 | 51 + deps/curl/tests/data/test1190 | 56 + deps/curl/tests/data/test1191 | 50 + deps/curl/tests/data/test1192 | 56 + deps/curl/tests/data/test1193 | 72 + deps/curl/tests/data/test1194 | 59 + deps/curl/tests/data/test1195 | 63 + deps/curl/tests/data/test1196 | 62 + deps/curl/tests/data/test1197 | 87 + deps/curl/tests/data/test1198 | 54 + deps/curl/tests/data/test1199 | 55 + deps/curl/tests/data/test12 | 54 + deps/curl/tests/data/test120 | 53 + deps/curl/tests/data/test1200 | 39 + deps/curl/tests/data/test1201 | 39 + deps/curl/tests/data/test1202 | 40 + deps/curl/tests/data/test1203 | 43 + deps/curl/tests/data/test1204 | 78 + deps/curl/tests/data/test1205 | 48 + deps/curl/tests/data/test1206 | 54 + deps/curl/tests/data/test1207 | 53 + deps/curl/tests/data/test1208 | 62 + deps/curl/tests/data/test1209 | 60 + deps/curl/tests/data/test121 | 51 + deps/curl/tests/data/test1210 | 61 + deps/curl/tests/data/test1211 | 55 + deps/curl/tests/data/test1212 | 52 + deps/curl/tests/data/test1213 | 54 + deps/curl/tests/data/test1214 | 54 + deps/curl/tests/data/test1215 | 96 + deps/curl/tests/data/test1216 | 66 + deps/curl/tests/data/test1217 | 57 + deps/curl/tests/data/test1218 | 65 + deps/curl/tests/data/test1219 | 49 + deps/curl/tests/data/test122 | 45 + deps/curl/tests/data/test1220 | 37 + deps/curl/tests/data/test1221 | 53 + deps/curl/tests/data/test1222 | 24 + deps/curl/tests/data/test1223 | 58 + deps/curl/tests/data/test1224 | 49 + deps/curl/tests/data/test1225 | 56 + deps/curl/tests/data/test1226 | 49 + deps/curl/tests/data/test1227 | 48 + deps/curl/tests/data/test1228 | 58 + deps/curl/tests/data/test1229 | 82 + deps/curl/tests/data/test123 | 40 + deps/curl/tests/data/test1230 | 78 + deps/curl/tests/data/test1231 | 60 + deps/curl/tests/data/test1232 | 67 + deps/curl/tests/data/test1233 | 47 + deps/curl/tests/data/test1234 | 33 + deps/curl/tests/data/test1235 | 88 + deps/curl/tests/data/test1236 | 33 + deps/curl/tests/data/test1237 | 45 + deps/curl/tests/data/test1238 | 65 + deps/curl/tests/data/test1239 | 66 + deps/curl/tests/data/test124 | 47 + deps/curl/tests/data/test1240 | 47 + deps/curl/tests/data/test1241 | 66 + deps/curl/tests/data/test1242 | 43 + deps/curl/tests/data/test1243 | 44 + deps/curl/tests/data/test1244 | 62 + deps/curl/tests/data/test1245 | 57 + deps/curl/tests/data/test1246 | 66 + deps/curl/tests/data/test1247 | 38 + deps/curl/tests/data/test1248 | 50 + deps/curl/tests/data/test1249 | 53 + deps/curl/tests/data/test125 | 41 + deps/curl/tests/data/test1250 | 51 + deps/curl/tests/data/test1251 | 52 + deps/curl/tests/data/test1252 | 53 + deps/curl/tests/data/test1253 | 54 + deps/curl/tests/data/test1254 | 54 + deps/curl/tests/data/test1255 | 51 + deps/curl/tests/data/test1256 | 55 + deps/curl/tests/data/test1257 | 55 + deps/curl/tests/data/test1258 | 56 + deps/curl/tests/data/test1259 | 45 + deps/curl/tests/data/test126 | 48 + deps/curl/tests/data/test1260 | 36 + deps/curl/tests/data/test1261 | 59 + deps/curl/tests/data/test1262 | 40 + deps/curl/tests/data/test1263 | 37 + deps/curl/tests/data/test1264 | 36 + deps/curl/tests/data/test1265 | 51 + deps/curl/tests/data/test1266 | 48 + deps/curl/tests/data/test1267 | 48 + deps/curl/tests/data/test1268 | 41 + deps/curl/tests/data/test1269 | 34 + deps/curl/tests/data/test127 | 46 + deps/curl/tests/data/test1270 | 67 + deps/curl/tests/data/test1271 | 46 + deps/curl/tests/data/test1272 | 43 + deps/curl/tests/data/test1273 | 81 + deps/curl/tests/data/test1274 | 75 + deps/curl/tests/data/test1275 | 25 + deps/curl/tests/data/test1276 | 25 + deps/curl/tests/data/test1277 | 206 + deps/curl/tests/data/test1278 | 48 + deps/curl/tests/data/test1279 | 31 + deps/curl/tests/data/test128 | 57 + deps/curl/tests/data/test1280 | 59 + deps/curl/tests/data/test1281 | 38 + deps/curl/tests/data/test1282 | 45 + deps/curl/tests/data/test1283 | 55 + deps/curl/tests/data/test1284 | 88 + deps/curl/tests/data/test1285 | 95 + deps/curl/tests/data/test1286 | 111 + deps/curl/tests/data/test1287 | 95 + deps/curl/tests/data/test1288 | 98 + deps/curl/tests/data/test1289 | 35 + deps/curl/tests/data/test129 | 57 + deps/curl/tests/data/test1290 | 46 + deps/curl/tests/data/test1291 | 44 + deps/curl/tests/data/test1292 | 48 + deps/curl/tests/data/test1293 | 68 + deps/curl/tests/data/test1294 | 65 + deps/curl/tests/data/test1295 | 81 + deps/curl/tests/data/test1296 | 54 + deps/curl/tests/data/test1297 | 65 + deps/curl/tests/data/test1298 | 54 + deps/curl/tests/data/test1299 | 53 + deps/curl/tests/data/test13 | 42 + deps/curl/tests/data/test130 | 64 + deps/curl/tests/data/test1300 | 22 + deps/curl/tests/data/test1301 | 21 + deps/curl/tests/data/test1302 | 22 + deps/curl/tests/data/test1303 | 22 + deps/curl/tests/data/test1304 | 30 + deps/curl/tests/data/test1305 | 26 + deps/curl/tests/data/test1306 | 30 + deps/curl/tests/data/test1307 | 24 + deps/curl/tests/data/test1308 | 32 + deps/curl/tests/data/test1309 | 1564 +++ deps/curl/tests/data/test131 | 63 + deps/curl/tests/data/test1310 | 124 + deps/curl/tests/data/test1311 | 62 + deps/curl/tests/data/test1312 | 62 + deps/curl/tests/data/test1313 | 62 + deps/curl/tests/data/test1314 | 81 + deps/curl/tests/data/test1315 | 86 + deps/curl/tests/data/test1316 | 81 + deps/curl/tests/data/test1317 | 54 + deps/curl/tests/data/test1318 | 59 + deps/curl/tests/data/test1319 | 81 + deps/curl/tests/data/test132 | 62 + deps/curl/tests/data/test1320 | 71 + deps/curl/tests/data/test1321 | 77 + deps/curl/tests/data/test1322 | 55 + deps/curl/tests/data/test1323 | 32 + deps/curl/tests/data/test1324 | 54 + deps/curl/tests/data/test1325 | 79 + deps/curl/tests/data/test1326 | 48 + deps/curl/tests/data/test1327 | 47 + deps/curl/tests/data/test1328 | 70 + deps/curl/tests/data/test1329 | 33 + deps/curl/tests/data/test133 | 62 + deps/curl/tests/data/test1330 | 48 + deps/curl/tests/data/test1331 | 92 + deps/curl/tests/data/test1332 | 78 + deps/curl/tests/data/test1333 | 53 + deps/curl/tests/data/test1334 | 74 + deps/curl/tests/data/test1335 | 71 + deps/curl/tests/data/test1336 | 79 + deps/curl/tests/data/test1337 | 76 + deps/curl/tests/data/test1338 | 75 + deps/curl/tests/data/test1339 | 72 + deps/curl/tests/data/test134 | 64 + deps/curl/tests/data/test1340 | 78 + deps/curl/tests/data/test1341 | 75 + deps/curl/tests/data/test1342 | 81 + deps/curl/tests/data/test1343 | 78 + deps/curl/tests/data/test1344 | 87 + deps/curl/tests/data/test1345 | 84 + deps/curl/tests/data/test1346 | 71 + deps/curl/tests/data/test1347 | 76 + deps/curl/tests/data/test1348 | 61 + deps/curl/tests/data/test1349 | 83 + deps/curl/tests/data/test135 | 54 + deps/curl/tests/data/test1350 | 80 + deps/curl/tests/data/test1351 | 84 + deps/curl/tests/data/test1352 | 81 + deps/curl/tests/data/test1353 | 83 + deps/curl/tests/data/test1354 | 78 + deps/curl/tests/data/test1355 | 61 + deps/curl/tests/data/test1356 | 79 + deps/curl/tests/data/test1357 | 99 + deps/curl/tests/data/test1358 | 96 + deps/curl/tests/data/test1359 | 100 + deps/curl/tests/data/test136 | 42 + deps/curl/tests/data/test1360 | 97 + deps/curl/tests/data/test1361 | 99 + deps/curl/tests/data/test1362 | 96 + deps/curl/tests/data/test1363 | 79 + deps/curl/tests/data/test1364 | 69 + deps/curl/tests/data/test1365 | 66 + deps/curl/tests/data/test1366 | 71 + deps/curl/tests/data/test1367 | 68 + deps/curl/tests/data/test1368 | 70 + deps/curl/tests/data/test1369 | 67 + deps/curl/tests/data/test137 | 47 + deps/curl/tests/data/test1370 | 72 + deps/curl/tests/data/test1371 | 69 + deps/curl/tests/data/test1372 | 76 + deps/curl/tests/data/test1373 | 73 + deps/curl/tests/data/test1374 | 79 + deps/curl/tests/data/test1375 | 76 + deps/curl/tests/data/test1376 | 66 + deps/curl/tests/data/test1377 | 68 + deps/curl/tests/data/test1378 | 56 + deps/curl/tests/data/test1379 | 76 + deps/curl/tests/data/test138 | 50 + deps/curl/tests/data/test1380 | 73 + deps/curl/tests/data/test1381 | 77 + deps/curl/tests/data/test1382 | 74 + deps/curl/tests/data/test1383 | 76 + deps/curl/tests/data/test1384 | 73 + deps/curl/tests/data/test1385 | 56 + deps/curl/tests/data/test1386 | 71 + deps/curl/tests/data/test1387 | 91 + deps/curl/tests/data/test1388 | 88 + deps/curl/tests/data/test1389 | 92 + deps/curl/tests/data/test139 | 47 + deps/curl/tests/data/test1390 | 89 + deps/curl/tests/data/test1391 | 91 + deps/curl/tests/data/test1392 | 88 + deps/curl/tests/data/test1393 | 71 + deps/curl/tests/data/test1394 | 26 + deps/curl/tests/data/test1395 | 21 + deps/curl/tests/data/test1396 | 24 + deps/curl/tests/data/test1397 | 22 + deps/curl/tests/data/test1398 | 23 + deps/curl/tests/data/test1399 | 22 + deps/curl/tests/data/test14 | 41 + deps/curl/tests/data/test140 | 42 + deps/curl/tests/data/test1400 | 110 + deps/curl/tests/data/test1401 | 133 + deps/curl/tests/data/test1402 | 115 + deps/curl/tests/data/test1403 | 110 + deps/curl/tests/data/test1404 | 193 + deps/curl/tests/data/test1405 | 144 + deps/curl/tests/data/test1406 | 134 + deps/curl/tests/data/test1407 | 112 + deps/curl/tests/data/test1408 | 73 + deps/curl/tests/data/test1409 | 31 + deps/curl/tests/data/test141 | 52 + deps/curl/tests/data/test1410 | 31 + deps/curl/tests/data/test1411 | 58 + deps/curl/tests/data/test1412 | 128 + deps/curl/tests/data/test1413 | 72 + deps/curl/tests/data/test1414 | 57 + deps/curl/tests/data/test1415 | 93 + deps/curl/tests/data/test1416 | 61 + deps/curl/tests/data/test1417 | 77 + deps/curl/tests/data/test1418 | 122 + deps/curl/tests/data/test1419 | 68 + deps/curl/tests/data/test142 | 190 + deps/curl/tests/data/test1420 | 116 + deps/curl/tests/data/test1421 | 74 + deps/curl/tests/data/test1422 | 62 + deps/curl/tests/data/test1423 | 55 + deps/curl/tests/data/test1424 | 74 + deps/curl/tests/data/test1425 | Bin 0 -> 1732 bytes deps/curl/tests/data/test1426 | Bin 0 -> 1669 bytes deps/curl/tests/data/test1427 | 29 + deps/curl/tests/data/test1428 | 81 + deps/curl/tests/data/test1429 | 68 + deps/curl/tests/data/test143 | 44 + deps/curl/tests/data/test1430 | 56 + deps/curl/tests/data/test1431 | 54 + deps/curl/tests/data/test1432 | 55 + deps/curl/tests/data/test1433 | 55 + deps/curl/tests/data/test1434 | 88 + deps/curl/tests/data/test1435 | 44 + deps/curl/tests/data/test1436 | 85 + deps/curl/tests/data/test1437 | 82 + deps/curl/tests/data/test1438 | 57 + deps/curl/tests/data/test1439 | 56 + deps/curl/tests/data/test144 | 49 + deps/curl/tests/data/test1440 | 35 + deps/curl/tests/data/test1441 | 35 + deps/curl/tests/data/test1442 | 35 + deps/curl/tests/data/test1443 | 66 + deps/curl/tests/data/test1444 | 52 + deps/curl/tests/data/test1445 | 35 + deps/curl/tests/data/test1446 | 42 + deps/curl/tests/data/test1447 | 39 + deps/curl/tests/data/test1448 | 92 + deps/curl/tests/data/test1449 | 38 + deps/curl/tests/data/test145 | 51 + deps/curl/tests/data/test1450 | 34 + deps/curl/tests/data/test1451 | 43 + deps/curl/tests/data/test1452 | 43 + deps/curl/tests/data/test1453 | 38 + deps/curl/tests/data/test1454 | 38 + deps/curl/tests/data/test1455 | 63 + deps/curl/tests/data/test1456 | 67 + deps/curl/tests/data/test1457 | 60 + deps/curl/tests/data/test1458 | 54 + deps/curl/tests/data/test1459 | 48 + deps/curl/tests/data/test146 | 55 + deps/curl/tests/data/test1460 | 59 + deps/curl/tests/data/test1461 | 53 + deps/curl/tests/data/test1462 | 61 + deps/curl/tests/data/test1463 | 45 + deps/curl/tests/data/test1464 | 45 + deps/curl/tests/data/test1465 | 118 + deps/curl/tests/data/test1466 | 45 + deps/curl/tests/data/test1467 | 60 + deps/curl/tests/data/test1468 | 64 + deps/curl/tests/data/test1469 | 30 + deps/curl/tests/data/test147 | 55 + deps/curl/tests/data/test1470 | 65 + deps/curl/tests/data/test1471 | 42 + deps/curl/tests/data/test1472 | 42 + deps/curl/tests/data/test1473 | 56 + deps/curl/tests/data/test1474 | 121 + deps/curl/tests/data/test1475 | 83 + deps/curl/tests/data/test1476 | 59 + deps/curl/tests/data/test1477 | 30 + deps/curl/tests/data/test148 | 49 + deps/curl/tests/data/test149 | 53 + deps/curl/tests/data/test15 | 55 + deps/curl/tests/data/test150 | 92 + deps/curl/tests/data/test1500 | 44 + deps/curl/tests/data/test1501 | 57 + deps/curl/tests/data/test1502 | 55 + deps/curl/tests/data/test1503 | 55 + deps/curl/tests/data/test1504 | 55 + deps/curl/tests/data/test1505 | 55 + deps/curl/tests/data/test1506 | 95 + deps/curl/tests/data/test1507 | 51 + deps/curl/tests/data/test1508 | 31 + deps/curl/tests/data/test1509 | 91 + deps/curl/tests/data/test151 | 45 + deps/curl/tests/data/test1510 | 96 + deps/curl/tests/data/test1511 | 71 + deps/curl/tests/data/test1512 | 80 + deps/curl/tests/data/test1513 | 50 + deps/curl/tests/data/test1514 | 64 + deps/curl/tests/data/test1515 | 62 + deps/curl/tests/data/test1516 | 58 + deps/curl/tests/data/test1517 | 78 + deps/curl/tests/data/test1518 | 62 + deps/curl/tests/data/test1519 | 62 + deps/curl/tests/data/test152 | 49 + deps/curl/tests/data/test1520 | 63 + deps/curl/tests/data/test1521 | 30 + deps/curl/tests/data/test1522 | 53 + deps/curl/tests/data/test1523 | 50 + deps/curl/tests/data/test1524 | 74 + deps/curl/tests/data/test1525 | 78 + deps/curl/tests/data/test1526 | 80 + deps/curl/tests/data/test1527 | 81 + deps/curl/tests/data/test1528 | 63 + deps/curl/tests/data/test1529 | 46 + deps/curl/tests/data/test153 | 156 + deps/curl/tests/data/test1530 | 30 + deps/curl/tests/data/test1531 | Bin 0 -> 571 bytes deps/curl/tests/data/test1532 | 49 + deps/curl/tests/data/test1533 | 74 + deps/curl/tests/data/test1534 | 51 + deps/curl/tests/data/test1535 | 50 + deps/curl/tests/data/test1536 | 50 + deps/curl/tests/data/test1537 | 45 + deps/curl/tests/data/test1538 | 193 + deps/curl/tests/data/test1539 | 43 + deps/curl/tests/data/test154 | 106 + deps/curl/tests/data/test1540 | 67 + deps/curl/tests/data/test1542 | 68 + deps/curl/tests/data/test1543 | 76 + deps/curl/tests/data/test1544 | 24 + deps/curl/tests/data/test1545 | 38 + deps/curl/tests/data/test155 | 130 + deps/curl/tests/data/test1550 | 29 + deps/curl/tests/data/test1551 | 69 + deps/curl/tests/data/test1552 | 52 + deps/curl/tests/data/test1553 | 57 + deps/curl/tests/data/test1554 | 105 + deps/curl/tests/data/test1555 | 51 + deps/curl/tests/data/test1556 | 60 + deps/curl/tests/data/test1557 | 36 + deps/curl/tests/data/test1558 | 46 + deps/curl/tests/data/test1559 | 45 + deps/curl/tests/data/test156 | 56 + deps/curl/tests/data/test1560 | 42 + deps/curl/tests/data/test1561 | 107 + deps/curl/tests/data/test1562 | 72 + deps/curl/tests/data/test1563 | 49 + deps/curl/tests/data/test1564 | 34 + deps/curl/tests/data/test1565 | 44 + deps/curl/tests/data/test1566 | 63 + deps/curl/tests/data/test1567 | 70 + deps/curl/tests/data/test1568 | 87 + deps/curl/tests/data/test1569 | 73 + deps/curl/tests/data/test157 | 45 + deps/curl/tests/data/test1570 | 73 + deps/curl/tests/data/test158 | 58 + deps/curl/tests/data/test159 | 81 + deps/curl/tests/data/test1590 | 57 + deps/curl/tests/data/test1591 | 64 + deps/curl/tests/data/test1592 | 39 + deps/curl/tests/data/test1593 | 46 + deps/curl/tests/data/test1594 | 49 + deps/curl/tests/data/test1595 | 48 + deps/curl/tests/data/test1596 | 49 + deps/curl/tests/data/test1597 | 32 + deps/curl/tests/data/test16 | 53 + deps/curl/tests/data/test160 | 73 + deps/curl/tests/data/test1600 | 23 + deps/curl/tests/data/test1601 | 22 + deps/curl/tests/data/test1602 | 22 + deps/curl/tests/data/test1603 | 22 + deps/curl/tests/data/test1604 | 21 + deps/curl/tests/data/test1605 | 21 + deps/curl/tests/data/test1606 | 22 + deps/curl/tests/data/test1607 | 22 + deps/curl/tests/data/test1608 | 23 + deps/curl/tests/data/test1609 | 22 + deps/curl/tests/data/test161 | 51 + deps/curl/tests/data/test1610 | 22 + deps/curl/tests/data/test1611 | 22 + deps/curl/tests/data/test1612 | 22 + deps/curl/tests/data/test1613 | 53 + deps/curl/tests/data/test1614 | 25 + deps/curl/tests/data/test162 | 60 + deps/curl/tests/data/test1620 | 22 + deps/curl/tests/data/test1621 | 23 + deps/curl/tests/data/test163 | 82 + deps/curl/tests/data/test1630 | 54 + deps/curl/tests/data/test1631 | 86 + deps/curl/tests/data/test1632 | 104 + deps/curl/tests/data/test1633 | 99 + deps/curl/tests/data/test1634 | 71 + deps/curl/tests/data/test1635 | 64 + deps/curl/tests/data/test164 | 66 + deps/curl/tests/data/test165 | 67 + deps/curl/tests/data/test1650 | 23 + deps/curl/tests/data/test1651 | 22 + deps/curl/tests/data/test1652 | 20 + deps/curl/tests/data/test1653 | 20 + deps/curl/tests/data/test1654 | 56 + deps/curl/tests/data/test1655 | 23 + deps/curl/tests/data/test166 | 63 + deps/curl/tests/data/test1660 | 83 + deps/curl/tests/data/test1661 | 22 + deps/curl/tests/data/test1662 | 67 + deps/curl/tests/data/test167 | 78 + deps/curl/tests/data/test1670 | 61 + deps/curl/tests/data/test1671 | 74 + deps/curl/tests/data/test168 | 98 + deps/curl/tests/data/test1680 | 55 + deps/curl/tests/data/test1681 | 61 + deps/curl/tests/data/test1682 | 58 + deps/curl/tests/data/test1683 | 59 + deps/curl/tests/data/test169 | 119 + deps/curl/tests/data/test17 | 54 + deps/curl/tests/data/test170 | 52 + deps/curl/tests/data/test1700 | 103 + deps/curl/tests/data/test1701 | 85 + deps/curl/tests/data/test1702 | 80 + deps/curl/tests/data/test1703 | 45 + deps/curl/tests/data/test171 | 60 + deps/curl/tests/data/test172 | 57 + deps/curl/tests/data/test173 | 82 + deps/curl/tests/data/test174 | 49 + deps/curl/tests/data/test175 | 83 + deps/curl/tests/data/test176 | 86 + deps/curl/tests/data/test177 | 51 + deps/curl/tests/data/test178 | 65 + deps/curl/tests/data/test179 | 59 + deps/curl/tests/data/test18 | 85 + deps/curl/tests/data/test180 | 65 + deps/curl/tests/data/test1800 | 56 + deps/curl/tests/data/test1801 | 67 + deps/curl/tests/data/test181 | 66 + deps/curl/tests/data/test182 | 43 + deps/curl/tests/data/test183 | 56 + deps/curl/tests/data/test184 | 76 + deps/curl/tests/data/test185 | 76 + deps/curl/tests/data/test186 | 65 + deps/curl/tests/data/test187 | 76 + deps/curl/tests/data/test188 | 75 + deps/curl/tests/data/test189 | 73 + deps/curl/tests/data/test19 | 37 + deps/curl/tests/data/test190 | 47 + deps/curl/tests/data/test1900 | 38 + deps/curl/tests/data/test1903 | 62 + deps/curl/tests/data/test1904 | 79 + deps/curl/tests/data/test1905 | 60 + deps/curl/tests/data/test1906 | 49 + deps/curl/tests/data/test1907 | 50 + deps/curl/tests/data/test1908 | 81 + deps/curl/tests/data/test1909 | 64 + deps/curl/tests/data/test191 | 41 + deps/curl/tests/data/test1910 | 65 + deps/curl/tests/data/test1911 | 29 + deps/curl/tests/data/test1912 | 30 + deps/curl/tests/data/test1913 | 41 + deps/curl/tests/data/test1914 | 42 + deps/curl/tests/data/test1915 | 59 + deps/curl/tests/data/test1916 | 57 + deps/curl/tests/data/test1917 | 61 + deps/curl/tests/data/test1918 | 33 + deps/curl/tests/data/test1919 | 51 + deps/curl/tests/data/test192 | 57 + deps/curl/tests/data/test193 | 81 + deps/curl/tests/data/test1933 | 69 + deps/curl/tests/data/test1934 | 69 + deps/curl/tests/data/test1935 | 69 + deps/curl/tests/data/test1936 | 69 + deps/curl/tests/data/test1937 | 72 + deps/curl/tests/data/test1938 | Bin 0 -> 1308 bytes deps/curl/tests/data/test1939 | 55 + deps/curl/tests/data/test194 | 71 + deps/curl/tests/data/test1940 | 62 + deps/curl/tests/data/test1941 | 76 + deps/curl/tests/data/test1942 | 66 + deps/curl/tests/data/test1943 | 62 + deps/curl/tests/data/test1944 | 66 + deps/curl/tests/data/test1945 | 76 + deps/curl/tests/data/test1946 | 68 + deps/curl/tests/data/test1947 | 71 + deps/curl/tests/data/test1948 | 72 + deps/curl/tests/data/test195 | 38 + deps/curl/tests/data/test1955 | 76 + deps/curl/tests/data/test1956 | 73 + deps/curl/tests/data/test1957 | 73 + deps/curl/tests/data/test1958 | 73 + deps/curl/tests/data/test1959 | 73 + deps/curl/tests/data/test196 | 42 + deps/curl/tests/data/test1960 | 52 + deps/curl/tests/data/test1964 | 68 + deps/curl/tests/data/test197 | 75 + deps/curl/tests/data/test1970 | 74 + deps/curl/tests/data/test1971 | 70 + deps/curl/tests/data/test1972 | 79 + deps/curl/tests/data/test1973 | 75 + deps/curl/tests/data/test1974 | 73 + deps/curl/tests/data/test1975 | 70 + deps/curl/tests/data/test198 | 70 + deps/curl/tests/data/test199 | 58 + deps/curl/tests/data/test2 | 48 + deps/curl/tests/data/test20 | 38 + deps/curl/tests/data/test200 | 41 + deps/curl/tests/data/test2000 | 73 + deps/curl/tests/data/test2001 | 96 + deps/curl/tests/data/test2002 | 117 + deps/curl/tests/data/test2003 | 146 + deps/curl/tests/data/test2004 | 79 + deps/curl/tests/data/test201 | 34 + deps/curl/tests/data/test202 | 37 + deps/curl/tests/data/test2023 | 159 + deps/curl/tests/data/test2024 | 173 + deps/curl/tests/data/test2025 | 262 + deps/curl/tests/data/test2026 | 217 + deps/curl/tests/data/test2027 | 245 + deps/curl/tests/data/test2028 | 306 + deps/curl/tests/data/test2029 | 230 + deps/curl/tests/data/test203 | 46 + deps/curl/tests/data/test2030 | 287 + deps/curl/tests/data/test2031 | 311 + deps/curl/tests/data/test2032 | 114 + deps/curl/tests/data/test2033 | 61 + deps/curl/tests/data/test2034 | 57 + deps/curl/tests/data/test2035 | 44 + deps/curl/tests/data/test2036 | 36 + deps/curl/tests/data/test2037 | 57 + deps/curl/tests/data/test2038 | 44 + deps/curl/tests/data/test2039 | 63 + deps/curl/tests/data/test204 | 40 + deps/curl/tests/data/test2040 | 68 + deps/curl/tests/data/test2041 | 57 + deps/curl/tests/data/test2042 | 44 + deps/curl/tests/data/test2043 | 33 + deps/curl/tests/data/test2044 | 33 + deps/curl/tests/data/test2045 | 54 + deps/curl/tests/data/test2046 | 98 + deps/curl/tests/data/test2047 | 101 + deps/curl/tests/data/test2048 | 40 + deps/curl/tests/data/test2049 | 65 + deps/curl/tests/data/test205 | 38 + deps/curl/tests/data/test2050 | 80 + deps/curl/tests/data/test2051 | 74 + deps/curl/tests/data/test2052 | 68 + deps/curl/tests/data/test2053 | 55 + deps/curl/tests/data/test2054 | 65 + deps/curl/tests/data/test2055 | 81 + deps/curl/tests/data/test2056 | 65 + deps/curl/tests/data/test2057 | 87 + deps/curl/tests/data/test2058 | 105 + deps/curl/tests/data/test2059 | 105 + deps/curl/tests/data/test206 | 108 + deps/curl/tests/data/test2060 | 105 + deps/curl/tests/data/test2061 | 82 + deps/curl/tests/data/test2062 | 82 + deps/curl/tests/data/test2063 | 82 + deps/curl/tests/data/test2064 | 82 + deps/curl/tests/data/test2065 | 82 + deps/curl/tests/data/test2066 | 82 + deps/curl/tests/data/test2067 | 88 + deps/curl/tests/data/test2068 | 88 + deps/curl/tests/data/test2069 | 88 + deps/curl/tests/data/test207 | 70 + deps/curl/tests/data/test2070 | 60 + deps/curl/tests/data/test2071 | 41 + deps/curl/tests/data/test2072 | 44 + deps/curl/tests/data/test2073 | 73 + deps/curl/tests/data/test2074 | 55 + deps/curl/tests/data/test2075 | 34 + deps/curl/tests/data/test2076 | 74 + deps/curl/tests/data/test2077 | 42 + deps/curl/tests/data/test2078 | 52 + deps/curl/tests/data/test2079 | 61 + deps/curl/tests/data/test208 | 73 + deps/curl/tests/data/test2080 | Bin 0 -> 20680 bytes deps/curl/tests/data/test2081 | 73 + deps/curl/tests/data/test2082 | 51 + deps/curl/tests/data/test2083 | 45 + deps/curl/tests/data/test2084 | 54 + deps/curl/tests/data/test2085 | 64 + deps/curl/tests/data/test2086 | 52 + deps/curl/tests/data/test2087 | 61 + deps/curl/tests/data/test209 | 115 + deps/curl/tests/data/test21 | 36 + deps/curl/tests/data/test210 | 52 + deps/curl/tests/data/test2100 | 92 + deps/curl/tests/data/test211 | 54 + deps/curl/tests/data/test212 | 64 + deps/curl/tests/data/test213 | 118 + deps/curl/tests/data/test214 | 52 + deps/curl/tests/data/test215 | 58 + deps/curl/tests/data/test216 | 45 + deps/curl/tests/data/test217 | 61 + deps/curl/tests/data/test218 | 60 + deps/curl/tests/data/test219 | 38 + deps/curl/tests/data/test22 | 42 + deps/curl/tests/data/test220 | 69 + deps/curl/tests/data/test2200 | 62 + deps/curl/tests/data/test2201 | 50 + deps/curl/tests/data/test2202 | 59 + deps/curl/tests/data/test2203 | 62 + deps/curl/tests/data/test2204 | 56 + deps/curl/tests/data/test2205 | 51 + deps/curl/tests/data/test221 | 72 + deps/curl/tests/data/test222 | 200 + deps/curl/tests/data/test223 | 93 + deps/curl/tests/data/test224 | 105 + deps/curl/tests/data/test225 | 28 + deps/curl/tests/data/test226 | 29 + deps/curl/tests/data/test227 | 57 + deps/curl/tests/data/test228 | 52 + deps/curl/tests/data/test229 | 41 + deps/curl/tests/data/test23 | 33 + deps/curl/tests/data/test230 | 201 + deps/curl/tests/data/test2300 | 62 + deps/curl/tests/data/test2301 | 65 + deps/curl/tests/data/test2302 | 70 + deps/curl/tests/data/test2303 | 59 + deps/curl/tests/data/test2304 | 69 + deps/curl/tests/data/test2305 | 59 + deps/curl/tests/data/test2306 | 76 + deps/curl/tests/data/test231 | 38 + deps/curl/tests/data/test232 | 200 + deps/curl/tests/data/test233 | 96 + deps/curl/tests/data/test234 | 99 + deps/curl/tests/data/test235 | 51 + deps/curl/tests/data/test236 | 53 + deps/curl/tests/data/test237 | 44 + deps/curl/tests/data/test238 | 42 + deps/curl/tests/data/test239 | 92 + deps/curl/tests/data/test24 | 48 + deps/curl/tests/data/test240 | 56 + deps/curl/tests/data/test2400 | 64 + deps/curl/tests/data/test2401 | 72 + deps/curl/tests/data/test2402 | 109 + deps/curl/tests/data/test2403 | 73 + deps/curl/tests/data/test2404 | 109 + deps/curl/tests/data/test241 | 54 + deps/curl/tests/data/test242 | 52 + deps/curl/tests/data/test243 | 121 + deps/curl/tests/data/test244 | 54 + deps/curl/tests/data/test245 | 85 + deps/curl/tests/data/test246 | 95 + deps/curl/tests/data/test247 | 47 + deps/curl/tests/data/test248 | 56 + deps/curl/tests/data/test249 | 52 + deps/curl/tests/data/test25 | 113 + deps/curl/tests/data/test250 | 59 + deps/curl/tests/data/test2500 | 78 + deps/curl/tests/data/test2501 | 70 + deps/curl/tests/data/test2502 | 104 + deps/curl/tests/data/test2503 | 70 + deps/curl/tests/data/test251 | 61 + deps/curl/tests/data/test252 | 60 + deps/curl/tests/data/test253 | 63 + deps/curl/tests/data/test254 | 61 + deps/curl/tests/data/test255 | 64 + deps/curl/tests/data/test256 | 65 + deps/curl/tests/data/test257 | 111 + deps/curl/tests/data/test258 | 137 + deps/curl/tests/data/test259 | 135 + deps/curl/tests/data/test26 | 42 + deps/curl/tests/data/test260 | 53 + deps/curl/tests/data/test2600 | 25 + deps/curl/tests/data/test2601 | 22 + deps/curl/tests/data/test2602 | 22 + deps/curl/tests/data/test2603 | 22 + deps/curl/tests/data/test261 | 48 + deps/curl/tests/data/test262 | Bin 0 -> 1225 bytes deps/curl/tests/data/test263 | 53 + deps/curl/tests/data/test264 | 50 + deps/curl/tests/data/test265 | 121 + deps/curl/tests/data/test266 | 81 + deps/curl/tests/data/test267 | 100 + deps/curl/tests/data/test268 | 59 + deps/curl/tests/data/test269 | 54 + deps/curl/tests/data/test27 | 59 + deps/curl/tests/data/test270 | 50 + deps/curl/tests/data/test271 | 48 + deps/curl/tests/data/test272 | 40 + deps/curl/tests/data/test273 | 82 + deps/curl/tests/data/test274 | 49 + deps/curl/tests/data/test275 | 90 + deps/curl/tests/data/test276 | 75 + deps/curl/tests/data/test277 | 58 + deps/curl/tests/data/test278 | 50 + deps/curl/tests/data/test279 | 51 + deps/curl/tests/data/test28 | 78 + deps/curl/tests/data/test280 | 63 + deps/curl/tests/data/test281 | 59 + deps/curl/tests/data/test282 | 43 + deps/curl/tests/data/test283 | 41 + deps/curl/tests/data/test284 | 72 + deps/curl/tests/data/test285 | 47 + deps/curl/tests/data/test286 | 97 + deps/curl/tests/data/test287 | 56 + deps/curl/tests/data/test288 | 48 + deps/curl/tests/data/test289 | 30 + deps/curl/tests/data/test29 | 50 + deps/curl/tests/data/test290 | 43 + deps/curl/tests/data/test291 | 47 + deps/curl/tests/data/test292 | 54 + deps/curl/tests/data/test293 | 58 + deps/curl/tests/data/test294 | 64 + deps/curl/tests/data/test295 | 45 + deps/curl/tests/data/test296 | 48 + deps/curl/tests/data/test297 | 46 + deps/curl/tests/data/test298 | 45 + deps/curl/tests/data/test299 | 52 + deps/curl/tests/data/test3 | 58 + deps/curl/tests/data/test30 | 41 + deps/curl/tests/data/test300 | 50 + deps/curl/tests/data/test3000 | 56 + deps/curl/tests/data/test3001 | 56 + deps/curl/tests/data/test3002 | 55 + deps/curl/tests/data/test3003 | 55 + deps/curl/tests/data/test3004 | 55 + deps/curl/tests/data/test3005 | 55 + deps/curl/tests/data/test3006 | 51 + deps/curl/tests/data/test3007 | 47 + deps/curl/tests/data/test3008 | 57 + deps/curl/tests/data/test3009 | 57 + deps/curl/tests/data/test301 | 55 + deps/curl/tests/data/test3010 | 57 + deps/curl/tests/data/test3011 | 57 + deps/curl/tests/data/test3012 | 60 + deps/curl/tests/data/test3013 | 68 + deps/curl/tests/data/test3014 | 56 + deps/curl/tests/data/test3015 | 78 + deps/curl/tests/data/test3016 | 35 + deps/curl/tests/data/test3017 | 67 + deps/curl/tests/data/test3018 | 65 + deps/curl/tests/data/test3019 | 36 + deps/curl/tests/data/test302 | 49 + deps/curl/tests/data/test3020 | 36 + deps/curl/tests/data/test3021 | 53 + deps/curl/tests/data/test3022 | 53 + deps/curl/tests/data/test3023 | 60 + deps/curl/tests/data/test3024 | 60 + deps/curl/tests/data/test3025 | 47 + deps/curl/tests/data/test3026 | 45 + deps/curl/tests/data/test3027 | 55 + deps/curl/tests/data/test3028 | 73 + deps/curl/tests/data/test3029 | 39 + deps/curl/tests/data/test303 | 57 + deps/curl/tests/data/test3030 | 43 + deps/curl/tests/data/test304 | 72 + deps/curl/tests/data/test305 | 32 + deps/curl/tests/data/test306 | 64 + deps/curl/tests/data/test307 | 54 + deps/curl/tests/data/test308 | 35 + deps/curl/tests/data/test309 | 81 + deps/curl/tests/data/test31 | 190 + deps/curl/tests/data/test310 | 56 + deps/curl/tests/data/test3100 | 85 + deps/curl/tests/data/test3101 | 88 + deps/curl/tests/data/test3102 | 51 + deps/curl/tests/data/test3103 | 60 + deps/curl/tests/data/test311 | 43 + deps/curl/tests/data/test312 | 43 + deps/curl/tests/data/test313 | 39 + deps/curl/tests/data/test314 | 196 + deps/curl/tests/data/test315 | 89 + deps/curl/tests/data/test316 | 196 + deps/curl/tests/data/test317 | 96 + deps/curl/tests/data/test318 | 97 + deps/curl/tests/data/test319 | 56 + deps/curl/tests/data/test32 | 53 + deps/curl/tests/data/test320 | 80 + deps/curl/tests/data/test3200 | 25 + deps/curl/tests/data/test3201 | 63 + deps/curl/tests/data/test3202 | 67 + deps/curl/tests/data/test321 | 33 + deps/curl/tests/data/test322 | 33 + deps/curl/tests/data/test323 | 33 + deps/curl/tests/data/test324 | 33 + deps/curl/tests/data/test325 | 64 + deps/curl/tests/data/test326 | 67 + deps/curl/tests/data/test327 | 75 + deps/curl/tests/data/test328 | 55 + deps/curl/tests/data/test329 | 77 + deps/curl/tests/data/test33 | 60 + deps/curl/tests/data/test330 | 93 + deps/curl/tests/data/test331 | 69 + deps/curl/tests/data/test332 | 47 + deps/curl/tests/data/test333 | 35 + deps/curl/tests/data/test334 | 42 + deps/curl/tests/data/test335 | 100 + deps/curl/tests/data/test336 | 58 + deps/curl/tests/data/test337 | 58 + deps/curl/tests/data/test338 | 62 + deps/curl/tests/data/test339 | 61 + deps/curl/tests/data/test34 | 64 + deps/curl/tests/data/test340 | 40 + deps/curl/tests/data/test341 | 54 + deps/curl/tests/data/test342 | 56 + deps/curl/tests/data/test343 | 59 + deps/curl/tests/data/test344 | 56 + deps/curl/tests/data/test345 | 59 + deps/curl/tests/data/test346 | 58 + deps/curl/tests/data/test347 | 60 + deps/curl/tests/data/test348 | 61 + deps/curl/tests/data/test349 | 45 + deps/curl/tests/data/test35 | Bin 0 -> 846 bytes deps/curl/tests/data/test350 | 57 + deps/curl/tests/data/test351 | 56 + deps/curl/tests/data/test352 | 57 + deps/curl/tests/data/test353 | 56 + deps/curl/tests/data/test354 | 50 + deps/curl/tests/data/test355 | 55 + deps/curl/tests/data/test356 | 71 + deps/curl/tests/data/test357 | 81 + deps/curl/tests/data/test358 | 94 + deps/curl/tests/data/test359 | 94 + deps/curl/tests/data/test36 | 64 + deps/curl/tests/data/test360 | 28 + deps/curl/tests/data/test361 | 50 + deps/curl/tests/data/test362 | 51 + deps/curl/tests/data/test363 | 88 + deps/curl/tests/data/test364 | 50 + deps/curl/tests/data/test365 | 65 + deps/curl/tests/data/test366 | 49 + deps/curl/tests/data/test367 | 48 + deps/curl/tests/data/test368 | 49 + deps/curl/tests/data/test369 | 47 + deps/curl/tests/data/test37 | 45 + deps/curl/tests/data/test370 | 36 + deps/curl/tests/data/test371 | 56 + deps/curl/tests/data/test372 | 49 + deps/curl/tests/data/test373 | 78 + deps/curl/tests/data/test374 | 49 + deps/curl/tests/data/test375 | 33 + deps/curl/tests/data/test376 | 64 + deps/curl/tests/data/test378 | 39 + deps/curl/tests/data/test379 | 71 + deps/curl/tests/data/test38 | 59 + deps/curl/tests/data/test380 | 63 + deps/curl/tests/data/test381 | 67 + deps/curl/tests/data/test383 | 56 + deps/curl/tests/data/test384 | 59 + deps/curl/tests/data/test385 | 56 + deps/curl/tests/data/test386 | 74 + deps/curl/tests/data/test387 | 59 + deps/curl/tests/data/test388 | 156 + deps/curl/tests/data/test389 | 57 + deps/curl/tests/data/test39 | 111 + deps/curl/tests/data/test390 | 48 + deps/curl/tests/data/test391 | 72 + deps/curl/tests/data/test392 | 64 + deps/curl/tests/data/test393 | 62 + deps/curl/tests/data/test394 | 61 + deps/curl/tests/data/test395 | 60 + deps/curl/tests/data/test396 | 200 + deps/curl/tests/data/test397 | 196 + deps/curl/tests/data/test398 | 64 + deps/curl/tests/data/test399 | 32 + deps/curl/tests/data/test4 | 61 + deps/curl/tests/data/test40 | 76 + deps/curl/tests/data/test400 | 62 + deps/curl/tests/data/test401 | 57 + deps/curl/tests/data/test402 | 36 + deps/curl/tests/data/test403 | 65 + deps/curl/tests/data/test404 | 32 + deps/curl/tests/data/test405 | 35 + deps/curl/tests/data/test406 | 67 + deps/curl/tests/data/test407 | 60 + deps/curl/tests/data/test408 | 62 + deps/curl/tests/data/test409 | 57 + deps/curl/tests/data/test41 | 35 + deps/curl/tests/data/test410 | 55 + deps/curl/tests/data/test411 | 43 + deps/curl/tests/data/test412 | 64 + deps/curl/tests/data/test413 | 64 + deps/curl/tests/data/test414 | 84 + deps/curl/tests/data/test415 | 65 + deps/curl/tests/data/test416 | 51 + deps/curl/tests/data/test417 | 83 + deps/curl/tests/data/test418 | 67 + deps/curl/tests/data/test419 | 35 + deps/curl/tests/data/test42 | 76 + deps/curl/tests/data/test420 | 75 + deps/curl/tests/data/test421 | 85 + deps/curl/tests/data/test422 | 44 + deps/curl/tests/data/test423 | 51 + deps/curl/tests/data/test424 | 68 + deps/curl/tests/data/test425 | 53 + deps/curl/tests/data/test426 | 34 + deps/curl/tests/data/test427 | 76 + deps/curl/tests/data/test428 | 68 + deps/curl/tests/data/test429 | 63 + deps/curl/tests/data/test43 | 81 + deps/curl/tests/data/test430 | 101 + deps/curl/tests/data/test431 | 95 + deps/curl/tests/data/test432 | 100 + deps/curl/tests/data/test433 | 59 + deps/curl/tests/data/test434 | 46 + deps/curl/tests/data/test435 | 71 + deps/curl/tests/data/test436 | 58 + deps/curl/tests/data/test437 | 68 + deps/curl/tests/data/test438 | 90 + deps/curl/tests/data/test439 | 58 + deps/curl/tests/data/test44 | 75 + deps/curl/tests/data/test440 | 73 + deps/curl/tests/data/test441 | 73 + deps/curl/tests/data/test442 | 213 + deps/curl/tests/data/test443 | 82 + deps/curl/tests/data/test444 | 193 + deps/curl/tests/data/test445 | 61 + deps/curl/tests/data/test446 | 84 + deps/curl/tests/data/test447 | 65 + deps/curl/tests/data/test448 | 67 + deps/curl/tests/data/test449 | 65 + deps/curl/tests/data/test45 | 75 + deps/curl/tests/data/test450 | 60 + deps/curl/tests/data/test451 | 59 + deps/curl/tests/data/test452 | 34 + deps/curl/tests/data/test453 | 33 + deps/curl/tests/data/test454 | 34 + deps/curl/tests/data/test455 | 52 + deps/curl/tests/data/test456 | 33 + deps/curl/tests/data/test457 | 69 + deps/curl/tests/data/test458 | 76 + deps/curl/tests/data/test459 | 63 + deps/curl/tests/data/test46 | 111 + deps/curl/tests/data/test47 | 47 + deps/curl/tests/data/test48 | 53 + deps/curl/tests/data/test49 | 72 + deps/curl/tests/data/test490 | 65 + deps/curl/tests/data/test491 | 61 + deps/curl/tests/data/test492 | 86 + deps/curl/tests/data/test493 | 72 + deps/curl/tests/data/test494 | 60 + deps/curl/tests/data/test495 | 56 + deps/curl/tests/data/test496 | 36 + deps/curl/tests/data/test497 | 62 + deps/curl/tests/data/test498 | 56 + deps/curl/tests/data/test5 | 51 + deps/curl/tests/data/test50 | 72 + deps/curl/tests/data/test500 | 58 + deps/curl/tests/data/test501 | 40 + deps/curl/tests/data/test502 | 47 + deps/curl/tests/data/test503 | 90 + deps/curl/tests/data/test504 | 46 + deps/curl/tests/data/test505 | 66 + deps/curl/tests/data/test506 | 251 + deps/curl/tests/data/test507 | 37 + deps/curl/tests/data/test508 | 58 + deps/curl/tests/data/test509 | 41 + deps/curl/tests/data/test51 | 72 + deps/curl/tests/data/test510 | 69 + deps/curl/tests/data/test511 | 52 + deps/curl/tests/data/test512 | 50 + deps/curl/tests/data/test513 | 51 + deps/curl/tests/data/test514 | 54 + deps/curl/tests/data/test515 | 51 + deps/curl/tests/data/test516 | 55 + deps/curl/tests/data/test517 | 45 + deps/curl/tests/data/test518 | 67 + deps/curl/tests/data/test519 | 78 + deps/curl/tests/data/test52 | 72 + deps/curl/tests/data/test520 | 53 + deps/curl/tests/data/test521 | 60 + deps/curl/tests/data/test522 | 57 + deps/curl/tests/data/test523 | 64 + deps/curl/tests/data/test524 | 46 + deps/curl/tests/data/test525 | 59 + deps/curl/tests/data/test526 | 63 + deps/curl/tests/data/test527 | 63 + deps/curl/tests/data/test528 | 65 + deps/curl/tests/data/test529 | 59 + deps/curl/tests/data/test53 | 55 + deps/curl/tests/data/test530 | 49 + deps/curl/tests/data/test531 | 59 + deps/curl/tests/data/test532 | 63 + deps/curl/tests/data/test533 | 55 + deps/curl/tests/data/test534 | 53 + deps/curl/tests/data/test535 | 69 + deps/curl/tests/data/test537 | 64 + deps/curl/tests/data/test538 | 45 + deps/curl/tests/data/test539 | 71 + deps/curl/tests/data/test54 | 43 + deps/curl/tests/data/test540 | 108 + deps/curl/tests/data/test541 | 57 + deps/curl/tests/data/test542 | 57 + deps/curl/tests/data/test543 | 37 + deps/curl/tests/data/test544 | 53 + deps/curl/tests/data/test545 | Bin 0 -> 819 bytes deps/curl/tests/data/test546 | 70 + deps/curl/tests/data/test547 | 122 + deps/curl/tests/data/test548 | 122 + deps/curl/tests/data/test549 | 63 + deps/curl/tests/data/test55 | 64 + deps/curl/tests/data/test550 | 63 + deps/curl/tests/data/test551 | 98 + deps/curl/tests/data/test552 | 90 + deps/curl/tests/data/test553 | 62 + deps/curl/tests/data/test554 | 136 + deps/curl/tests/data/test555 | 127 + deps/curl/tests/data/test556 | 47 + deps/curl/tests/data/test557 | 47 + deps/curl/tests/data/test558 | 59 + deps/curl/tests/data/test559 | 51 + deps/curl/tests/data/test56 | 65 + deps/curl/tests/data/test560 | 53 + deps/curl/tests/data/test561 | 64 + deps/curl/tests/data/test562 | 52 + deps/curl/tests/data/test563 | 59 + deps/curl/tests/data/test564 | 68 + deps/curl/tests/data/test565 | 113 + deps/curl/tests/data/test566 | 57 + deps/curl/tests/data/test567 | 49 + deps/curl/tests/data/test568 | 116 + deps/curl/tests/data/test569 | 110 + deps/curl/tests/data/test57 | 46 + deps/curl/tests/data/test570 | 76 + deps/curl/tests/data/test571 | 122 + deps/curl/tests/data/test572 | 121 + deps/curl/tests/data/test573 | 55 + deps/curl/tests/data/test574 | 98 + deps/curl/tests/data/test575 | 121 + deps/curl/tests/data/test576 | 192 + deps/curl/tests/data/test577 | 55 + deps/curl/tests/data/test578 | 52 + deps/curl/tests/data/test579 | 87 + deps/curl/tests/data/test58 | 48 + deps/curl/tests/data/test580 | 55 + deps/curl/tests/data/test581 | 55 + deps/curl/tests/data/test582 | 49 + deps/curl/tests/data/test583 | 45 + deps/curl/tests/data/test584 | 84 + deps/curl/tests/data/test585 | 66 + deps/curl/tests/data/test586 | 59 + deps/curl/tests/data/test587 | 64 + deps/curl/tests/data/test588 | 69 + deps/curl/tests/data/test589 | 55 + deps/curl/tests/data/test59 | 45 + deps/curl/tests/data/test590 | 113 + deps/curl/tests/data/test591 | 73 + deps/curl/tests/data/test592 | 74 + deps/curl/tests/data/test593 | 72 + deps/curl/tests/data/test594 | 74 + deps/curl/tests/data/test595 | 57 + deps/curl/tests/data/test596 | 60 + deps/curl/tests/data/test597 | 36 + deps/curl/tests/data/test598 | 83 + deps/curl/tests/data/test599 | 86 + deps/curl/tests/data/test6 | 50 + deps/curl/tests/data/test60 | 58 + deps/curl/tests/data/test600 | 42 + deps/curl/tests/data/test601 | 42 + deps/curl/tests/data/test602 | 43 + deps/curl/tests/data/test603 | 43 + deps/curl/tests/data/test604 | 33 + deps/curl/tests/data/test605 | 33 + deps/curl/tests/data/test606 | 33 + deps/curl/tests/data/test607 | 33 + deps/curl/tests/data/test608 | 49 + deps/curl/tests/data/test609 | 45 + deps/curl/tests/data/test61 | 83 + deps/curl/tests/data/test610 | 47 + deps/curl/tests/data/test611 | 47 + deps/curl/tests/data/test612 | 47 + deps/curl/tests/data/test613 | 46 + deps/curl/tests/data/test614 | 47 + deps/curl/tests/data/test615 | 44 + deps/curl/tests/data/test616 | 39 + deps/curl/tests/data/test617 | 39 + deps/curl/tests/data/test618 | 39 + deps/curl/tests/data/test619 | 39 + deps/curl/tests/data/test62 | 67 + deps/curl/tests/data/test620 | 38 + deps/curl/tests/data/test621 | 38 + deps/curl/tests/data/test622 | 43 + deps/curl/tests/data/test623 | 44 + deps/curl/tests/data/test624 | 47 + deps/curl/tests/data/test625 | 47 + deps/curl/tests/data/test626 | 42 + deps/curl/tests/data/test627 | 46 + deps/curl/tests/data/test628 | 33 + deps/curl/tests/data/test629 | 33 + deps/curl/tests/data/test63 | 53 + deps/curl/tests/data/test630 | 34 + deps/curl/tests/data/test631 | 34 + deps/curl/tests/data/test632 | 34 + deps/curl/tests/data/test633 | 42 + deps/curl/tests/data/test634 | 43 + deps/curl/tests/data/test635 | 42 + deps/curl/tests/data/test636 | 43 + deps/curl/tests/data/test637 | 44 + deps/curl/tests/data/test638 | 49 + deps/curl/tests/data/test639 | 49 + deps/curl/tests/data/test64 | 82 + deps/curl/tests/data/test640 | 41 + deps/curl/tests/data/test641 | 41 + deps/curl/tests/data/test642 | 42 + deps/curl/tests/data/test643 | 134 + deps/curl/tests/data/test644 | 85 + deps/curl/tests/data/test645 | 220 + deps/curl/tests/data/test646 | 101 + deps/curl/tests/data/test647 | 82 + deps/curl/tests/data/test648 | 78 + deps/curl/tests/data/test649 | 75 + deps/curl/tests/data/test65 | 82 + deps/curl/tests/data/test650 | 243 + deps/curl/tests/data/test651 | 75 + deps/curl/tests/data/test652 | 361 + deps/curl/tests/data/test653 | 96 + deps/curl/tests/data/test654 | 130 + deps/curl/tests/data/test655 | 50 + deps/curl/tests/data/test656 | 33 + deps/curl/tests/data/test658 | 49 + deps/curl/tests/data/test659 | 54 + deps/curl/tests/data/test66 | 43 + deps/curl/tests/data/test660 | 34 + deps/curl/tests/data/test661 | 73 + deps/curl/tests/data/test662 | 78 + deps/curl/tests/data/test663 | 82 + deps/curl/tests/data/test664 | 44 + deps/curl/tests/data/test665 | 44 + deps/curl/tests/data/test666 | 296 + deps/curl/tests/data/test667 | 92 + deps/curl/tests/data/test668 | 110 + deps/curl/tests/data/test669 | 63 + deps/curl/tests/data/test67 | 91 + deps/curl/tests/data/test670 | 75 + deps/curl/tests/data/test671 | 75 + deps/curl/tests/data/test672 | 75 + deps/curl/tests/data/test673 | 75 + deps/curl/tests/data/test674 | 54 + deps/curl/tests/data/test675 | 55 + deps/curl/tests/data/test676 | 86 + deps/curl/tests/data/test677 | 43 + deps/curl/tests/data/test678 | 59 + deps/curl/tests/data/test679 | 56 + deps/curl/tests/data/test68 | 90 + deps/curl/tests/data/test680 | 40 + deps/curl/tests/data/test681 | 51 + deps/curl/tests/data/test682 | 53 + deps/curl/tests/data/test683 | 53 + deps/curl/tests/data/test684 | 52 + deps/curl/tests/data/test685 | 52 + deps/curl/tests/data/test686 | 34 + deps/curl/tests/data/test687 | 62 + deps/curl/tests/data/test688 | 62 + deps/curl/tests/data/test69 | 112 + deps/curl/tests/data/test7 | 60 + deps/curl/tests/data/test70 | 85 + deps/curl/tests/data/test700 | 58 + deps/curl/tests/data/test701 | 58 + deps/curl/tests/data/test702 | 47 + deps/curl/tests/data/test703 | 44 + deps/curl/tests/data/test704 | 39 + deps/curl/tests/data/test705 | 39 + deps/curl/tests/data/test706 | 62 + deps/curl/tests/data/test707 | 62 + deps/curl/tests/data/test708 | 61 + deps/curl/tests/data/test709 | 61 + deps/curl/tests/data/test71 | 81 + deps/curl/tests/data/test710 | 58 + deps/curl/tests/data/test711 | 57 + deps/curl/tests/data/test712 | 51 + deps/curl/tests/data/test713 | 52 + deps/curl/tests/data/test714 | 71 + deps/curl/tests/data/test715 | 73 + deps/curl/tests/data/test716 | 45 + deps/curl/tests/data/test717 | 66 + deps/curl/tests/data/test718 | 61 + deps/curl/tests/data/test719 | 63 + deps/curl/tests/data/test72 | 84 + deps/curl/tests/data/test720 | 62 + deps/curl/tests/data/test721 | 62 + deps/curl/tests/data/test722 | 52 + deps/curl/tests/data/test723 | 35 + deps/curl/tests/data/test724 | 58 + deps/curl/tests/data/test725 | 40 + deps/curl/tests/data/test726 | 40 + deps/curl/tests/data/test727 | 52 + deps/curl/tests/data/test728 | 64 + deps/curl/tests/data/test729 | 41 + deps/curl/tests/data/test73 | 56 + deps/curl/tests/data/test730 | 52 + deps/curl/tests/data/test731 | 58 + deps/curl/tests/data/test732 | 52 + deps/curl/tests/data/test733 | 52 + deps/curl/tests/data/test734 | 52 + deps/curl/tests/data/test735 | 52 + deps/curl/tests/data/test736 | 58 + deps/curl/tests/data/test737 | 58 + deps/curl/tests/data/test738 | 37 + deps/curl/tests/data/test739 | 34 + deps/curl/tests/data/test74 | 74 + deps/curl/tests/data/test740 | 60 + deps/curl/tests/data/test741 | 42 + deps/curl/tests/data/test75 | 44 + deps/curl/tests/data/test76 | 36 + deps/curl/tests/data/test77 | 54 + deps/curl/tests/data/test78 | 66 + deps/curl/tests/data/test79 | 54 + deps/curl/tests/data/test799 | 53 + deps/curl/tests/data/test8 | 100 + deps/curl/tests/data/test80 | 83 + deps/curl/tests/data/test800 | 49 + deps/curl/tests/data/test801 | 46 + deps/curl/tests/data/test802 | 47 + deps/curl/tests/data/test803 | 45 + deps/curl/tests/data/test804 | 47 + deps/curl/tests/data/test805 | 62 + deps/curl/tests/data/test806 | 44 + deps/curl/tests/data/test807 | 45 + deps/curl/tests/data/test808 | 49 + deps/curl/tests/data/test809 | 43 + deps/curl/tests/data/test81 | 93 + deps/curl/tests/data/test810 | 43 + deps/curl/tests/data/test811 | 40 + deps/curl/tests/data/test812 | 40 + deps/curl/tests/data/test813 | 40 + deps/curl/tests/data/test814 | 41 + deps/curl/tests/data/test815 | 46 + deps/curl/tests/data/test816 | 49 + deps/curl/tests/data/test817 | 40 + deps/curl/tests/data/test818 | 46 + deps/curl/tests/data/test819 | 56 + deps/curl/tests/data/test82 | 54 + deps/curl/tests/data/test820 | 57 + deps/curl/tests/data/test821 | 59 + deps/curl/tests/data/test822 | 63 + deps/curl/tests/data/test823 | 63 + deps/curl/tests/data/test824 | 56 + deps/curl/tests/data/test825 | 56 + deps/curl/tests/data/test826 | 57 + deps/curl/tests/data/test827 | 63 + deps/curl/tests/data/test828 | 56 + deps/curl/tests/data/test829 | 29 + deps/curl/tests/data/test83 | 79 + deps/curl/tests/data/test830 | 56 + deps/curl/tests/data/test831 | 68 + deps/curl/tests/data/test832 | 58 + deps/curl/tests/data/test833 | 65 + deps/curl/tests/data/test834 | 77 + deps/curl/tests/data/test835 | 67 + deps/curl/tests/data/test836 | 59 + deps/curl/tests/data/test837 | 56 + deps/curl/tests/data/test838 | 56 + deps/curl/tests/data/test839 | 56 + deps/curl/tests/data/test84 | 54 + deps/curl/tests/data/test840 | 56 + deps/curl/tests/data/test841 | 51 + deps/curl/tests/data/test842 | 59 + deps/curl/tests/data/test843 | 57 + deps/curl/tests/data/test844 | 52 + deps/curl/tests/data/test845 | 54 + deps/curl/tests/data/test846 | 50 + deps/curl/tests/data/test847 | 49 + deps/curl/tests/data/test848 | 56 + deps/curl/tests/data/test849 | 51 + deps/curl/tests/data/test85 | 58 + deps/curl/tests/data/test850 | 49 + deps/curl/tests/data/test851 | 44 + deps/curl/tests/data/test852 | 47 + deps/curl/tests/data/test853 | 53 + deps/curl/tests/data/test854 | 45 + deps/curl/tests/data/test855 | 47 + deps/curl/tests/data/test856 | 48 + deps/curl/tests/data/test857 | 60 + deps/curl/tests/data/test858 | 41 + deps/curl/tests/data/test859 | 41 + deps/curl/tests/data/test86 | 94 + deps/curl/tests/data/test860 | 41 + deps/curl/tests/data/test861 | 52 + deps/curl/tests/data/test862 | 50 + deps/curl/tests/data/test863 | 41 + deps/curl/tests/data/test864 | 54 + deps/curl/tests/data/test865 | 57 + deps/curl/tests/data/test866 | 58 + deps/curl/tests/data/test867 | 60 + deps/curl/tests/data/test868 | 64 + deps/curl/tests/data/test869 | 64 + deps/curl/tests/data/test87 | 61 + deps/curl/tests/data/test870 | 57 + deps/curl/tests/data/test871 | 56 + deps/curl/tests/data/test872 | 57 + deps/curl/tests/data/test873 | 63 + deps/curl/tests/data/test874 | 56 + deps/curl/tests/data/test875 | 29 + deps/curl/tests/data/test876 | 57 + deps/curl/tests/data/test877 | 69 + deps/curl/tests/data/test878 | 59 + deps/curl/tests/data/test879 | 66 + deps/curl/tests/data/test88 | 98 + deps/curl/tests/data/test880 | 78 + deps/curl/tests/data/test881 | 68 + deps/curl/tests/data/test882 | 58 + deps/curl/tests/data/test883 | 57 + deps/curl/tests/data/test884 | 57 + deps/curl/tests/data/test885 | 56 + deps/curl/tests/data/test886 | 56 + deps/curl/tests/data/test887 | 58 + deps/curl/tests/data/test888 | 57 + deps/curl/tests/data/test889 | 56 + deps/curl/tests/data/test89 | 136 + deps/curl/tests/data/test890 | 55 + deps/curl/tests/data/test891 | 47 + deps/curl/tests/data/test892 | 57 + deps/curl/tests/data/test893 | 53 + deps/curl/tests/data/test894 | 37 + deps/curl/tests/data/test895 | 50 + deps/curl/tests/data/test896 | 38 + deps/curl/tests/data/test897 | 70 + deps/curl/tests/data/test898 | 94 + deps/curl/tests/data/test899 | 64 + deps/curl/tests/data/test9 | 75 + deps/curl/tests/data/test90 | 184 + deps/curl/tests/data/test900 | 51 + deps/curl/tests/data/test901 | 63 + deps/curl/tests/data/test902 | 57 + deps/curl/tests/data/test903 | 56 + deps/curl/tests/data/test904 | 57 + deps/curl/tests/data/test905 | 59 + deps/curl/tests/data/test906 | 63 + deps/curl/tests/data/test907 | 63 + deps/curl/tests/data/test908 | 56 + deps/curl/tests/data/test909 | 51 + deps/curl/tests/data/test91 | 113 + deps/curl/tests/data/test910 | 51 + deps/curl/tests/data/test911 | 46 + deps/curl/tests/data/test912 | 55 + deps/curl/tests/data/test913 | 50 + deps/curl/tests/data/test914 | 49 + deps/curl/tests/data/test915 | 51 + deps/curl/tests/data/test916 | 47 + deps/curl/tests/data/test917 | 55 + deps/curl/tests/data/test918 | 48 + deps/curl/tests/data/test919 | 55 + deps/curl/tests/data/test92 | 67 + deps/curl/tests/data/test920 | 56 + deps/curl/tests/data/test921 | 62 + deps/curl/tests/data/test922 | 55 + deps/curl/tests/data/test923 | 37 + deps/curl/tests/data/test924 | 43 + deps/curl/tests/data/test925 | 40 + deps/curl/tests/data/test926 | 44 + deps/curl/tests/data/test927 | 43 + deps/curl/tests/data/test928 | 41 + deps/curl/tests/data/test929 | 38 + deps/curl/tests/data/test93 | 51 + deps/curl/tests/data/test930 | 38 + deps/curl/tests/data/test931 | 29 + deps/curl/tests/data/test932 | 56 + deps/curl/tests/data/test933 | 68 + deps/curl/tests/data/test934 | 58 + deps/curl/tests/data/test935 | 65 + deps/curl/tests/data/test936 | 77 + deps/curl/tests/data/test937 | 67 + deps/curl/tests/data/test938 | 65 + deps/curl/tests/data/test939 | 50 + deps/curl/tests/data/test94 | 56 + deps/curl/tests/data/test940 | 45 + deps/curl/tests/data/test941 | 66 + deps/curl/tests/data/test942 | 56 + deps/curl/tests/data/test943 | 56 + deps/curl/tests/data/test944 | 55 + deps/curl/tests/data/test945 | 55 + deps/curl/tests/data/test946 | 57 + deps/curl/tests/data/test947 | 56 + deps/curl/tests/data/test948 | 58 + deps/curl/tests/data/test949 | 57 + deps/curl/tests/data/test95 | 81 + deps/curl/tests/data/test950 | 43 + deps/curl/tests/data/test951 | 45 + deps/curl/tests/data/test952 | 45 + deps/curl/tests/data/test953 | 56 + deps/curl/tests/data/test954 | 55 + deps/curl/tests/data/test955 | 59 + deps/curl/tests/data/test956 | 57 + deps/curl/tests/data/test957 | 51 + deps/curl/tests/data/test958 | 51 + deps/curl/tests/data/test959 | 60 + deps/curl/tests/data/test96 | 46 + deps/curl/tests/data/test960 | 58 + deps/curl/tests/data/test961 | 52 + deps/curl/tests/data/test962 | 63 + deps/curl/tests/data/test963 | 63 + deps/curl/tests/data/test964 | 49 + deps/curl/tests/data/test965 | 66 + deps/curl/tests/data/test966 | 66 + deps/curl/tests/data/test967 | 55 + deps/curl/tests/data/test968 | 52 + deps/curl/tests/data/test969 | 51 + deps/curl/tests/data/test97 | 50 + deps/curl/tests/data/test970 | 65 + deps/curl/tests/data/test971 | 30 + deps/curl/tests/data/test972 | 66 + deps/curl/tests/data/test973 | 88 + deps/curl/tests/data/test974 | 91 + deps/curl/tests/data/test975 | 88 + deps/curl/tests/data/test976 | 92 + deps/curl/tests/data/test977 | 62 + deps/curl/tests/data/test978 | 56 + deps/curl/tests/data/test979 | 64 + deps/curl/tests/data/test98 | 53 + deps/curl/tests/data/test980 | 52 + deps/curl/tests/data/test981 | 59 + deps/curl/tests/data/test982 | 57 + deps/curl/tests/data/test983 | 52 + deps/curl/tests/data/test984 | 56 + deps/curl/tests/data/test985 | 54 + deps/curl/tests/data/test986 | 53 + deps/curl/tests/data/test987 | 51 + deps/curl/tests/data/test988 | 48 + deps/curl/tests/data/test989 | 48 + deps/curl/tests/data/test99 | 67 + deps/curl/tests/data/test990 | 57 + deps/curl/tests/data/test991 | 60 + deps/curl/tests/devtest.pl | 202 + deps/curl/tests/dictserver.py | 197 + deps/curl/tests/directories.pm | 307 + deps/curl/tests/disable-scan.pl | 189 + deps/curl/tests/error-codes.pl | 82 + deps/curl/tests/errorcodes.pl | 99 + deps/curl/tests/extern-scan.pl | 114 + deps/curl/tests/ftpserver.pl | 3391 ++++++ deps/curl/tests/getpart.pm | 359 + deps/curl/tests/globalconfig.pm | 117 + deps/curl/tests/http-server.pl | 194 + deps/curl/tests/http/.gitignore | 6 + deps/curl/tests/http/Makefile.am | 37 + deps/curl/tests/http/README.md | 128 + deps/curl/tests/http/clients/.gitignore | 11 + deps/curl/tests/http/clients/Makefile.am | 73 + deps/curl/tests/http/clients/Makefile.inc | 33 + deps/curl/tests/http/clients/h2-download.c | 351 + deps/curl/tests/http/clients/h2-pausing.c | 339 + deps/curl/tests/http/clients/h2-serverpush.c | 272 + .../tests/http/clients/h2-upgrade-extreme.c | 249 + .../tests/http/clients/tls-session-reuse.c | 306 + deps/curl/tests/http/clients/ws-data.c | 263 + deps/curl/tests/http/clients/ws-pingpong.c | 158 + deps/curl/tests/http/config.ini.in | 37 + deps/curl/tests/http/conftest.py | 86 + deps/curl/tests/http/requirements.txt | 29 + deps/curl/tests/http/scorecard.py | 570 + deps/curl/tests/http/test_01_basic.py | 86 + deps/curl/tests/http/test_02_download.py | 411 + deps/curl/tests/http/test_03_goaway.py | 143 + deps/curl/tests/http/test_04_stuttered.py | 145 + deps/curl/tests/http/test_05_errors.py | 110 + deps/curl/tests/http/test_06_eyeballs.py | 114 + deps/curl/tests/http/test_07_upload.py | 446 + deps/curl/tests/http/test_08_caddy.py | 165 + deps/curl/tests/http/test_09_push.py | 84 + deps/curl/tests/http/test_10_proxy.py | 351 + deps/curl/tests/http/test_11_unix.py | 127 + deps/curl/tests/http/test_12_reuse.py | 78 + deps/curl/tests/http/test_13_proxy_auth.py | 157 + deps/curl/tests/http/test_14_auth.py | 137 + deps/curl/tests/http/test_15_tracing.py | 112 + deps/curl/tests/http/test_20_websockets.py | 131 + deps/curl/tests/http/testenv/__init__.py | 38 + deps/curl/tests/http/testenv/caddy.py | 167 + deps/curl/tests/http/testenv/certs.py | 528 + deps/curl/tests/http/testenv/client.py | 118 + deps/curl/tests/http/testenv/curl.py | 598 + deps/curl/tests/http/testenv/env.py | 480 + deps/curl/tests/http/testenv/httpd.py | 419 + .../http/testenv/mod_curltest/.gitignore | 5 + .../http/testenv/mod_curltest/mod_curltest.c | 583 + deps/curl/tests/http/testenv/nghttpx.py | 258 + deps/curl/tests/http/testenv/ports.py | 47 + .../curl/tests/http/testenv/ws_echo_server.py | 66 + deps/curl/tests/http2-server.pl | 119 + deps/curl/tests/http3-server.pl | 119 + deps/curl/tests/libtest/.checksrc | 2 + deps/curl/tests/libtest/.gitignore | 11 + deps/curl/tests/libtest/CMakeLists.txt | 88 + deps/curl/tests/libtest/Makefile.am | 140 + deps/curl/tests/libtest/Makefile.inc | 700 ++ deps/curl/tests/libtest/chkhostname.c | 49 + deps/curl/tests/libtest/first.c | 185 + deps/curl/tests/libtest/lib1156.c | 173 + deps/curl/tests/libtest/lib1301.c | 62 + deps/curl/tests/libtest/lib1500.c | 92 + deps/curl/tests/libtest/lib1501.c | 113 + deps/curl/tests/libtest/lib1502.c | 159 + deps/curl/tests/libtest/lib1506.c | 139 + deps/curl/tests/libtest/lib1507.c | 152 + deps/curl/tests/libtest/lib1508.c | 51 + deps/curl/tests/libtest/lib1509.c | 99 + deps/curl/tests/libtest/lib1510.c | 103 + deps/curl/tests/libtest/lib1511.c | 77 + deps/curl/tests/libtest/lib1512.c | 97 + deps/curl/tests/libtest/lib1513.c | 78 + deps/curl/tests/libtest/lib1514.c | 86 + deps/curl/tests/libtest/lib1515.c | 152 + deps/curl/tests/libtest/lib1517.c | 123 + deps/curl/tests/libtest/lib1518.c | 106 + deps/curl/tests/libtest/lib1520.c | 115 + deps/curl/tests/libtest/lib1522.c | 101 + deps/curl/tests/libtest/lib1523.c | 85 + deps/curl/tests/libtest/lib1525.c | 100 + deps/curl/tests/libtest/lib1526.c | 105 + deps/curl/tests/libtest/lib1527.c | 102 + deps/curl/tests/libtest/lib1528.c | 75 + deps/curl/tests/libtest/lib1529.c | 63 + deps/curl/tests/libtest/lib1530.c | 70 + deps/curl/tests/libtest/lib1531.c | 160 + deps/curl/tests/libtest/lib1532.c | 82 + deps/curl/tests/libtest/lib1533.c | 201 + deps/curl/tests/libtest/lib1534.c | 131 + deps/curl/tests/libtest/lib1535.c | 138 + deps/curl/tests/libtest/lib1536.c | 131 + deps/curl/tests/libtest/lib1537.c | 91 + deps/curl/tests/libtest/lib1538.c | 60 + deps/curl/tests/libtest/lib1540.c | 118 + deps/curl/tests/libtest/lib1541.c | 160 + deps/curl/tests/libtest/lib1542.c | 84 + deps/curl/tests/libtest/lib1545.c | 56 + deps/curl/tests/libtest/lib1550.c | 48 + deps/curl/tests/libtest/lib1551.c | 53 + deps/curl/tests/libtest/lib1552.c | 95 + deps/curl/tests/libtest/lib1553.c | 111 + deps/curl/tests/libtest/lib1554.c | 95 + deps/curl/tests/libtest/lib1555.c | 83 + deps/curl/tests/libtest/lib1556.c | 80 + deps/curl/tests/libtest/lib1557.c | 64 + deps/curl/tests/libtest/lib1558.c | 69 + deps/curl/tests/libtest/lib1559.c | 76 + deps/curl/tests/libtest/lib1560.c | 1798 +++ deps/curl/tests/libtest/lib1564.c | 135 + deps/curl/tests/libtest/lib1565.c | 209 + deps/curl/tests/libtest/lib1567.c | 59 + deps/curl/tests/libtest/lib1568.c | 52 + deps/curl/tests/libtest/lib1569.c | 51 + deps/curl/tests/libtest/lib1591.c | 120 + deps/curl/tests/libtest/lib1592.c | 124 + deps/curl/tests/libtest/lib1593.c | 81 + deps/curl/tests/libtest/lib1594.c | 68 + deps/curl/tests/libtest/lib1597.c | 115 + deps/curl/tests/libtest/lib1662.c | 90 + deps/curl/tests/libtest/lib1900.c | 55 + deps/curl/tests/libtest/lib1903.c | 57 + deps/curl/tests/libtest/lib1905.c | 100 + deps/curl/tests/libtest/lib1906.c | 85 + deps/curl/tests/libtest/lib1907.c | 56 + deps/curl/tests/libtest/lib1908.c | 64 + deps/curl/tests/libtest/lib1910.c | 49 + deps/curl/tests/libtest/lib1911.c | 98 + deps/curl/tests/libtest/lib1912.c | 84 + deps/curl/tests/libtest/lib1913.c | 50 + deps/curl/tests/libtest/lib1915.c | 136 + deps/curl/tests/libtest/lib1916.c | 56 + deps/curl/tests/libtest/lib1918.c | 57 + deps/curl/tests/libtest/lib1919.c | 56 + deps/curl/tests/libtest/lib1933.c | 68 + deps/curl/tests/libtest/lib1934.c | 69 + deps/curl/tests/libtest/lib1935.c | 69 + deps/curl/tests/libtest/lib1936.c | 69 + deps/curl/tests/libtest/lib1937.c | 72 + deps/curl/tests/libtest/lib1938.c | 74 + deps/curl/tests/libtest/lib1939.c | 72 + deps/curl/tests/libtest/lib1940.c | 118 + deps/curl/tests/libtest/lib1945.c | 81 + deps/curl/tests/libtest/lib1947.c | 92 + deps/curl/tests/libtest/lib1948.c | 78 + deps/curl/tests/libtest/lib1955.c | 90 + deps/curl/tests/libtest/lib1956.c | 73 + deps/curl/tests/libtest/lib1957.c | 72 + deps/curl/tests/libtest/lib1958.c | 72 + deps/curl/tests/libtest/lib1959.c | 74 + deps/curl/tests/libtest/lib1960.c | 155 + deps/curl/tests/libtest/lib1964.c | 68 + deps/curl/tests/libtest/lib1970.c | 73 + deps/curl/tests/libtest/lib1971.c | 83 + deps/curl/tests/libtest/lib1972.c | 84 + deps/curl/tests/libtest/lib1973.c | 72 + deps/curl/tests/libtest/lib1974.c | 65 + deps/curl/tests/libtest/lib1975.c | 85 + deps/curl/tests/libtest/lib2301.c | 154 + deps/curl/tests/libtest/lib2302.c | 126 + deps/curl/tests/libtest/lib2304.c | 142 + deps/curl/tests/libtest/lib2305.c | 107 + deps/curl/tests/libtest/lib2306.c | 55 + deps/curl/tests/libtest/lib2402.c | 142 + deps/curl/tests/libtest/lib2404.c | 144 + deps/curl/tests/libtest/lib2502.c | 141 + deps/curl/tests/libtest/lib3010.c | 67 + deps/curl/tests/libtest/lib3025.c | 61 + deps/curl/tests/libtest/lib3026.c | 185 + deps/curl/tests/libtest/lib3027.c | 56 + deps/curl/tests/libtest/lib3100.c | 68 + deps/curl/tests/libtest/lib3101.c | 64 + deps/curl/tests/libtest/lib3102.c | 141 + deps/curl/tests/libtest/lib3103.c | 66 + deps/curl/tests/libtest/lib500.c | 158 + deps/curl/tests/libtest/lib501.c | 60 + deps/curl/tests/libtest/lib502.c | 93 + deps/curl/tests/libtest/lib503.c | 103 + deps/curl/tests/libtest/lib504.c | 115 + deps/curl/tests/libtest/lib505.c | 152 + deps/curl/tests/libtest/lib506.c | 382 + deps/curl/tests/libtest/lib507.c | 102 + deps/curl/tests/libtest/lib508.c | 105 + deps/curl/tests/libtest/lib509.c | 117 + deps/curl/tests/libtest/lib510.c | 132 + deps/curl/tests/libtest/lib511.c | 58 + deps/curl/tests/libtest/lib512.c | 76 + deps/curl/tests/libtest/lib513.c | 85 + deps/curl/tests/libtest/lib514.c | 81 + deps/curl/tests/libtest/lib515.c | 62 + deps/curl/tests/libtest/lib516.c | 63 + deps/curl/tests/libtest/lib517.c | 173 + deps/curl/tests/libtest/lib518.c | 521 + deps/curl/tests/libtest/lib519.c | 66 + deps/curl/tests/libtest/lib520.c | 57 + deps/curl/tests/libtest/lib521.c | 58 + deps/curl/tests/libtest/lib523.c | 59 + deps/curl/tests/libtest/lib524.c | 57 + deps/curl/tests/libtest/lib525.c | 164 + deps/curl/tests/libtest/lib526.c | 186 + deps/curl/tests/libtest/lib530.c | 391 + deps/curl/tests/libtest/lib533.c | 114 + deps/curl/tests/libtest/lib537.c | 522 + deps/curl/tests/libtest/lib539.c | 93 + deps/curl/tests/libtest/lib540.c | 256 + deps/curl/tests/libtest/lib541.c | 119 + deps/curl/tests/libtest/lib542.c | 75 + deps/curl/tests/libtest/lib543.c | 72 + deps/curl/tests/libtest/lib544.c | 84 + deps/curl/tests/libtest/lib547.c | 127 + deps/curl/tests/libtest/lib549.c | 67 + deps/curl/tests/libtest/lib552.c | 222 + deps/curl/tests/libtest/lib553.c | 113 + deps/curl/tests/libtest/lib554.c | 208 + deps/curl/tests/libtest/lib555.c | 156 + deps/curl/tests/libtest/lib556.c | 99 + deps/curl/tests/libtest/lib557.c | 1480 +++ deps/curl/tests/libtest/lib558.c | 54 + deps/curl/tests/libtest/lib559.c | 57 + deps/curl/tests/libtest/lib560.c | 115 + deps/curl/tests/libtest/lib562.c | 76 + deps/curl/tests/libtest/lib564.c | 95 + deps/curl/tests/libtest/lib566.c | 71 + deps/curl/tests/libtest/lib567.c | 71 + deps/curl/tests/libtest/lib568.c | 179 + deps/curl/tests/libtest/lib569.c | 128 + deps/curl/tests/libtest/lib570.c | 121 + deps/curl/tests/libtest/lib571.c | 215 + deps/curl/tests/libtest/lib572.c | 185 + deps/curl/tests/libtest/lib573.c | 115 + deps/curl/tests/libtest/lib574.c | 76 + deps/curl/tests/libtest/lib575.c | 116 + deps/curl/tests/libtest/lib576.c | 122 + deps/curl/tests/libtest/lib578.c | 102 + deps/curl/tests/libtest/lib579.c | 160 + deps/curl/tests/libtest/lib582.c | 363 + deps/curl/tests/libtest/lib583.c | 91 + deps/curl/tests/libtest/lib586.c | 246 + deps/curl/tests/libtest/lib589.c | 76 + deps/curl/tests/libtest/lib590.c | 73 + deps/curl/tests/libtest/lib591.c | 152 + deps/curl/tests/libtest/lib597.c | 133 + deps/curl/tests/libtest/lib598.c | 74 + deps/curl/tests/libtest/lib599.c | 103 + deps/curl/tests/libtest/lib643.c | 269 + deps/curl/tests/libtest/lib650.c | 213 + deps/curl/tests/libtest/lib651.c | 97 + deps/curl/tests/libtest/lib652.c | 133 + deps/curl/tests/libtest/lib653.c | 65 + deps/curl/tests/libtest/lib654.c | 169 + deps/curl/tests/libtest/lib655.c | 114 + deps/curl/tests/libtest/lib658.c | 79 + deps/curl/tests/libtest/lib659.c | 77 + deps/curl/tests/libtest/lib661.c | 168 + deps/curl/tests/libtest/lib666.c | 122 + deps/curl/tests/libtest/lib667.c | 114 + deps/curl/tests/libtest/lib668.c | 118 + deps/curl/tests/libtest/lib670.c | 264 + deps/curl/tests/libtest/lib674.c | 84 + deps/curl/tests/libtest/lib676.c | 70 + deps/curl/tests/libtest/lib677.c | 130 + deps/curl/tests/libtest/lib678.c | 122 + deps/curl/tests/libtest/libauthretry.c | 149 + deps/curl/tests/libtest/libntlmconnect.c | 237 + deps/curl/tests/libtest/libprereq.c | 99 + deps/curl/tests/libtest/mk-lib1521.pl | 369 + deps/curl/tests/libtest/notexists.pl | 38 + deps/curl/tests/libtest/sethostname.c | 41 + deps/curl/tests/libtest/stub_gssapi.c | 462 + deps/curl/tests/libtest/stub_gssapi.h | 184 + deps/curl/tests/libtest/test.h | 500 + deps/curl/tests/libtest/test1013.pl | 74 + deps/curl/tests/libtest/test1022.pl | 77 + deps/curl/tests/libtest/test307.pl | 42 + deps/curl/tests/libtest/test610.pl | 56 + deps/curl/tests/libtest/test613.pl | 146 + deps/curl/tests/libtest/testtrace.c | 146 + deps/curl/tests/libtest/testtrace.h | 38 + deps/curl/tests/libtest/testutil.c | 162 + deps/curl/tests/libtest/testutil.h | 49 + deps/curl/tests/manpage-scan.pl | 305 + deps/curl/tests/manpage-syntax.pl | 379 + deps/curl/tests/markdown-uppercase.pl | 100 + deps/curl/tests/mem-include-scan.pl | 98 + deps/curl/tests/memanalyze.pl | 434 + deps/curl/tests/negtelnetserver.py | 381 + deps/curl/tests/nghttpx.conf | 26 + deps/curl/tests/nroff-scan.pl | 112 + deps/curl/tests/option-check.pl | 66 + deps/curl/tests/options-scan.pl | 125 + deps/curl/tests/pathhelp.pm | 795 ++ deps/curl/tests/processhelp.pm | 417 + deps/curl/tests/requirements.txt | 26 + deps/curl/tests/rtspserver.pl | 136 + deps/curl/tests/runner.pm | 1468 +++ deps/curl/tests/runtests.1 | 225 + deps/curl/tests/runtests.pl | 3040 ++++++ deps/curl/tests/secureserver.pl | 379 + deps/curl/tests/server/.gitignore | 14 + deps/curl/tests/server/CMakeLists.txt | 82 + deps/curl/tests/server/Makefile.am | 65 + deps/curl/tests/server/Makefile.inc | 117 + deps/curl/tests/server/base64.pl | 32 + deps/curl/tests/server/disabled.c | 117 + deps/curl/tests/server/fake_ntlm.c | 286 + deps/curl/tests/server/getpart.c | 523 + deps/curl/tests/server/getpart.h | 36 + deps/curl/tests/server/mqttd.c | 1098 ++ deps/curl/tests/server/resolve.c | 156 + deps/curl/tests/server/rtspd.c | 1411 +++ deps/curl/tests/server/server_setup.h | 31 + deps/curl/tests/server/server_sockaddr.h | 43 + deps/curl/tests/server/sockfilt.c | 1592 +++ deps/curl/tests/server/socksd.c | 1174 ++ deps/curl/tests/server/sws.c | 2459 +++++ deps/curl/tests/server/testpart.c | 51 + deps/curl/tests/server/tftp.h | 63 + deps/curl/tests/server/tftpd.c | 1378 +++ deps/curl/tests/server/util.c | 878 ++ deps/curl/tests/server/util.h | 98 + deps/curl/tests/serverhelp.pm | 280 + deps/curl/tests/servers.pm | 3010 +++++ deps/curl/tests/smbserver.py | 454 + deps/curl/tests/sshhelp.pm | 427 + deps/curl/tests/sshserver.pl | 1199 ++ deps/curl/tests/stunnel.pem | 165 + deps/curl/tests/symbol-scan.pl | 245 + deps/curl/tests/testcurl.1 | 126 + deps/curl/tests/testcurl.pl | 787 ++ deps/curl/tests/testutil.pm | 204 + deps/curl/tests/tftpserver.pl | 133 + deps/curl/tests/unit/.gitignore | 5 + deps/curl/tests/unit/CMakeLists.txt | 42 + deps/curl/tests/unit/Makefile.am | 69 + deps/curl/tests/unit/Makefile.inc | 132 + deps/curl/tests/unit/README.md | 73 + deps/curl/tests/unit/curlcheck.h | 111 + deps/curl/tests/unit/unit1300.c | 223 + deps/curl/tests/unit/unit1302.c | 191 + deps/curl/tests/unit/unit1303.c | 153 + deps/curl/tests/unit/unit1304.c | 198 + deps/curl/tests/unit/unit1305.c | 132 + deps/curl/tests/unit/unit1307.c | 321 + deps/curl/tests/unit/unit1308.c | 98 + deps/curl/tests/unit/unit1309.c | 144 + deps/curl/tests/unit/unit1323.c | 68 + deps/curl/tests/unit/unit1330.c | 43 + deps/curl/tests/unit/unit1394.c | 133 + deps/curl/tests/unit/unit1395.c | 107 + deps/curl/tests/unit/unit1396.c | 117 + deps/curl/tests/unit/unit1397.c | 124 + deps/curl/tests/unit/unit1398.c | 98 + deps/curl/tests/unit/unit1399.c | 119 + deps/curl/tests/unit/unit1600.c | 75 + deps/curl/tests/unit/unit1601.c | 60 + deps/curl/tests/unit/unit1602.c | 81 + deps/curl/tests/unit/unit1603.c | 153 + deps/curl/tests/unit/unit1604.c | 358 + deps/curl/tests/unit/unit1605.c | 59 + deps/curl/tests/unit/unit1606.c | 93 + deps/curl/tests/unit/unit1607.c | 235 + deps/curl/tests/unit/unit1608.c | 89 + deps/curl/tests/unit/unit1609.c | 220 + deps/curl/tests/unit/unit1610.c | 66 + deps/curl/tests/unit/unit1611.c | 60 + deps/curl/tests/unit/unit1612.c | 70 + deps/curl/tests/unit/unit1614.c | 164 + deps/curl/tests/unit/unit1620.c | 93 + deps/curl/tests/unit/unit1621.c | 81 + deps/curl/tests/unit/unit1650.c | 297 + deps/curl/tests/unit/unit1651.c | 392 + deps/curl/tests/unit/unit1652.c | 141 + deps/curl/tests/unit/unit1653.c | 232 + deps/curl/tests/unit/unit1654.c | 113 + deps/curl/tests/unit/unit1655.c | 190 + deps/curl/tests/unit/unit1660.c | 179 + deps/curl/tests/unit/unit1661.c | 115 + deps/curl/tests/unit/unit2600.c | 399 + deps/curl/tests/unit/unit2601.c | 246 + deps/curl/tests/unit/unit2602.c | 148 + deps/curl/tests/unit/unit2603.c | 190 + deps/curl/tests/unit/unit3200.c | 180 + deps/curl/tests/util.py | 92 + deps/curl/tests/valgrind.pm | 50 + deps/curl/tests/valgrind.supp | 151 + deps/curl/tests/version-scan.pl | 94 + deps/curl/winbuild/.gitignore | 6 + deps/curl/winbuild/Makefile.vc | 310 + deps/curl/winbuild/MakefileBuild.vc | 711 ++ deps/curl/winbuild/README.md | 199 + deps/curl/winbuild/gen_resp_file.bat | 34 + deps/curl/winbuild/makedebug.cmd | 36 + deps/libtomcrypt | 1 - deps/libtomcrypt/.ci/build.sh | 75 + deps/libtomcrypt/.ci/check_source.sh | 15 + deps/libtomcrypt/.ci/clang-tidy.sh | 51 + deps/libtomcrypt/.ci/coverage.sh | 51 + deps/libtomcrypt/.ci/coverage_more.sh | 28 + deps/libtomcrypt/.ci/meta_builds.sh | 108 + deps/libtomcrypt/.ci/printinfo.sh | 24 + deps/libtomcrypt/.ci/run.sh | 49 + deps/libtomcrypt/.ci/testbuild.sh | 26 + deps/libtomcrypt/.ci/valgrind.sh | 40 + deps/libtomcrypt/.clang-format | 42 + deps/libtomcrypt/.gitattributes | 7 + deps/libtomcrypt/.github/ISSUE_TEMPLATE.md | 30 + .../.github/PULL_REQUEST_TEMPLATE.md | 13 + deps/libtomcrypt/.github/workflows/main.yml | 96 + deps/libtomcrypt/.gitignore | 111 + deps/libtomcrypt/CMakeLists.txt | 373 + deps/libtomcrypt/LICENSE | 26 + deps/libtomcrypt/README.md | 200 + deps/libtomcrypt/appveyor.yml | 29 + deps/libtomcrypt/changes | 1648 +++ deps/libtomcrypt/coverity.sh | 44 + deps/libtomcrypt/demos/CMakeLists.txt | 70 + deps/libtomcrypt/demos/aesgcm.c | 150 + deps/libtomcrypt/demos/constants.c | 77 + deps/libtomcrypt/demos/demo_dynamic.py | 309 + deps/libtomcrypt/demos/gcm-file/gcm_file.c | 84 + .../demos/gcm-file/gcm_filehandle.c | 190 + deps/libtomcrypt/demos/hashsum.c | 290 + deps/libtomcrypt/demos/ltcrypt.c | 195 + deps/libtomcrypt/demos/openssl-enc.c | 358 + deps/libtomcrypt/demos/sizes.c | 71 + deps/libtomcrypt/demos/small.c | 12 + deps/libtomcrypt/demos/timing.c | 1396 +++ deps/libtomcrypt/demos/tv_gen.c | 818 ++ deps/libtomcrypt/doc/Doxyfile | 2429 +++++ deps/libtomcrypt/doc/crypt.tex | 9534 ++++++++++++++++ deps/libtomcrypt/doc/libtomsm.png | Bin 0 -> 17809 bytes deps/libtomcrypt/doc/makefile | 63 + deps/libtomcrypt/helper.pl | 412 + deps/libtomcrypt/hooks/pre-commit | 49 + deps/libtomcrypt/libtomcrypt.pc.in | 9 + deps/libtomcrypt/libtomcrypt_VS2008.sln | 26 + deps/libtomcrypt/libtomcrypt_VS2008.vcproj | 2906 +++++ deps/libtomcrypt/makefile | 147 + deps/libtomcrypt/makefile.mingw | 331 + deps/libtomcrypt/makefile.msvc | 316 + deps/libtomcrypt/makefile.shared | 110 + deps/libtomcrypt/makefile.unix | 344 + deps/libtomcrypt/makefile_include.mk | 544 + deps/libtomcrypt/notes/etc/NoekeonVects.java | 249 + deps/libtomcrypt/notes/etc/saferp_optimizer.c | 177 + deps/libtomcrypt/notes/etc/whirlgen.c | 95 + deps/libtomcrypt/notes/etc/whirltest.c | 19 + .../notes/rsa-testvectors/makefile | 11 + .../notes/rsa-testvectors/oaep-int.txt | 369 + .../notes/rsa-testvectors/oaep-vect.c | 1418 +++ .../notes/rsa-testvectors/oaep-vect.txt | 2212 ++++ .../rsa-testvectors/pkcs1v15crypt-vectors.c | 5463 ++++++++++ .../rsa-testvectors/pkcs1v15crypt-vectors.txt | 9709 +++++++++++++++++ .../rsa-testvectors/pkcs1v15sign-vectors.c | 4261 ++++++++ .../rsa-testvectors/pkcs1v15sign-vectors.txt | 9049 +++++++++++++++ .../notes/rsa-testvectors/pss-int.txt | 162 + .../notes/rsa-testvectors/pss-vect.c | 1418 +++ .../notes/rsa-testvectors/pss-vect.txt | 2581 +++++ .../notes/rsa-testvectors/readme.txt | 22 + deps/libtomcrypt/notes/rsa-testvectors/rt.py | 253 + deps/libtomcrypt/notes/tech0001.txt | 73 + deps/libtomcrypt/notes/tech0002.txt | 52 + deps/libtomcrypt/notes/tech0003.txt | 52 + deps/libtomcrypt/notes/tech0004.txt | 91 + deps/libtomcrypt/notes/tech0005.txt | 20 + deps/libtomcrypt/notes/tech0006.txt | 91 + deps/libtomcrypt/notes/tech0007.txt | 5 + deps/libtomcrypt/sources.cmake | 527 + deps/libtomcrypt/src/ciphers/aes/aes.c | 730 ++ deps/libtomcrypt/src/ciphers/aes/aes_desc.c | 244 + deps/libtomcrypt/src/ciphers/aes/aes_tab.c | 1022 ++ deps/libtomcrypt/src/ciphers/aes/aesni.c | 371 + deps/libtomcrypt/src/ciphers/anubis.c | 1550 +++ deps/libtomcrypt/src/ciphers/blowfish.c | 658 ++ deps/libtomcrypt/src/ciphers/camellia.c | 720 ++ deps/libtomcrypt/src/ciphers/cast5.c | 705 ++ deps/libtomcrypt/src/ciphers/des.c | 2093 ++++ deps/libtomcrypt/src/ciphers/idea.c | 250 + deps/libtomcrypt/src/ciphers/kasumi.c | 307 + deps/libtomcrypt/src/ciphers/khazad.c | 840 ++ deps/libtomcrypt/src/ciphers/kseed.c | 366 + deps/libtomcrypt/src/ciphers/multi2.c | 309 + deps/libtomcrypt/src/ciphers/noekeon.c | 317 + deps/libtomcrypt/src/ciphers/rc2.c | 408 + deps/libtomcrypt/src/ciphers/rc5.c | 323 + deps/libtomcrypt/src/ciphers/rc6.c | 324 + deps/libtomcrypt/src/ciphers/safer/safer.c | 484 + .../libtomcrypt/src/ciphers/safer/safer_tab.c | 54 + deps/libtomcrypt/src/ciphers/safer/saferp.c | 567 + deps/libtomcrypt/src/ciphers/serpent.c | 717 ++ deps/libtomcrypt/src/ciphers/skipjack.c | 334 + deps/libtomcrypt/src/ciphers/tea.c | 209 + .../libtomcrypt/src/ciphers/twofish/twofish.c | 706 ++ .../src/ciphers/twofish/twofish_tab.c | 486 + deps/libtomcrypt/src/ciphers/xtea.c | 251 + .../libtomcrypt/src/encauth/ccm/ccm_add_aad.c | 53 + .../src/encauth/ccm/ccm_add_nonce.c | 106 + deps/libtomcrypt/src/encauth/ccm/ccm_done.c | 55 + deps/libtomcrypt/src/encauth/ccm/ccm_init.c | 64 + deps/libtomcrypt/src/encauth/ccm/ccm_memory.c | 375 + .../libtomcrypt/src/encauth/ccm/ccm_process.c | 78 + deps/libtomcrypt/src/encauth/ccm/ccm_reset.c | 25 + deps/libtomcrypt/src/encauth/ccm/ccm_test.c | 274 + .../chachapoly/chacha20poly1305_add_aad.c | 28 + .../chachapoly/chacha20poly1305_decrypt.c | 38 + .../chachapoly/chacha20poly1305_done.c | 36 + .../chachapoly/chacha20poly1305_encrypt.c | 37 + .../chachapoly/chacha20poly1305_init.c | 20 + .../chachapoly/chacha20poly1305_memory.c | 72 + .../chachapoly/chacha20poly1305_setiv.c | 58 + .../chacha20poly1305_setiv_rfc7905.c | 30 + .../chachapoly/chacha20poly1305_test.c | 159 + .../src/encauth/eax/eax_addheader.c | 26 + .../libtomcrypt/src/encauth/eax/eax_decrypt.c | 38 + .../encauth/eax/eax_decrypt_verify_memory.c | 99 + deps/libtomcrypt/src/encauth/eax/eax_done.c | 82 + .../libtomcrypt/src/encauth/eax/eax_encrypt.c | 39 + .../eax/eax_encrypt_authenticate_memory.c | 70 + deps/libtomcrypt/src/encauth/eax/eax_init.c | 132 + deps/libtomcrypt/src/encauth/eax/eax_test.c | 249 + .../libtomcrypt/src/encauth/gcm/gcm_add_aad.c | 114 + deps/libtomcrypt/src/encauth/gcm/gcm_add_iv.c | 82 + deps/libtomcrypt/src/encauth/gcm/gcm_done.c | 80 + .../libtomcrypt/src/encauth/gcm/gcm_gf_mult.c | 209 + deps/libtomcrypt/src/encauth/gcm/gcm_init.c | 95 + deps/libtomcrypt/src/encauth/gcm/gcm_memory.c | 112 + deps/libtomcrypt/src/encauth/gcm/gcm_mult_h.c | 47 + .../libtomcrypt/src/encauth/gcm/gcm_process.c | 150 + deps/libtomcrypt/src/encauth/gcm/gcm_reset.c | 32 + deps/libtomcrypt/src/encauth/gcm/gcm_test.c | 407 + .../libtomcrypt/src/encauth/ocb/ocb_decrypt.c | 67 + .../encauth/ocb/ocb_decrypt_verify_memory.c | 74 + .../src/encauth/ocb/ocb_done_decrypt.c | 68 + .../src/encauth/ocb/ocb_done_encrypt.c | 34 + .../libtomcrypt/src/encauth/ocb/ocb_encrypt.c | 60 + .../ocb/ocb_encrypt_authenticate_memory.c | 72 + deps/libtomcrypt/src/encauth/ocb/ocb_init.c | 129 + deps/libtomcrypt/src/encauth/ocb/ocb_ntz.c | 30 + .../src/encauth/ocb/ocb_shift_xor.c | 27 + deps/libtomcrypt/src/encauth/ocb/ocb_test.c | 205 + deps/libtomcrypt/src/encauth/ocb/s_ocb_done.c | 136 + .../src/encauth/ocb3/ocb3_add_aad.c | 96 + .../src/encauth/ocb3/ocb3_decrypt.c | 76 + .../src/encauth/ocb3/ocb3_decrypt_last.c | 101 + .../encauth/ocb3/ocb3_decrypt_verify_memory.c | 100 + deps/libtomcrypt/src/encauth/ocb3/ocb3_done.c | 82 + .../src/encauth/ocb3/ocb3_encrypt.c | 76 + .../ocb3/ocb3_encrypt_authenticate_memory.c | 72 + .../src/encauth/ocb3/ocb3_encrypt_last.c | 102 + deps/libtomcrypt/src/encauth/ocb3/ocb3_init.c | 186 + .../src/encauth/ocb3/ocb3_int_ntz.c | 29 + .../src/encauth/ocb3/ocb3_int_xor_blocks.c | 30 + deps/libtomcrypt/src/encauth/ocb3/ocb3_test.c | 299 + deps/libtomcrypt/src/hashes/blake2b.c | 628 ++ deps/libtomcrypt/src/hashes/blake2s.c | 603 + deps/libtomcrypt/src/hashes/chc/chc.c | 302 + .../libtomcrypt/src/hashes/helper/hash_file.c | 43 + .../src/hashes/helper/hash_filehandle.c | 64 + .../src/hashes/helper/hash_memory.c | 59 + .../src/hashes/helper/hash_memory_multi.c | 78 + deps/libtomcrypt/src/hashes/md2.c | 240 + deps/libtomcrypt/src/hashes/md4.c | 296 + deps/libtomcrypt/src/hashes/md5.c | 356 + deps/libtomcrypt/src/hashes/rmd128.c | 396 + deps/libtomcrypt/src/hashes/rmd160.c | 455 + deps/libtomcrypt/src/hashes/rmd256.c | 420 + deps/libtomcrypt/src/hashes/rmd320.c | 485 + deps/libtomcrypt/src/hashes/sha1.c | 276 + deps/libtomcrypt/src/hashes/sha2/sha224.c | 119 + deps/libtomcrypt/src/hashes/sha2/sha256.c | 322 + deps/libtomcrypt/src/hashes/sha2/sha384.c | 124 + deps/libtomcrypt/src/hashes/sha2/sha512.c | 303 + deps/libtomcrypt/src/hashes/sha2/sha512_224.c | 120 + deps/libtomcrypt/src/hashes/sha2/sha512_256.c | 120 + deps/libtomcrypt/src/hashes/sha3.c | 378 + deps/libtomcrypt/src/hashes/sha3_test.c | 719 ++ deps/libtomcrypt/src/hashes/tiger.c | 796 ++ deps/libtomcrypt/src/hashes/whirl/whirl.c | 296 + deps/libtomcrypt/src/hashes/whirl/whirltab.c | 586 + deps/libtomcrypt/src/headers/tomcrypt.h | 95 + .../libtomcrypt/src/headers/tomcrypt_argchk.h | 38 + deps/libtomcrypt/src/headers/tomcrypt_cfg.h | 344 + .../libtomcrypt/src/headers/tomcrypt_cipher.h | 1174 ++ .../libtomcrypt/src/headers/tomcrypt_custom.h | 747 ++ deps/libtomcrypt/src/headers/tomcrypt_hash.h | 503 + deps/libtomcrypt/src/headers/tomcrypt_mac.h | 566 + .../libtomcrypt/src/headers/tomcrypt_macros.h | 459 + deps/libtomcrypt/src/headers/tomcrypt_math.h | 519 + deps/libtomcrypt/src/headers/tomcrypt_misc.h | 179 + deps/libtomcrypt/src/headers/tomcrypt_pk.h | 805 ++ deps/libtomcrypt/src/headers/tomcrypt_pkcs.h | 101 + .../src/headers/tomcrypt_private.h | 502 + deps/libtomcrypt/src/headers/tomcrypt_prng.h | 223 + deps/libtomcrypt/src/mac/blake2/blake2bmac.c | 56 + .../src/mac/blake2/blake2bmac_file.c | 78 + .../src/mac/blake2/blake2bmac_memory.c | 38 + .../src/mac/blake2/blake2bmac_memory_multi.c | 52 + .../src/mac/blake2/blake2bmac_test.c | 304 + deps/libtomcrypt/src/mac/blake2/blake2smac.c | 56 + .../src/mac/blake2/blake2smac_file.c | 78 + .../src/mac/blake2/blake2smac_memory.c | 38 + .../src/mac/blake2/blake2smac_memory_multi.c | 52 + .../src/mac/blake2/blake2smac_test.c | 304 + deps/libtomcrypt/src/mac/f9/f9_done.c | 65 + deps/libtomcrypt/src/mac/f9/f9_file.c | 87 + deps/libtomcrypt/src/mac/f9/f9_init.c | 58 + deps/libtomcrypt/src/mac/f9/f9_memory.c | 59 + deps/libtomcrypt/src/mac/f9/f9_memory_multi.c | 78 + deps/libtomcrypt/src/mac/f9/f9_process.c | 66 + deps/libtomcrypt/src/mac/f9/f9_test.c | 66 + deps/libtomcrypt/src/mac/hmac/hmac_done.c | 96 + deps/libtomcrypt/src/mac/hmac/hmac_file.c | 90 + deps/libtomcrypt/src/mac/hmac/hmac_init.c | 94 + deps/libtomcrypt/src/mac/hmac/hmac_memory.c | 76 + .../src/mac/hmac/hmac_memory_multi.c | 80 + deps/libtomcrypt/src/mac/hmac/hmac_process.c | 31 + deps/libtomcrypt/src/mac/hmac/hmac_test.c | 618 ++ deps/libtomcrypt/src/mac/omac/omac_done.c | 74 + deps/libtomcrypt/src/mac/omac/omac_file.c | 87 + deps/libtomcrypt/src/mac/omac/omac_init.c | 89 + deps/libtomcrypt/src/mac/omac/omac_memory.c | 73 + .../src/mac/omac/omac_memory_multi.c | 78 + deps/libtomcrypt/src/mac/omac/omac_process.c | 80 + deps/libtomcrypt/src/mac/omac/omac_test.c | 93 + deps/libtomcrypt/src/mac/pelican/pelican.c | 154 + .../src/mac/pelican/pelican_memory.c | 47 + .../src/mac/pelican/pelican_test.c | 103 + deps/libtomcrypt/src/mac/pmac/pmac_done.c | 62 + deps/libtomcrypt/src/mac/pmac/pmac_file.c | 88 + deps/libtomcrypt/src/mac/pmac/pmac_init.c | 138 + deps/libtomcrypt/src/mac/pmac/pmac_memory.c | 62 + .../src/mac/pmac/pmac_memory_multi.c | 77 + deps/libtomcrypt/src/mac/pmac/pmac_ntz.c | 27 + deps/libtomcrypt/src/mac/pmac/pmac_process.c | 88 + .../libtomcrypt/src/mac/pmac/pmac_shift_xor.c | 32 + deps/libtomcrypt/src/mac/pmac/pmac_test.c | 144 + deps/libtomcrypt/src/mac/poly1305/poly1305.c | 258 + .../src/mac/poly1305/poly1305_file.c | 83 + .../src/mac/poly1305/poly1305_memory.c | 43 + .../src/mac/poly1305/poly1305_memory_multi.c | 57 + .../src/mac/poly1305/poly1305_test.c | 46 + deps/libtomcrypt/src/mac/xcbc/xcbc_done.c | 65 + deps/libtomcrypt/src/mac/xcbc/xcbc_file.c | 87 + deps/libtomcrypt/src/mac/xcbc/xcbc_init.c | 96 + deps/libtomcrypt/src/mac/xcbc/xcbc_memory.c | 59 + .../src/mac/xcbc/xcbc_memory_multi.c | 78 + deps/libtomcrypt/src/mac/xcbc/xcbc_process.c | 63 + deps/libtomcrypt/src/mac/xcbc/xcbc_test.c | 116 + .../src/math/fp/ltc_ecc_fp_mulmod.c | 1580 +++ deps/libtomcrypt/src/math/gmp_desc.c | 658 ++ deps/libtomcrypt/src/math/ltm_desc.c | 560 + deps/libtomcrypt/src/math/multi.c | 66 + deps/libtomcrypt/src/math/radix_to_bin.c | 52 + deps/libtomcrypt/src/math/rand_bn.c | 65 + deps/libtomcrypt/src/math/rand_prime.c | 78 + deps/libtomcrypt/src/math/tfm_desc.c | 857 ++ deps/libtomcrypt/src/misc/adler32.c | 123 + .../src/misc/base16/base16_decode.c | 65 + .../src/misc/base16/base16_encode.c | 64 + .../src/misc/base32/base32_decode.c | 111 + .../src/misc/base32/base32_encode.c | 86 + .../src/misc/base64/base64_decode.c | 229 + .../src/misc/base64/base64_encode.c | 159 + deps/libtomcrypt/src/misc/bcrypt/bcrypt.c | 191 + deps/libtomcrypt/src/misc/burn_stack.c | 23 + .../libtomcrypt/src/misc/compare_testvector.c | 81 + deps/libtomcrypt/src/misc/copy_or_zeromem.c | 51 + deps/libtomcrypt/src/misc/crc32.c | 193 + deps/libtomcrypt/src/misc/crypt/crypt.c | 558 + .../libtomcrypt/src/misc/crypt/crypt_argchk.c | 17 + .../src/misc/crypt/crypt_cipher_descriptor.c | 15 + .../src/misc/crypt/crypt_cipher_is_valid.c | 24 + .../src/misc/crypt/crypt_constants.c | 290 + .../src/misc/crypt/crypt_find_cipher.c | 29 + .../src/misc/crypt/crypt_find_cipher_any.c | 38 + .../src/misc/crypt/crypt_find_cipher_id.c | 28 + .../src/misc/crypt/crypt_find_hash.c | 28 + .../src/misc/crypt/crypt_find_hash_any.c | 37 + .../src/misc/crypt/crypt_find_hash_id.c | 28 + .../src/misc/crypt/crypt_find_hash_oid.c | 23 + .../src/misc/crypt/crypt_find_prng.c | 29 + deps/libtomcrypt/src/misc/crypt/crypt_fsa.c | 46 + .../src/misc/crypt/crypt_hash_descriptor.c | 15 + .../src/misc/crypt/crypt_hash_is_valid.c | 24 + deps/libtomcrypt/src/misc/crypt/crypt_inits.c | 81 + .../src/misc/crypt/crypt_ltc_mp_descriptor.c | 6 + .../src/misc/crypt/crypt_prng_descriptor.c | 14 + .../src/misc/crypt/crypt_prng_is_valid.c | 24 + .../misc/crypt/crypt_prng_rng_descriptor.c | 7 + .../misc/crypt/crypt_register_all_ciphers.c | 100 + .../misc/crypt/crypt_register_all_hashes.c | 95 + .../src/misc/crypt/crypt_register_all_prngs.c | 38 + .../src/misc/crypt/crypt_register_cipher.c | 42 + .../src/misc/crypt/crypt_register_hash.c | 42 + .../src/misc/crypt/crypt_register_prng.c | 42 + deps/libtomcrypt/src/misc/crypt/crypt_sizes.c | 351 + .../src/misc/crypt/crypt_unregister_cipher.c | 33 + .../src/misc/crypt/crypt_unregister_hash.c | 32 + .../src/misc/crypt/crypt_unregister_prng.c | 32 + deps/libtomcrypt/src/misc/error_to_string.c | 68 + deps/libtomcrypt/src/misc/hkdf/hkdf.c | 135 + deps/libtomcrypt/src/misc/hkdf/hkdf_test.c | 284 + deps/libtomcrypt/src/misc/mem_neq.c | 53 + .../src/misc/padding/padding_depad.c | 90 + .../src/misc/padding/padding_pad.c | 151 + deps/libtomcrypt/src/misc/pbes/pbes.c | 73 + deps/libtomcrypt/src/misc/pbes/pbes1.c | 117 + deps/libtomcrypt/src/misc/pbes/pbes2.c | 198 + deps/libtomcrypt/src/misc/pkcs12/pkcs12_kdf.c | 82 + .../src/misc/pkcs12/pkcs12_utf8_to_utf16.c | 59 + deps/libtomcrypt/src/misc/pkcs5/pkcs_5_1.c | 185 + deps/libtomcrypt/src/misc/pkcs5/pkcs_5_2.c | 121 + deps/libtomcrypt/src/misc/pkcs5/pkcs_5_test.c | 224 + .../src/misc/ssh/ssh_decode_sequence_multi.c | 165 + .../src/misc/ssh/ssh_encode_sequence_multi.c | 158 + deps/libtomcrypt/src/misc/zeromem.c | 22 + deps/libtomcrypt/src/modes/cbc/cbc_decrypt.c | 84 + deps/libtomcrypt/src/modes/cbc/cbc_done.c | 30 + deps/libtomcrypt/src/modes/cbc/cbc_encrypt.c | 85 + deps/libtomcrypt/src/modes/cbc/cbc_getiv.c | 34 + deps/libtomcrypt/src/modes/cbc/cbc_setiv.c | 32 + deps/libtomcrypt/src/modes/cbc/cbc_start.c | 50 + deps/libtomcrypt/src/modes/cfb/cfb_decrypt.c | 55 + deps/libtomcrypt/src/modes/cfb/cfb_done.c | 30 + deps/libtomcrypt/src/modes/cfb/cfb_encrypt.c | 53 + deps/libtomcrypt/src/modes/cfb/cfb_getiv.c | 34 + deps/libtomcrypt/src/modes/cfb/cfb_setiv.c | 40 + deps/libtomcrypt/src/modes/cfb/cfb_start.c | 54 + deps/libtomcrypt/src/modes/ctr/ctr_decrypt.c | 30 + deps/libtomcrypt/src/modes/ctr/ctr_done.c | 30 + deps/libtomcrypt/src/modes/ctr/ctr_encrypt.c | 129 + deps/libtomcrypt/src/modes/ctr/ctr_getiv.c | 34 + deps/libtomcrypt/src/modes/ctr/ctr_setiv.c | 44 + deps/libtomcrypt/src/modes/ctr/ctr_start.c | 89 + deps/libtomcrypt/src/modes/ctr/ctr_test.c | 73 + deps/libtomcrypt/src/modes/ecb/ecb_decrypt.c | 48 + deps/libtomcrypt/src/modes/ecb/ecb_done.c | 30 + deps/libtomcrypt/src/modes/ecb/ecb_encrypt.c | 48 + deps/libtomcrypt/src/modes/ecb/ecb_start.c | 36 + deps/libtomcrypt/src/modes/f8/f8_decrypt.c | 31 + deps/libtomcrypt/src/modes/f8/f8_done.c | 30 + deps/libtomcrypt/src/modes/f8/f8_encrypt.c | 91 + deps/libtomcrypt/src/modes/f8/f8_getiv.c | 34 + deps/libtomcrypt/src/modes/f8/f8_setiv.c | 40 + deps/libtomcrypt/src/modes/f8/f8_start.c | 86 + deps/libtomcrypt/src/modes/f8/f8_test_mode.c | 64 + deps/libtomcrypt/src/modes/lrw/lrw_decrypt.c | 39 + deps/libtomcrypt/src/modes/lrw/lrw_done.c | 31 + deps/libtomcrypt/src/modes/lrw/lrw_encrypt.c | 39 + deps/libtomcrypt/src/modes/lrw/lrw_getiv.c | 34 + deps/libtomcrypt/src/modes/lrw/lrw_process.c | 109 + deps/libtomcrypt/src/modes/lrw/lrw_setiv.c | 68 + deps/libtomcrypt/src/modes/lrw/lrw_start.c | 92 + deps/libtomcrypt/src/modes/lrw/lrw_test.c | 124 + deps/libtomcrypt/src/modes/ofb/ofb_decrypt.c | 31 + deps/libtomcrypt/src/modes/ofb/ofb_done.c | 30 + deps/libtomcrypt/src/modes/ofb/ofb_encrypt.c | 48 + deps/libtomcrypt/src/modes/ofb/ofb_getiv.c | 34 + deps/libtomcrypt/src/modes/ofb/ofb_setiv.c | 40 + deps/libtomcrypt/src/modes/ofb/ofb_start.c | 48 + deps/libtomcrypt/src/modes/xts/xts_decrypt.c | 146 + deps/libtomcrypt/src/modes/xts/xts_done.c | 21 + deps/libtomcrypt/src/modes/xts/xts_encrypt.c | 147 + deps/libtomcrypt/src/modes/xts/xts_init.c | 51 + deps/libtomcrypt/src/modes/xts/xts_mult_x.c | 29 + deps/libtomcrypt/src/modes/xts/xts_test.c | 296 + .../pk/asn1/der/bit/der_decode_bit_string.c | 77 + .../asn1/der/bit/der_decode_raw_bit_string.c | 84 + .../pk/asn1/der/bit/der_encode_bit_string.c | 72 + .../asn1/der/bit/der_encode_raw_bit_string.c | 75 + .../pk/asn1/der/bit/der_length_bit_string.c | 36 + .../pk/asn1/der/boolean/der_decode_boolean.c | 35 + .../pk/asn1/der/boolean/der_encode_boolean.c | 39 + .../pk/asn1/der/boolean/der_length_boolean.c | 23 + .../pk/asn1/der/choice/der_decode_choice.c | 221 + .../der/custom_type/der_decode_custom_type.c | 426 + .../der/custom_type/der_encode_custom_type.c | 228 + .../der/custom_type/der_length_custom_type.c | 203 + .../src/pk/asn1/der/general/der_asn1_maps.c | 157 + .../der/general/der_decode_asn1_identifier.c | 123 + .../asn1/der/general/der_decode_asn1_length.c | 59 + .../der/general/der_encode_asn1_identifier.c | 86 + .../asn1/der/general/der_encode_asn1_length.c | 117 + .../der/general/der_length_asn1_identifier.c | 23 + .../asn1/der/general/der_length_asn1_length.c | 22 + .../der_decode_generalizedtime.c | 135 + .../der_encode_generalizedtime.c | 98 + .../der_length_generalizedtime.c | 48 + .../pk/asn1/der/ia5/der_decode_ia5_string.c | 73 + .../pk/asn1/der/ia5/der_encode_ia5_string.c | 61 + .../pk/asn1/der/ia5/der_length_ia5_string.c | 172 + .../pk/asn1/der/integer/der_decode_integer.c | 68 + .../pk/asn1/der/integer/der_encode_integer.c | 105 + .../pk/asn1/der/integer/der_length_integer.c | 55 + .../der_decode_object_identifier.c | 94 + .../der_encode_object_identifier.c | 92 + .../der_length_object_identifier.c | 77 + .../asn1/der/octet/der_decode_octet_string.c | 69 + .../asn1/der/octet/der_encode_octet_string.c | 62 + .../asn1/der/octet/der_length_octet_string.c | 33 + .../der_decode_printable_string.c | 73 + .../der_encode_printable_string.c | 61 + .../der_length_printable_string.c | 144 + .../der/sequence/der_decode_sequence_ex.c | 28 + .../der/sequence/der_decode_sequence_flexi.c | 541 + .../der/sequence/der_decode_sequence_multi.c | 181 + .../der/sequence/der_encode_sequence_ex.c | 202 + .../der/sequence/der_encode_sequence_multi.c | 139 + .../asn1/der/sequence/der_length_sequence.c | 179 + .../pk/asn1/der/sequence/der_sequence_free.c | 53 + .../asn1/der/sequence/der_sequence_shrink.c | 40 + .../src/pk/asn1/der/set/der_encode_set.c | 74 + .../src/pk/asn1/der/set/der_encode_setof.c | 151 + .../short_integer/der_decode_short_integer.c | 60 + .../short_integer/der_encode_short_integer.c | 85 + .../short_integer/der_length_short_integer.c | 52 + .../der_decode_teletex_string.c | 72 + .../der_length_teletex_string.c | 188 + .../pk/asn1/der/utctime/der_decode_utctime.c | 116 + .../pk/asn1/der/utctime/der_encode_utctime.c | 71 + .../pk/asn1/der/utctime/der_length_utctime.c | 34 + .../pk/asn1/der/utf8/der_decode_utf8_string.c | 118 + .../pk/asn1/der/utf8/der_encode_utf8_string.c | 75 + .../pk/asn1/der/utf8/der_length_utf8_string.c | 81 + deps/libtomcrypt/src/pk/asn1/oid/pk_get_oid.c | 37 + deps/libtomcrypt/src/pk/asn1/oid/pk_oid_cmp.c | 44 + deps/libtomcrypt/src/pk/asn1/oid/pk_oid_str.c | 82 + .../src/pk/asn1/pkcs8/pkcs8_decode_flexi.c | 97 + .../x509_decode_public_key_from_certificate.c | 109 + .../x509_decode_subject_public_key_info.c | 119 + .../x509_encode_subject_public_key_info.c | 66 + deps/libtomcrypt/src/pk/dh/dh.c | 227 + deps/libtomcrypt/src/pk/dh/dh_check_pubkey.c | 55 + deps/libtomcrypt/src/pk/dh/dh_export.c | 52 + deps/libtomcrypt/src/pk/dh/dh_export_key.c | 37 + deps/libtomcrypt/src/pk/dh/dh_free.c | 18 + deps/libtomcrypt/src/pk/dh/dh_generate_key.c | 90 + deps/libtomcrypt/src/pk/dh/dh_import.c | 89 + deps/libtomcrypt/src/pk/dh/dh_set.c | 114 + .../libtomcrypt/src/pk/dh/dh_set_pg_dhparam.c | 44 + deps/libtomcrypt/src/pk/dh/dh_shared_secret.c | 70 + deps/libtomcrypt/src/pk/dsa/dsa_decrypt_key.c | 129 + deps/libtomcrypt/src/pk/dsa/dsa_encrypt_key.c | 118 + deps/libtomcrypt/src/pk/dsa/dsa_export.c | 100 + deps/libtomcrypt/src/pk/dsa/dsa_free.c | 23 + .../libtomcrypt/src/pk/dsa/dsa_generate_key.c | 37 + .../libtomcrypt/src/pk/dsa/dsa_generate_pqg.c | 234 + deps/libtomcrypt/src/pk/dsa/dsa_import.c | 143 + deps/libtomcrypt/src/pk/dsa/dsa_make_key.c | 31 + deps/libtomcrypt/src/pk/dsa/dsa_set.c | 102 + .../src/pk/dsa/dsa_set_pqg_dsaparam.c | 57 + .../src/pk/dsa/dsa_shared_secret.c | 60 + deps/libtomcrypt/src/pk/dsa/dsa_sign_hash.c | 142 + deps/libtomcrypt/src/pk/dsa/dsa_verify_hash.c | 127 + deps/libtomcrypt/src/pk/dsa/dsa_verify_key.c | 189 + .../src/pk/ec25519/ec25519_crypto_ctx.c | 41 + .../src/pk/ec25519/ec25519_export.c | 90 + .../src/pk/ec25519/ec25519_import_pkcs8.c | 87 + deps/libtomcrypt/src/pk/ec25519/tweetnacl.c | 491 + deps/libtomcrypt/src/pk/ecc/ecc.c | 435 + .../src/pk/ecc/ecc_ansi_x963_export.c | 24 + .../src/pk/ecc/ecc_ansi_x963_import.c | 52 + deps/libtomcrypt/src/pk/ecc/ecc_decrypt_key.c | 133 + deps/libtomcrypt/src/pk/ecc/ecc_encrypt_key.c | 120 + deps/libtomcrypt/src/pk/ecc/ecc_export.c | 61 + .../src/pk/ecc/ecc_export_openssl.c | 167 + deps/libtomcrypt/src/pk/ecc/ecc_find_curve.c | 242 + deps/libtomcrypt/src/pk/ecc/ecc_free.c | 28 + deps/libtomcrypt/src/pk/ecc/ecc_get_key.c | 53 + deps/libtomcrypt/src/pk/ecc/ecc_get_oid_str.c | 22 + deps/libtomcrypt/src/pk/ecc/ecc_get_size.c | 26 + deps/libtomcrypt/src/pk/ecc/ecc_import.c | 100 + .../src/pk/ecc/ecc_import_openssl.c | 120 + .../libtomcrypt/src/pk/ecc/ecc_import_pkcs8.c | 186 + deps/libtomcrypt/src/pk/ecc/ecc_import_x509.c | 116 + deps/libtomcrypt/src/pk/ecc/ecc_make_key.c | 73 + deps/libtomcrypt/src/pk/ecc/ecc_recover_key.c | 260 + deps/libtomcrypt/src/pk/ecc/ecc_set_curve.c | 80 + .../src/pk/ecc/ecc_set_curve_internal.c | 119 + deps/libtomcrypt/src/pk/ecc/ecc_set_key.c | 56 + .../src/pk/ecc/ecc_shared_secret.c | 66 + deps/libtomcrypt/src/pk/ecc/ecc_sign_hash.c | 181 + deps/libtomcrypt/src/pk/ecc/ecc_sizes.c | 36 + .../src/pk/ecc/ecc_ssh_ecdsa_encode_name.c | 65 + deps/libtomcrypt/src/pk/ecc/ecc_verify_hash.c | 206 + .../src/pk/ecc/ltc_ecc_export_point.c | 53 + .../src/pk/ecc/ltc_ecc_import_point.c | 61 + .../libtomcrypt/src/pk/ecc/ltc_ecc_is_point.c | 62 + .../src/pk/ecc/ltc_ecc_is_point_at_infinity.c | 53 + deps/libtomcrypt/src/pk/ecc/ltc_ecc_map.c | 63 + deps/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c | 192 + deps/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c | 204 + .../src/pk/ecc/ltc_ecc_mulmod_timing.c | 151 + deps/libtomcrypt/src/pk/ecc/ltc_ecc_points.c | 61 + .../src/pk/ecc/ltc_ecc_projective_add_point.c | 198 + .../src/pk/ecc/ltc_ecc_projective_dbl_point.c | 182 + .../src/pk/ecc/ltc_ecc_verify_key.c | 59 + .../src/pk/ed25519/ed25519_export.c | 31 + .../src/pk/ed25519/ed25519_import.c | 35 + .../src/pk/ed25519/ed25519_import_pkcs8.c | 28 + .../src/pk/ed25519/ed25519_import_raw.c | 41 + .../src/pk/ed25519/ed25519_import_x509.c | 45 + .../src/pk/ed25519/ed25519_make_key.c | 36 + .../libtomcrypt/src/pk/ed25519/ed25519_sign.c | 126 + .../src/pk/ed25519/ed25519_verify.c | 134 + deps/libtomcrypt/src/pk/pkcs1/pkcs_1_i2osp.c | 39 + deps/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c | 96 + .../src/pk/pkcs1/pkcs_1_oaep_decode.c | 185 + .../src/pk/pkcs1/pkcs_1_oaep_encode.c | 172 + deps/libtomcrypt/src/pk/pkcs1/pkcs_1_os2ip.c | 24 + .../src/pk/pkcs1/pkcs_1_pss_decode.c | 166 + .../src/pk/pkcs1/pkcs_1_pss_encode.c | 164 + .../src/pk/pkcs1/pkcs_1_v1_5_decode.c | 102 + .../src/pk/pkcs1/pkcs_1_v1_5_encode.c | 105 + deps/libtomcrypt/src/pk/rsa/rsa_decrypt_key.c | 95 + deps/libtomcrypt/src/pk/rsa/rsa_encrypt_key.c | 93 + deps/libtomcrypt/src/pk/rsa/rsa_export.c | 91 + deps/libtomcrypt/src/pk/rsa/rsa_exptmod.c | 172 + deps/libtomcrypt/src/pk/rsa/rsa_get_size.c | 30 + deps/libtomcrypt/src/pk/rsa/rsa_import.c | 143 + .../libtomcrypt/src/pk/rsa/rsa_import_pkcs8.c | 116 + deps/libtomcrypt/src/pk/rsa/rsa_import_x509.c | 54 + deps/libtomcrypt/src/pk/rsa/rsa_key.c | 103 + deps/libtomcrypt/src/pk/rsa/rsa_make_key.c | 165 + deps/libtomcrypt/src/pk/rsa/rsa_set.c | 123 + deps/libtomcrypt/src/pk/rsa/rsa_sign_hash.c | 136 + .../src/pk/rsa/rsa_sign_saltlen_get.c | 37 + deps/libtomcrypt/src/pk/rsa/rsa_verify_hash.c | 183 + .../libtomcrypt/src/pk/x25519/x25519_export.c | 31 + .../libtomcrypt/src/pk/x25519/x25519_import.c | 35 + .../src/pk/x25519/x25519_import_pkcs8.c | 28 + .../src/pk/x25519/x25519_import_raw.c | 41 + .../src/pk/x25519/x25519_import_x509.c | 45 + .../src/pk/x25519/x25519_make_key.c | 42 + .../src/pk/x25519/x25519_shared_secret.c | 42 + deps/libtomcrypt/src/prngs/chacha20.c | 218 + deps/libtomcrypt/src/prngs/fortuna.c | 520 + deps/libtomcrypt/src/prngs/rc4.c | 221 + deps/libtomcrypt/src/prngs/rng_get_bytes.c | 167 + deps/libtomcrypt/src/prngs/rng_make_prng.c | 81 + deps/libtomcrypt/src/prngs/sober128.c | 220 + deps/libtomcrypt/src/prngs/sprng.c | 152 + deps/libtomcrypt/src/prngs/yarrow.c | 323 + .../src/stream/chacha/chacha_crypt.c | 91 + .../src/stream/chacha/chacha_done.c | 20 + .../src/stream/chacha/chacha_ivctr32.c | 37 + .../src/stream/chacha/chacha_ivctr64.c | 37 + .../src/stream/chacha/chacha_keystream.c | 28 + .../src/stream/chacha/chacha_memory.c | 41 + .../src/stream/chacha/chacha_setup.c | 57 + .../src/stream/chacha/chacha_test.c | 74 + deps/libtomcrypt/src/stream/rabbit/rabbit.c | 447 + .../src/stream/rabbit/rabbit_memory.c | 40 + deps/libtomcrypt/src/stream/rc4/rc4_stream.c | 101 + .../src/stream/rc4/rc4_stream_memory.c | 31 + deps/libtomcrypt/src/stream/rc4/rc4_test.c | 33 + .../src/stream/salsa20/salsa20_crypt.c | 86 + .../src/stream/salsa20/salsa20_done.c | 20 + .../src/stream/salsa20/salsa20_ivctr64.c | 38 + .../src/stream/salsa20/salsa20_keystream.c | 29 + .../src/stream/salsa20/salsa20_memory.c | 35 + .../src/stream/salsa20/salsa20_setup.c | 59 + .../src/stream/salsa20/salsa20_test.c | 86 + .../src/stream/salsa20/xsalsa20_memory.c | 34 + .../src/stream/salsa20/xsalsa20_setup.c | 127 + .../src/stream/salsa20/xsalsa20_test.c | 90 + .../src/stream/sober128/sober128_stream.c | 333 + .../stream/sober128/sober128_stream_memory.c | 35 + .../src/stream/sober128/sober128_test.c | 43 + .../src/stream/sober128/sober128tab.c | 166 + .../src/stream/sosemanuk/sosemanuk.c | 807 ++ .../src/stream/sosemanuk/sosemanuk_memory.c | 35 + .../src/stream/sosemanuk/sosemanuk_test.c | 79 + deps/libtomcrypt/testme.sh | 71 + deps/libtomcrypt/tests/CMakeLists.txt | 71 + deps/libtomcrypt/tests/asn1/0x00.crt | Bin 0 -> 3298 bytes deps/libtomcrypt/tests/asn1/0x80.crt | Bin 0 -> 3298 bytes deps/libtomcrypt/tests/asn1/0xff.crt | Bin 0 -> 3298 bytes .../tests/asn1/illegal_padding1.crt | Bin 0 -> 17651 bytes .../tests/asn1/illegal_padding2.crt | Bin 0 -> 17651 bytes .../tests/asn1/illegal_padding3.crt | Bin 0 -> 17651 bytes .../tests/asn1/oid_overflow_test.der | Bin 0 -> 3127 bytes deps/libtomcrypt/tests/asn1/oid_size_test.der | Bin 0 -> 20533 bytes deps/libtomcrypt/tests/asn1/private.der | Bin 0 -> 18477 bytes deps/libtomcrypt/tests/asn1/root-ca.der | Bin 0 -> 8476 bytes deps/libtomcrypt/tests/asn1/type0x08.crt | Bin 0 -> 3298 bytes deps/libtomcrypt/tests/base16_test.c | 48 + deps/libtomcrypt/tests/base32_test.c | 51 + deps/libtomcrypt/tests/base64_test.c | 178 + deps/libtomcrypt/tests/bcrypt_test.c | 146 + deps/libtomcrypt/tests/cipher_hash_test.c | 58 + deps/libtomcrypt/tests/common.c | 166 + deps/libtomcrypt/tests/common.h | 43 + deps/libtomcrypt/tests/der_test.c | 2029 ++++ deps/libtomcrypt/tests/dh_test.c | 406 + deps/libtomcrypt/tests/dsa_test.c | 379 + deps/libtomcrypt/tests/ecc_test.c | 1627 +++ deps/libtomcrypt/tests/ed25519_test.c | 428 + deps/libtomcrypt/tests/file_test.c | 110 + deps/libtomcrypt/tests/mac_test.c | 54 + deps/libtomcrypt/tests/misc_test.c | 39 + deps/libtomcrypt/tests/modes_test.c | 120 + deps/libtomcrypt/tests/mpi_test.c | 144 + deps/libtomcrypt/tests/multi_test.c | 236 + .../tests/no_null_termination_check_test.c | 12 + deps/libtomcrypt/tests/no_prng.c | 182 + deps/libtomcrypt/tests/padding_test.c | 220 + deps/libtomcrypt/tests/pkcs_1_eme_test.c | 69 + deps/libtomcrypt/tests/pkcs_1_emsa_test.c | 63 + deps/libtomcrypt/tests/pkcs_1_oaep_test.c | 69 + deps/libtomcrypt/tests/pkcs_1_pss_test.c | 70 + deps/libtomcrypt/tests/pkcs_1_test.c | 96 + deps/libtomcrypt/tests/prng_test.c | 109 + deps/libtomcrypt/tests/rotate_test.c | 406 + deps/libtomcrypt/tests/rsa-pkcs8/README.txt | 29 + .../libtomcrypt/tests/rsa-pkcs8/key_pkcs8.der | Bin 0 -> 636 bytes .../tests/rsa-pkcs8/key_pkcs8_pbe_md2_des.der | Bin 0 -> 677 bytes .../rsa-pkcs8/key_pkcs8_pbe_md2_rc2_64.der | Bin 0 -> 677 bytes .../tests/rsa-pkcs8/key_pkcs8_pbe_md5_des.der | Bin 0 -> 677 bytes .../rsa-pkcs8/key_pkcs8_pbe_md5_rc2_64.der | Bin 0 -> 677 bytes .../rsa-pkcs8/key_pkcs8_pbe_sha1_3des.der | Bin 0 -> 678 bytes .../rsa-pkcs8/key_pkcs8_pbe_sha1_des.der | Bin 0 -> 677 bytes .../rsa-pkcs8/key_pkcs8_pbe_sha1_rc2_64.der | Bin 0 -> 677 bytes .../rsa-pkcs8/key_pkcs8_pbkdf2_des_cbc.der | Bin 0 -> 711 bytes .../key_pkcs8_pbkdf2_des_ede3_cbc.der | Bin 0 -> 714 bytes .../rsa-pkcs8/key_pkcs8_pbkdf2_rc2_cbc.der | Bin 0 -> 722 bytes .../key_pkcs8_pbkdf2_sha224_des_ede3_cbc.der | Bin 0 -> 728 bytes .../key_pkcs8_pbkdf2_sha256_des_ede3_cbc.der | Bin 0 -> 728 bytes .../key_pkcs8_pbkdf2_sha384_des_ede3_cbc.der | Bin 0 -> 728 bytes ...key_pkcs8_pbkdf2_sha512_224_aes256_cbc.der | Bin 0 -> 737 bytes ...key_pkcs8_pbkdf2_sha512_256_aes256_cbc.der | Bin 0 -> 737 bytes ...key_pkcs8_pbkdf2_sha512_256_rc2_40_cbc.der | Bin 0 -> 737 bytes ...key_pkcs8_pbkdf2_sha512_256_rc2_64_cbc.der | Bin 0 -> 736 bytes .../key_pkcs8_pbkdf2_sha512_aes128_cbc.der | Bin 0 -> 737 bytes .../key_pkcs8_pbkdf2_sha512_aes192_cbc.der | Bin 0 -> 737 bytes .../key_pkcs8_pbkdf2_sha512_aes256_cbc.der | Bin 0 -> 737 bytes .../key_pkcs8_pbkdf2_sha512_des_ede3_cbc.der | Bin 0 -> 728 bytes .../key_pkcs8_pbkdf2_sha512_rc2_40_cbc.der | Bin 0 -> 737 bytes .../key_pkcs8_pbkdf2_sha512_rc2_64_cbc.der | Bin 0 -> 736 bytes .../tests/rsa/rsa_size_1024_bits.der | Bin 0 -> 1293 bytes .../tests/rsa/rsa_size_16384_bits.der | Bin 0 -> 5141 bytes .../tests/rsa/rsa_size_1999_bits.der | Bin 0 -> 1539 bytes .../tests/rsa/rsa_size_2048_bits.der | Bin 0 -> 1554 bytes .../tests/rsa/rsa_size_4096_bits.der | Bin 0 -> 2066 bytes .../tests/rsa/rsa_size_512_bits.der | Bin 0 -> 1157 bytes .../tests/rsa/rsa_size_8192_bits.der | Bin 0 -> 3090 bytes deps/libtomcrypt/tests/rsa_test.c | 781 ++ deps/libtomcrypt/tests/sources.cmake | 35 + deps/libtomcrypt/tests/ssh_test.c | 356 + deps/libtomcrypt/tests/store_test.c | 76 + deps/libtomcrypt/tests/test.c | 436 + deps/libtomcrypt/tests/test.der | Bin 0 -> 162 bytes deps/libtomcrypt/tests/test.key | 15 + deps/libtomcrypt/tests/test_dsa.key | 12 + deps/libtomcrypt/tests/tomcrypt_test.h | 52 + deps/libtomcrypt/tests/x25519_test.c | 250 + deps/libtomcrypt/updatemakes.sh | 16 + deps/libtommath | 1 - deps/libtommath/.gitattributes | 7 + deps/libtommath/.github/workflows/deploy.yml | 47 + deps/libtommath/.github/workflows/main.yml | 216 + deps/libtommath/.gitignore | 123 + deps/libtommath/CMakeLists.txt | 303 + deps/libtommath/LICENSE | 26 + deps/libtommath/Package.swift | 40 + deps/libtommath/README.md | 64 + deps/libtommath/appveyor.yml | 26 + deps/libtommath/astylerc | 30 + deps/libtommath/changes.txt | 497 + deps/libtommath/demo/CMakeLists.txt | 66 + deps/libtommath/demo/mtest_opponent.c | 441 + deps/libtommath/demo/s_mp_rand_jenkins.c | 55 + deps/libtommath/demo/shared.c | 49 + deps/libtommath/demo/shared.h | 27 + deps/libtommath/demo/test.c | 2553 +++++ deps/libtommath/demo/timing.c | 429 + deps/libtommath/demo/tommath_tests.swift | 94 + deps/libtommath/doc/.latexindent.yaml | 35 + deps/libtommath/doc/bn.tex | 2755 +++++ deps/libtommath/doc/makefile | 49 + deps/libtommath/doc/tommath.3 | 1744 +++ deps/libtommath/etc/2kprime.1 | 2 + deps/libtommath/etc/2kprime.c | 81 + deps/libtommath/etc/drprime.c | 67 + deps/libtommath/etc/drprimes.28 | 25 + deps/libtommath/etc/drprimes.txt | 9 + deps/libtommath/etc/makefile | 43 + deps/libtommath/etc/makefile.icc | 67 + deps/libtommath/etc/makefile.msvc | 24 + deps/libtommath/etc/mersenne.c | 138 + deps/libtommath/etc/mont.c | 44 + deps/libtommath/etc/pprime.c | 411 + deps/libtommath/etc/prime.1024 | 414 + deps/libtommath/etc/prime.512 | 205 + deps/libtommath/etc/timer.asm | 37 + deps/libtommath/etc/tune.c | 544 + deps/libtommath/etc/tune_it.sh | 106 + deps/libtommath/helper.pl | 513 + deps/libtommath/libtommath.pc.in | 9 + deps/libtommath/libtommath_VS2008.sln | 29 + deps/libtommath/libtommath_VS2008.vcproj | 966 ++ deps/libtommath/logs/Makefile | 9 + deps/libtommath/logs/README | 13 + deps/libtommath/logs/before_after.dem | 36 + deps/libtommath/logs/before_after.html | 28 + deps/libtommath/logs/graphs.dem | 16 + deps/libtommath/logs/index.html | 24 + deps/libtommath/makefile | 204 + deps/libtommath/makefile.mingw | 99 + deps/libtommath/makefile.msvc | 102 + deps/libtommath/makefile.shared | 98 + deps/libtommath/makefile.unix | 97 + deps/libtommath/makefile_include.mk | 199 + deps/libtommath/modulemap/module.modulemap | 4 + deps/libtommath/mp_2expt.c | 31 + deps/libtommath/mp_abs.c | 24 + deps/libtommath/mp_add.c | 29 + deps/libtommath/mp_add_d.c | 86 + deps/libtommath/mp_addmod.c | 15 + deps/libtommath/mp_and.c | 54 + deps/libtommath/mp_clamp.c | 27 + deps/libtommath/mp_clear.c | 20 + deps/libtommath/mp_clear_multi.c | 18 + deps/libtommath/mp_cmp.c | 21 + deps/libtommath/mp_cmp_d.c | 26 + deps/libtommath/mp_cmp_mag.c | 25 + deps/libtommath/mp_cnt_lsb.c | 38 + deps/libtommath/mp_complement.c | 13 + deps/libtommath/mp_copy.c | 29 + deps/libtommath/mp_count_bits.c | 28 + deps/libtommath/mp_cutoffs.c | 14 + deps/libtommath/mp_div.c | 42 + deps/libtommath/mp_div_2.c | 40 + deps/libtommath/mp_div_2d.c | 61 + deps/libtommath/mp_div_d.c | 84 + deps/libtommath/mp_dr_is_modulus.c | 27 + deps/libtommath/mp_dr_reduce.c | 68 + deps/libtommath/mp_dr_setup.c | 15 + deps/libtommath/mp_error_to_string.c | 29 + deps/libtommath/mp_exch.c | 13 + deps/libtommath/mp_expt_n.c | 43 + deps/libtommath/mp_exptmod.c | 78 + deps/libtommath/mp_exteuclid.c | 72 + deps/libtommath/mp_fread.c | 66 + deps/libtommath/mp_from_sbin.c | 21 + deps/libtommath/mp_from_ubin.c | 30 + deps/libtommath/mp_fwrite.c | 34 + deps/libtommath/mp_gcd.c | 92 + deps/libtommath/mp_get_double.c | 18 + deps/libtommath/mp_get_i32.c | 7 + deps/libtommath/mp_get_i64.c | 7 + deps/libtommath/mp_get_l.c | 7 + deps/libtommath/mp_get_mag_u32.c | 7 + deps/libtommath/mp_get_mag_u64.c | 7 + deps/libtommath/mp_get_mag_ul.c | 7 + deps/libtommath/mp_grow.c | 40 + deps/libtommath/mp_hash.c | 36 + deps/libtommath/mp_init.c | 23 + deps/libtommath/mp_init_copy.c | 21 + deps/libtommath/mp_init_i32.c | 7 + deps/libtommath/mp_init_i64.c | 7 + deps/libtommath/mp_init_l.c | 7 + deps/libtommath/mp_init_multi.c | 41 + deps/libtommath/mp_init_set.c | 16 + deps/libtommath/mp_init_size.c | 28 + deps/libtommath/mp_init_u32.c | 7 + deps/libtommath/mp_init_u64.c | 7 + deps/libtommath/mp_init_ul.c | 7 + deps/libtommath/mp_invmod.c | 29 + deps/libtommath/mp_is_square.c | 94 + deps/libtommath/mp_kronecker.c | 129 + deps/libtommath/mp_lcm.c | 44 + deps/libtommath/mp_log.c | 168 + deps/libtommath/mp_log_n.c | 19 + deps/libtommath/mp_lshd.c | 42 + deps/libtommath/mp_mod.c | 15 + deps/libtommath/mp_mod_2d.c | 40 + .../mp_montgomery_calc_normalization.c | 43 + deps/libtommath/mp_montgomery_reduce.c | 89 + deps/libtommath/mp_montgomery_setup.c | 40 + deps/libtommath/mp_mul.c | 68 + deps/libtommath/mp_mul_2.c | 53 + deps/libtommath/mp_mul_2d.c | 63 + deps/libtommath/mp_mul_d.c | 68 + deps/libtommath/mp_mulmod.c | 15 + deps/libtommath/mp_neg.c | 18 + deps/libtommath/mp_or.c | 54 + deps/libtommath/mp_pack.c | 69 + deps/libtommath/mp_pack_count.c | 12 + deps/libtommath/mp_prime_fermat.c | 41 + .../libtommath/mp_prime_frobenius_underwood.c | 127 + deps/libtommath/mp_prime_is_prime.c | 282 + deps/libtommath/mp_prime_miller_rabin.c | 91 + deps/libtommath/mp_prime_next_prime.c | 127 + .../libtommath/mp_prime_rabin_miller_trials.c | 48 + deps/libtommath/mp_prime_rand.c | 123 + .../mp_prime_strong_lucas_selfridge.c | 281 + deps/libtommath/mp_radix_size.c | 34 + deps/libtommath/mp_radix_size_overestimate.c | 17 + deps/libtommath/mp_rand.c | 39 + deps/libtommath/mp_rand_source.c | 12 + deps/libtommath/mp_read_radix.c | 69 + deps/libtommath/mp_reduce.c | 83 + deps/libtommath/mp_reduce_2k.c | 49 + deps/libtommath/mp_reduce_2k_l.c | 52 + deps/libtommath/mp_reduce_2k_setup.c | 30 + deps/libtommath/mp_reduce_2k_setup_l.c | 28 + deps/libtommath/mp_reduce_is_2k.c | 34 + deps/libtommath/mp_reduce_is_2k_l.c | 27 + deps/libtommath/mp_reduce_setup.c | 17 + deps/libtommath/mp_root_n.c | 141 + deps/libtommath/mp_rshd.c | 43 + deps/libtommath/mp_sbin_size.c | 11 + deps/libtommath/mp_set.c | 15 + deps/libtommath/mp_set_double.c | 47 + deps/libtommath/mp_set_i32.c | 7 + deps/libtommath/mp_set_i64.c | 7 + deps/libtommath/mp_set_l.c | 7 + deps/libtommath/mp_set_u32.c | 7 + deps/libtommath/mp_set_u64.c | 7 + deps/libtommath/mp_set_ul.c | 7 + deps/libtommath/mp_shrink.c | 22 + deps/libtommath/mp_signed_rsh.c | 21 + deps/libtommath/mp_sqrmod.c | 15 + deps/libtommath/mp_sqrt.c | 67 + deps/libtommath/mp_sqrtmod_prime.c | 133 + deps/libtommath/mp_sub.c | 36 + deps/libtommath/mp_sub_d.c | 78 + deps/libtommath/mp_submod.c | 15 + deps/libtommath/mp_to_radix.c | 95 + deps/libtommath/mp_to_sbin.c | 22 + deps/libtommath/mp_to_ubin.c | 37 + deps/libtommath/mp_ubin_size.c | 12 + deps/libtommath/mp_unpack.c | 49 + deps/libtommath/mp_xor.c | 54 + deps/libtommath/mp_zero.c | 13 + deps/libtommath/s_mp_add.c | 70 + deps/libtommath/s_mp_copy_digs.c | 23 + deps/libtommath/s_mp_div_3.c | 64 + deps/libtommath/s_mp_div_recursive.c | 159 + deps/libtommath/s_mp_div_school.c | 159 + deps/libtommath/s_mp_div_small.c | 51 + deps/libtommath/s_mp_exptmod.c | 198 + deps/libtommath/s_mp_exptmod_fast.c | 254 + deps/libtommath/s_mp_fp_log.c | 83 + deps/libtommath/s_mp_fp_log_d.c | 83 + deps/libtommath/s_mp_get_bit.c | 21 + deps/libtommath/s_mp_invmod.c | 117 + deps/libtommath/s_mp_invmod_odd.c | 113 + deps/libtommath/s_mp_log_2expt.c | 12 + .../libtommath/s_mp_montgomery_reduce_comba.c | 119 + deps/libtommath/s_mp_mul.c | 61 + deps/libtommath/s_mp_mul_balance.c | 71 + deps/libtommath/s_mp_mul_comba.c | 78 + deps/libtommath/s_mp_mul_high.c | 52 + deps/libtommath/s_mp_mul_high_comba.c | 70 + deps/libtommath/s_mp_mul_karatsuba.c | 151 + deps/libtommath/s_mp_mul_toom.c | 202 + deps/libtommath/s_mp_prime_is_divisible.c | 33 + deps/libtommath/s_mp_prime_tab.c | 44 + deps/libtommath/s_mp_radix_map.c | 19 + .../libtommath/s_mp_radix_size_overestimate.c | 82 + deps/libtommath/s_mp_rand_platform.c | 149 + deps/libtommath/s_mp_sqr.c | 78 + deps/libtommath/s_mp_sqr_comba.c | 87 + deps/libtommath/s_mp_sqr_karatsuba.c | 92 + deps/libtommath/s_mp_sqr_toom.c | 133 + deps/libtommath/s_mp_sub.c | 56 + deps/libtommath/s_mp_zero_buf.c | 22 + deps/libtommath/s_mp_zero_digs.c | 23 + deps/libtommath/sources.cmake | 170 + deps/libtommath/testme.sh | 445 + deps/libtommath/tommath.def | 133 + deps/libtommath/tommath.h | 600 + deps/libtommath/tommath_c89.h | 41 + deps/libtommath/tommath_class.h | 1298 +++ deps/libtommath/tommath_cutoffs.h | 13 + deps/libtommath/tommath_private.h | 300 + deps/libtommath/tommath_superclass.h | 113 + deps/rapidjson | 1 - deps/rapidjson/.gitattributes | 22 + deps/rapidjson/.gitignore | 29 + deps/rapidjson/.gitmodules | 3 + deps/rapidjson/.travis.yml | 166 + deps/rapidjson/CHANGELOG.md | 158 + deps/rapidjson/CMakeLists.txt | 260 + .../rapidjson/CMakeModules/FindGTestSrc.cmake | 30 + deps/rapidjson/RapidJSON.pc.in | 7 + deps/rapidjson/RapidJSONConfig.cmake.in | 19 + .../rapidjson/RapidJSONConfigVersion.cmake.in | 10 + deps/rapidjson/appveyor.yml | 102 + deps/rapidjson/bin/data/abcde.txt | 1 + deps/rapidjson/bin/data/glossary.json | Bin 0 -> 603 bytes deps/rapidjson/bin/data/menu.json | Bin 0 -> 898 bytes deps/rapidjson/bin/data/readme.txt | 1 + deps/rapidjson/bin/data/sample.json | Bin 0 -> 687491 bytes deps/rapidjson/bin/data/webapp.json | Bin 0 -> 3554 bytes deps/rapidjson/bin/data/widget.json | Bin 0 -> 626 bytes deps/rapidjson/bin/encodings/utf16be.json | Bin 0 -> 368 bytes deps/rapidjson/bin/encodings/utf16bebom.json | Bin 0 -> 370 bytes deps/rapidjson/bin/encodings/utf16le.json | Bin 0 -> 368 bytes deps/rapidjson/bin/encodings/utf16lebom.json | Bin 0 -> 370 bytes deps/rapidjson/bin/encodings/utf32be.json | Bin 0 -> 736 bytes deps/rapidjson/bin/encodings/utf32bebom.json | Bin 0 -> 740 bytes deps/rapidjson/bin/encodings/utf32le.json | Bin 0 -> 736 bytes deps/rapidjson/bin/encodings/utf32lebom.json | Bin 0 -> 740 bytes deps/rapidjson/bin/encodings/utf8.json | Bin 0 -> 322 bytes deps/rapidjson/bin/encodings/utf8bom.json | Bin 0 -> 325 bytes deps/rapidjson/bin/jsonchecker/fail1.json | Bin 0 -> 60 bytes deps/rapidjson/bin/jsonchecker/fail10.json | Bin 0 -> 58 bytes deps/rapidjson/bin/jsonchecker/fail11.json | Bin 0 -> 29 bytes deps/rapidjson/bin/jsonchecker/fail12.json | Bin 0 -> 31 bytes deps/rapidjson/bin/jsonchecker/fail13.json | Bin 0 -> 43 bytes deps/rapidjson/bin/jsonchecker/fail14.json | Bin 0 -> 31 bytes deps/rapidjson/bin/jsonchecker/fail15.json | Bin 0 -> 34 bytes deps/rapidjson/bin/jsonchecker/fail16.json | Bin 0 -> 8 bytes deps/rapidjson/bin/jsonchecker/fail17.json | Bin 0 -> 34 bytes deps/rapidjson/bin/jsonchecker/fail18.json | Bin 0 -> 50 bytes deps/rapidjson/bin/jsonchecker/fail19.json | Bin 0 -> 22 bytes deps/rapidjson/bin/jsonchecker/fail2.json | Bin 0 -> 17 bytes deps/rapidjson/bin/jsonchecker/fail20.json | Bin 0 -> 23 bytes deps/rapidjson/bin/jsonchecker/fail21.json | Bin 0 -> 32 bytes deps/rapidjson/bin/jsonchecker/fail22.json | Bin 0 -> 33 bytes deps/rapidjson/bin/jsonchecker/fail23.json | Bin 0 -> 20 bytes deps/rapidjson/bin/jsonchecker/fail24.json | Bin 0 -> 16 bytes deps/rapidjson/bin/jsonchecker/fail25.json | Bin 0 -> 29 bytes deps/rapidjson/bin/jsonchecker/fail26.json | Bin 0 -> 38 bytes deps/rapidjson/bin/jsonchecker/fail27.json | Bin 0 -> 14 bytes deps/rapidjson/bin/jsonchecker/fail28.json | Bin 0 -> 15 bytes deps/rapidjson/bin/jsonchecker/fail29.json | Bin 0 -> 4 bytes deps/rapidjson/bin/jsonchecker/fail3.json | Bin 0 -> 37 bytes deps/rapidjson/bin/jsonchecker/fail30.json | Bin 0 -> 5 bytes deps/rapidjson/bin/jsonchecker/fail31.json | Bin 0 -> 7 bytes deps/rapidjson/bin/jsonchecker/fail32.json | Bin 0 -> 40 bytes deps/rapidjson/bin/jsonchecker/fail33.json | Bin 0 -> 12 bytes deps/rapidjson/bin/jsonchecker/fail4.json | Bin 0 -> 16 bytes deps/rapidjson/bin/jsonchecker/fail5.json | Bin 0 -> 24 bytes deps/rapidjson/bin/jsonchecker/fail6.json | Bin 0 -> 26 bytes deps/rapidjson/bin/jsonchecker/fail7.json | Bin 0 -> 26 bytes deps/rapidjson/bin/jsonchecker/fail8.json | Bin 0 -> 16 bytes deps/rapidjson/bin/jsonchecker/fail9.json | Bin 0 -> 22 bytes deps/rapidjson/bin/jsonchecker/pass1.json | Bin 0 -> 1441 bytes deps/rapidjson/bin/jsonchecker/pass2.json | Bin 0 -> 52 bytes deps/rapidjson/bin/jsonchecker/pass3.json | Bin 0 -> 148 bytes deps/rapidjson/bin/jsonchecker/readme.txt | 3 + deps/rapidjson/bin/types/alotofkeys.json | Bin 0 -> 30003 bytes deps/rapidjson/bin/types/booleans.json | Bin 0 -> 849 bytes deps/rapidjson/bin/types/floats.json | Bin 0 -> 1698 bytes deps/rapidjson/bin/types/guids.json | Bin 0 -> 4202 bytes deps/rapidjson/bin/types/integers.json | Bin 0 -> 1098 bytes deps/rapidjson/bin/types/mixed.json | Bin 0 -> 15142 bytes deps/rapidjson/bin/types/nulls.json | Bin 0 -> 802 bytes deps/rapidjson/bin/types/paragraphs.json | Bin 0 -> 33764 bytes deps/rapidjson/bin/types/readme.txt | 1 + .../rapidjson/bin/unittestschema/address.json | Bin 0 -> 3150 bytes .../bin/unittestschema/allOf_address.json | Bin 0 -> 84 bytes .../bin/unittestschema/anyOf_address.json | Bin 0 -> 84 bytes .../bin/unittestschema/idandref.json | Bin 0 -> 1315 bytes .../bin/unittestschema/oneOf_address.json | Bin 0 -> 84 bytes deps/rapidjson/contrib/natvis/LICENSE | 45 + deps/rapidjson/contrib/natvis/README.md | 7 + .../rapidjson/contrib/natvis/rapidjson.natvis | 38 + deps/rapidjson/doc/CMakeLists.txt | 27 + deps/rapidjson/doc/Doxyfile.in | 2369 ++++ deps/rapidjson/doc/Doxyfile.zh-cn.in | 2369 ++++ deps/rapidjson/doc/diagram/architecture.dot | 50 + deps/rapidjson/doc/diagram/architecture.png | Bin 0 -> 16569 bytes deps/rapidjson/doc/diagram/insituparsing.dot | 65 + deps/rapidjson/doc/diagram/insituparsing.png | Bin 0 -> 37281 bytes .../iterative-parser-states-diagram.dot | 62 + .../iterative-parser-states-diagram.png | Bin 0 -> 92378 bytes deps/rapidjson/doc/diagram/move1.dot | 47 + deps/rapidjson/doc/diagram/move1.png | Bin 0 -> 16081 bytes deps/rapidjson/doc/diagram/move2.dot | 62 + deps/rapidjson/doc/diagram/move2.png | Bin 0 -> 41517 bytes deps/rapidjson/doc/diagram/move3.dot | 60 + deps/rapidjson/doc/diagram/move3.png | Bin 0 -> 36371 bytes deps/rapidjson/doc/diagram/normalparsing.dot | 56 + deps/rapidjson/doc/diagram/normalparsing.png | Bin 0 -> 32887 bytes deps/rapidjson/doc/diagram/simpledom.dot | 54 + deps/rapidjson/doc/diagram/simpledom.png | Bin 0 -> 43670 bytes deps/rapidjson/doc/diagram/tutorial.dot | 58 + deps/rapidjson/doc/diagram/tutorial.png | Bin 0 -> 44634 bytes deps/rapidjson/doc/diagram/utilityclass.dot | 73 + deps/rapidjson/doc/diagram/utilityclass.png | Bin 0 -> 99993 bytes deps/rapidjson/doc/dom.md | 281 + deps/rapidjson/doc/dom.zh-cn.md | 285 + deps/rapidjson/doc/encoding.md | 146 + deps/rapidjson/doc/encoding.zh-cn.md | 152 + deps/rapidjson/doc/faq.md | 289 + deps/rapidjson/doc/faq.zh-cn.md | 290 + deps/rapidjson/doc/features.md | 106 + deps/rapidjson/doc/features.zh-cn.md | 103 + deps/rapidjson/doc/internals.md | 368 + deps/rapidjson/doc/internals.zh-cn.md | 363 + deps/rapidjson/doc/logo/rapidjson.png | Bin 0 -> 5259 bytes deps/rapidjson/doc/logo/rapidjson.svg | 119 + deps/rapidjson/doc/misc/DoxygenLayout.xml | 194 + deps/rapidjson/doc/misc/doxygenextra.css | 274 + deps/rapidjson/doc/misc/footer.html | 11 + deps/rapidjson/doc/misc/header.html | 24 + deps/rapidjson/doc/npm.md | 31 + deps/rapidjson/doc/performance.md | 26 + deps/rapidjson/doc/performance.zh-cn.md | 26 + deps/rapidjson/doc/pointer.md | 234 + deps/rapidjson/doc/pointer.zh-cn.md | 234 + deps/rapidjson/doc/sax.md | 509 + deps/rapidjson/doc/sax.zh-cn.md | 487 + deps/rapidjson/doc/schema.md | 513 + deps/rapidjson/doc/schema.zh-cn.md | 237 + deps/rapidjson/doc/stream.md | 429 + deps/rapidjson/doc/stream.zh-cn.md | 429 + deps/rapidjson/doc/tutorial.md | 536 + deps/rapidjson/doc/tutorial.zh-cn.md | 535 + deps/rapidjson/docker/debian/Dockerfile | 8 + deps/rapidjson/example/CMakeLists.txt | 46 + deps/rapidjson/example/archiver/archiver.cpp | 292 + deps/rapidjson/example/archiver/archiver.h | 145 + .../example/archiver/archivertest.cpp | 287 + .../example/capitalize/capitalize.cpp | 67 + deps/rapidjson/example/condense/condense.cpp | 32 + .../rapidjson/example/filterkey/filterkey.cpp | 135 + .../example/filterkeydom/filterkeydom.cpp | 170 + deps/rapidjson/example/jsonx/jsonx.cpp | 207 + .../lookaheadparser/lookaheadparser.cpp | 350 + .../example/messagereader/messagereader.cpp | 105 + .../example/parsebyparts/parsebyparts.cpp | 176 + deps/rapidjson/example/pretty/pretty.cpp | 30 + .../example/prettyauto/prettyauto.cpp | 56 + .../schemavalidator/schemavalidator.cpp | 199 + .../rapidjson/example/serialize/serialize.cpp | 173 + .../rapidjson/example/simpledom/simpledom.cpp | 29 + .../simplepullreader/simplepullreader.cpp | 53 + .../example/simplereader/simplereader.cpp | 42 + .../example/simplewriter/simplewriter.cpp | 36 + deps/rapidjson/example/sortkeys/sortkeys.cpp | 62 + deps/rapidjson/example/traverseaspointer.cpp | 39 + deps/rapidjson/example/tutorial/tutorial.cpp | 151 + deps/rapidjson/include/rapidjson/allocators.h | 693 ++ .../include/rapidjson/cursorstreamwrapper.h | 78 + deps/rapidjson/include/rapidjson/document.h | 3043 ++++++ .../include/rapidjson/encodedstream.h | 299 + deps/rapidjson/include/rapidjson/encodings.h | 716 ++ deps/rapidjson/include/rapidjson/error/en.h | 176 + .../rapidjson/include/rapidjson/error/error.h | 285 + .../include/rapidjson/filereadstream.h | 99 + .../include/rapidjson/filewritestream.h | 104 + deps/rapidjson/include/rapidjson/fwd.h | 151 + .../include/rapidjson/internal/biginteger.h | 297 + .../include/rapidjson/internal/clzll.h | 71 + .../include/rapidjson/internal/diyfp.h | 261 + .../include/rapidjson/internal/dtoa.h | 249 + .../include/rapidjson/internal/ieee754.h | 78 + .../include/rapidjson/internal/itoa.h | 308 + .../include/rapidjson/internal/meta.h | 186 + .../include/rapidjson/internal/pow10.h | 55 + .../include/rapidjson/internal/regex.h | 739 ++ .../include/rapidjson/internal/stack.h | 232 + .../include/rapidjson/internal/strfunc.h | 83 + .../include/rapidjson/internal/strtod.h | 293 + .../include/rapidjson/internal/swap.h | 46 + .../include/rapidjson/istreamwrapper.h | 128 + .../include/rapidjson/memorybuffer.h | 70 + .../include/rapidjson/memorystream.h | 71 + .../include/rapidjson/msinttypes/inttypes.h | 316 + .../include/rapidjson/msinttypes/stdint.h | 300 + .../include/rapidjson/ostreamwrapper.h | 81 + deps/rapidjson/include/rapidjson/pointer.h | 1476 +++ .../include/rapidjson/prettywriter.h | 277 + deps/rapidjson/include/rapidjson/rapidjson.h | 741 ++ deps/rapidjson/include/rapidjson/reader.h | 2246 ++++ deps/rapidjson/include/rapidjson/schema.h | 3262 ++++++ deps/rapidjson/include/rapidjson/stream.h | 223 + .../include/rapidjson/stringbuffer.h | 121 + deps/rapidjson/include/rapidjson/uri.h | 481 + deps/rapidjson/include/rapidjson/writer.h | 721 ++ deps/rapidjson/include_dirs.js | 2 + deps/rapidjson/library.json | Bin 0 -> 355 bytes deps/rapidjson/license.txt | 57 + deps/rapidjson/package.json | Bin 0 -> 561 bytes deps/rapidjson/rapidjson.autopkg | 77 + deps/rapidjson/readme.md | 210 + deps/rapidjson/readme.zh-cn.md | 152 + deps/rapidjson/test/CMakeLists.txt | 20 + deps/rapidjson/test/perftest/CMakeLists.txt | 28 + deps/rapidjson/test/perftest/misctest.cpp | 974 ++ deps/rapidjson/test/perftest/perftest.cpp | 24 + deps/rapidjson/test/perftest/perftest.h | 186 + deps/rapidjson/test/perftest/platformtest.cpp | 166 + .../rapidjson/test/perftest/rapidjsontest.cpp | 564 + deps/rapidjson/test/perftest/schematest.cpp | 223 + deps/rapidjson/test/unittest/CMakeLists.txt | 95 + .../test/unittest/allocatorstest.cpp | 292 + .../test/unittest/bigintegertest.cpp | 138 + deps/rapidjson/test/unittest/clzlltest.cpp | 34 + .../test/unittest/cursorstreamwrappertest.cpp | 115 + deps/rapidjson/test/unittest/documenttest.cpp | 674 ++ deps/rapidjson/test/unittest/dtoatest.cpp | 99 + .../test/unittest/encodedstreamtest.cpp | 313 + .../rapidjson/test/unittest/encodingstest.cpp | 451 + .../test/unittest/filestreamtest.cpp | 155 + deps/rapidjson/test/unittest/fwdtest.cpp | 230 + .../test/unittest/istreamwrappertest.cpp | 181 + deps/rapidjson/test/unittest/itoatest.cpp | 160 + .../test/unittest/jsoncheckertest.cpp | 143 + .../rapidjson/test/unittest/namespacetest.cpp | 70 + .../test/unittest/ostreamwrappertest.cpp | 92 + deps/rapidjson/test/unittest/platformtest.cpp | 40 + deps/rapidjson/test/unittest/pointertest.cpp | 1730 +++ .../test/unittest/prettywritertest.cpp | 373 + deps/rapidjson/test/unittest/readertest.cpp | 2370 ++++ deps/rapidjson/test/unittest/regextest.cpp | 639 ++ deps/rapidjson/test/unittest/schematest.cpp | 3578 ++++++ deps/rapidjson/test/unittest/simdtest.cpp | 219 + deps/rapidjson/test/unittest/strfunctest.cpp | 30 + .../test/unittest/stringbuffertest.cpp | 192 + deps/rapidjson/test/unittest/strtodtest.cpp | 132 + deps/rapidjson/test/unittest/unittest.cpp | 51 + deps/rapidjson/test/unittest/unittest.h | 143 + deps/rapidjson/test/unittest/uritest.cpp | 725 ++ deps/rapidjson/test/unittest/valuetest.cpp | 1862 ++++ deps/rapidjson/test/unittest/writertest.cpp | 628 ++ deps/rapidjson/test/valgrind.supp | 26 + deps/rapidjson/thirdparty/gtest/.gitignore | 40 + deps/rapidjson/thirdparty/gtest/.travis.yml | 81 + deps/rapidjson/thirdparty/gtest/BUILD.bazel | 175 + .../rapidjson/thirdparty/gtest/CMakeLists.txt | 33 + .../thirdparty/gtest/CONTRIBUTING.md | 160 + deps/rapidjson/thirdparty/gtest/LICENSE | 28 + deps/rapidjson/thirdparty/gtest/Makefile.am | 14 + deps/rapidjson/thirdparty/gtest/README.md | 122 + deps/rapidjson/thirdparty/gtest/WORKSPACE | 8 + deps/rapidjson/thirdparty/gtest/appveyor.yml | 104 + .../gtest/ci/build-linux-autotools.sh | 44 + .../thirdparty/gtest/ci/build-linux-bazel.sh | 36 + .../thirdparty/gtest/ci/env-linux.sh | 41 + deps/rapidjson/thirdparty/gtest/ci/env-osx.sh | 40 + .../thirdparty/gtest/ci/get-nprocessors.sh | 48 + .../thirdparty/gtest/ci/install-linux.sh | 49 + .../thirdparty/gtest/ci/install-osx.sh | 39 + .../thirdparty/gtest/ci/log-config.sh | 51 + deps/rapidjson/thirdparty/gtest/ci/travis.sh | 44 + deps/rapidjson/thirdparty/gtest/configure.ac | 16 + .../thirdparty/gtest/googlemock/CHANGES | 126 + .../gtest/googlemock/CMakeLists.txt | 242 + .../thirdparty/gtest/googlemock/CONTRIBUTORS | 40 + .../thirdparty/gtest/googlemock/LICENSE | 28 + .../thirdparty/gtest/googlemock/Makefile.am | 224 + .../thirdparty/gtest/googlemock/README.md | 344 + .../gtest/googlemock/cmake/gmock.pc.in | 9 + .../gtest/googlemock/cmake/gmock_main.pc.in | 9 + .../thirdparty/gtest/googlemock/configure.ac | 146 + .../gtest/googlemock/docs/CheatSheet.md | 564 + .../gtest/googlemock/docs/CookBook.md | 3660 +++++++ .../gtest/googlemock/docs/DesignDoc.md | 280 + .../gtest/googlemock/docs/Documentation.md | 15 + .../gtest/googlemock/docs/ForDummies.md | 447 + .../docs/FrequentlyAskedQuestions.md | 627 ++ .../gtest/googlemock/docs/KnownIssues.md | 19 + .../googlemock/include/gmock/gmock-actions.h | 1262 +++ .../include/gmock/gmock-cardinalities.h | 147 + .../include/gmock/gmock-generated-actions.h | 2571 +++++ .../gmock/gmock-generated-actions.h.pump | 833 ++ .../gmock/gmock-generated-function-mockers.h | 1379 +++ .../gmock-generated-function-mockers.h.pump | 347 + .../include/gmock/gmock-generated-matchers.h | 2258 ++++ .../gmock/gmock-generated-matchers.h.pump | 675 ++ .../gmock/gmock-generated-nice-strict.h | 458 + .../gmock/gmock-generated-nice-strict.h.pump | 178 + .../googlemock/include/gmock/gmock-matchers.h | 5255 +++++++++ .../include/gmock/gmock-more-actions.h | 246 + .../include/gmock/gmock-more-matchers.h | 91 + .../include/gmock/gmock-spec-builders.h | 1918 ++++ .../gtest/googlemock/include/gmock/gmock.h | 95 + .../internal/custom/gmock-generated-actions.h | 8 + .../custom/gmock-generated-actions.h.pump | 10 + .../gmock/internal/custom/gmock-matchers.h | 38 + .../gmock/internal/custom/gmock-port.h | 46 + .../internal/gmock-generated-internal-utils.h | 286 + .../gmock-generated-internal-utils.h.pump | 136 + .../gmock/internal/gmock-internal-utils.h | 574 + .../include/gmock/internal/gmock-port.h | 87 + .../gtest/googlemock/msvc/2005/gmock.sln | 32 + .../gtest/googlemock/msvc/2005/gmock.vcproj | 191 + .../googlemock/msvc/2005/gmock_config.vsprops | 15 + .../googlemock/msvc/2005/gmock_main.vcproj | 187 + .../googlemock/msvc/2005/gmock_test.vcproj | 201 + .../gtest/googlemock/msvc/2010/gmock.sln | 46 + .../gtest/googlemock/msvc/2010/gmock.vcxproj | 145 + .../googlemock/msvc/2010/gmock_config.props | 19 + .../googlemock/msvc/2010/gmock_main.vcxproj | 151 + .../googlemock/msvc/2010/gmock_test.vcxproj | 176 + .../gtest/googlemock/msvc/2015/gmock.sln | 46 + .../gtest/googlemock/msvc/2015/gmock.vcxproj | 145 + .../googlemock/msvc/2015/gmock_config.props | 19 + .../googlemock/msvc/2015/gmock_main.vcxproj | 151 + .../googlemock/msvc/2015/gmock_test.vcxproj | 176 + .../googlemock/scripts/fuse_gmock_files.py | 240 + .../googlemock/scripts/generator/LICENSE | 203 + .../gtest/googlemock/scripts/generator/README | 34 + .../scripts/generator/README.cppclean | 115 + .../scripts/generator/cpp/__init__.py | 0 .../googlemock/scripts/generator/cpp/ast.py | 1733 +++ .../scripts/generator/cpp/gmock_class.py | 227 + .../scripts/generator/cpp/gmock_class_test.py | 448 + .../scripts/generator/cpp/keywords.py | 59 + .../scripts/generator/cpp/tokenize.py | 287 + .../googlemock/scripts/generator/cpp/utils.py | 41 + .../googlemock/scripts/generator/gmock_gen.py | 31 + .../gtest/googlemock/scripts/gmock-config.in | 303 + .../gtest/googlemock/scripts/gmock_doctor.py | 640 ++ .../gtest/googlemock/scripts/upload.py | 1387 +++ .../gtest/googlemock/scripts/upload_gmock.py | 78 + .../gtest/googlemock/src/gmock-all.cc | 47 + .../googlemock/src/gmock-cardinalities.cc | 156 + .../googlemock/src/gmock-internal-utils.cc | 204 + .../gtest/googlemock/src/gmock-matchers.cc | 573 + .../googlemock/src/gmock-spec-builders.cc | 883 ++ .../thirdparty/gtest/googlemock/src/gmock.cc | 205 + .../gtest/googlemock/src/gmock_main.cc | 54 + .../gtest/googlemock/test/BUILD.bazel | 123 + .../googlemock/test/gmock-actions_test.cc | 1575 +++ .../test/gmock-cardinalities_test.cc | 428 + .../test/gmock-generated-actions_test.cc | 1230 +++ .../gmock-generated-function-mockers_test.cc | 647 ++ .../gmock-generated-internal-utils_test.cc | 129 + .../test/gmock-generated-matchers_test.cc | 1341 +++ .../test/gmock-internal-utils_test.cc | 718 ++ .../googlemock/test/gmock-matchers_test.cc | 6767 ++++++++++++ .../test/gmock-more-actions_test.cc | 710 ++ .../googlemock/test/gmock-nice-strict_test.cc | 511 + .../gtest/googlemock/test/gmock-port_test.cc | 43 + .../test/gmock-spec-builders_test.cc | 2771 +++++ .../gtest/googlemock/test/gmock_all_test.cc | 51 + .../gtest/googlemock/test/gmock_ex_test.cc | 81 + .../gtest/googlemock/test/gmock_leak_test.py | 108 + .../gtest/googlemock/test/gmock_leak_test_.cc | 100 + .../gtest/googlemock/test/gmock_link2_test.cc | 40 + .../gtest/googlemock/test/gmock_link_test.cc | 40 + .../gtest/googlemock/test/gmock_link_test.h | 691 ++ .../googlemock/test/gmock_output_test.py | 183 + .../googlemock/test/gmock_output_test_.cc | 310 + .../test/gmock_output_test_golden.txt | 317 + .../googlemock/test/gmock_stress_test.cc | 323 + .../gtest/googlemock/test/gmock_test.cc | 262 + .../gtest/googlemock/test/gmock_test_utils.py | 110 + .../thirdparty/gtest/googletest/CHANGES | 157 + .../gtest/googletest/CMakeLists.txt | 312 + .../thirdparty/gtest/googletest/CONTRIBUTORS | 37 + .../thirdparty/gtest/googletest/LICENSE | 28 + .../thirdparty/gtest/googletest/Makefile.am | 339 + .../thirdparty/gtest/googletest/README.md | 341 + .../gtest/googletest/cmake/gtest.pc.in | 9 + .../gtest/googletest/cmake/gtest_main.pc.in | 10 + .../googletest/cmake/internal_utils.cmake | 280 + .../gtest/googletest/codegear/gtest.cbproj | 138 + .../gtest/googletest/codegear/gtest.groupproj | 54 + .../gtest/googletest/codegear/gtest_all.cc | 38 + .../gtest/googletest/codegear/gtest_link.cc | 40 + .../googletest/codegear/gtest_main.cbproj | 82 + .../googletest/codegear/gtest_unittest.cbproj | 88 + .../thirdparty/gtest/googletest/configure.ac | 68 + .../gtest/googletest/docs/Pkgconfig.md | 146 + .../gtest/googletest/docs/PumpManual.md | 177 + .../gtest/googletest/docs/XcodeGuide.md | 93 + .../gtest/googletest/docs/advanced.md | 2416 ++++ .../thirdparty/gtest/googletest/docs/faq.md | 1092 ++ .../gtest/googletest/docs/primer.md | 536 + .../gtest/googletest/docs/samples.md | 14 + .../include/gtest/gtest-death-test.h | 342 + .../googletest/include/gtest/gtest-message.h | 249 + .../include/gtest/gtest-param-test.h | 1438 +++ .../include/gtest/gtest-param-test.h.pump | 501 + .../googletest/include/gtest/gtest-printers.h | 1082 ++ .../googletest/include/gtest/gtest-spi.h | 231 + .../include/gtest/gtest-test-part.h | 179 + .../include/gtest/gtest-typed-test.h | 264 + .../gtest/googletest/include/gtest/gtest.h | 2332 ++++ .../include/gtest/gtest_pred_impl.h | 357 + .../googletest/include/gtest/gtest_prod.h | 61 + .../gtest/internal/custom/gtest-port.h | 70 + .../gtest/internal/custom/gtest-printers.h | 42 + .../include/gtest/internal/custom/gtest.h | 45 + .../internal/gtest-death-test-internal.h | 275 + .../include/gtest/internal/gtest-filepath.h | 205 + .../include/gtest/internal/gtest-internal.h | 1277 +++ .../include/gtest/internal/gtest-linked_ptr.h | 243 + .../internal/gtest-param-util-generated.h | 5139 +++++++++ .../gtest-param-util-generated.h.pump | 279 + .../include/gtest/internal/gtest-param-util.h | 723 ++ .../include/gtest/internal/gtest-port-arch.h | 100 + .../include/gtest/internal/gtest-port.h | 2687 +++++ .../include/gtest/internal/gtest-string.h | 167 + .../include/gtest/internal/gtest-tuple.h | 1020 ++ .../include/gtest/internal/gtest-tuple.h.pump | 347 + .../include/gtest/internal/gtest-type-util.h | 3347 ++++++ .../gtest/internal/gtest-type-util.h.pump | 313 + .../gtest/googletest/m4/acx_pthread.m4 | 363 + .../thirdparty/gtest/googletest/m4/gtest.m4 | 74 + .../gtest/googletest/msvc/2010/gtest-md.sln | 55 + .../googletest/msvc/2010/gtest-md.vcxproj | 149 + .../msvc/2010/gtest-md.vcxproj.filters | 18 + .../gtest/googletest/msvc/2010/gtest.sln | 55 + .../gtest/googletest/msvc/2010/gtest.vcxproj | 149 + .../msvc/2010/gtest.vcxproj.filters | 18 + .../msvc/2010/gtest_main-md.vcxproj | 154 + .../msvc/2010/gtest_main-md.vcxproj.filters | 18 + .../googletest/msvc/2010/gtest_main.vcxproj | 162 + .../msvc/2010/gtest_main.vcxproj.filters | 18 + .../msvc/2010/gtest_prod_test-md.vcxproj | 199 + .../2010/gtest_prod_test-md.vcxproj.filters | 26 + .../msvc/2010/gtest_prod_test.vcxproj | 191 + .../msvc/2010/gtest_prod_test.vcxproj.filters | 26 + .../msvc/2010/gtest_unittest-md.vcxproj | 188 + .../2010/gtest_unittest-md.vcxproj.filters | 18 + .../msvc/2010/gtest_unittest.vcxproj | 180 + .../msvc/2010/gtest_unittest.vcxproj.filters | 18 + .../gtest/googletest/samples/prime_tables.h | 127 + .../gtest/googletest/samples/sample1.cc | 68 + .../gtest/googletest/samples/sample1.h | 43 + .../googletest/samples/sample10_unittest.cc | 140 + .../googletest/samples/sample1_unittest.cc | 154 + .../gtest/googletest/samples/sample2.cc | 56 + .../gtest/googletest/samples/sample2.h | 85 + .../googletest/samples/sample2_unittest.cc | 110 + .../gtest/googletest/samples/sample3-inl.h | 172 + .../googletest/samples/sample3_unittest.cc | 152 + .../gtest/googletest/samples/sample4.cc | 46 + .../gtest/googletest/samples/sample4.h | 53 + .../googletest/samples/sample4_unittest.cc | 49 + .../googletest/samples/sample5_unittest.cc | 199 + .../googletest/samples/sample6_unittest.cc | 225 + .../googletest/samples/sample7_unittest.cc | 118 + .../googletest/samples/sample8_unittest.cc | 174 + .../googletest/samples/sample9_unittest.cc | 157 + .../gtest/googletest/scripts/common.py | 83 + .../googletest/scripts/fuse_gtest_files.py | 253 + .../googletest/scripts/gen_gtest_pred_impl.py | 730 ++ .../gtest/googletest/scripts/gtest-config.in | 274 + .../gtest/googletest/scripts/pump.py | 855 ++ .../gtest/googletest/scripts/release_docs.py | 158 + .../gtest/googletest/scripts/upload.py | 1387 +++ .../gtest/googletest/scripts/upload_gtest.py | 78 + .../gtest/googletest/src/gtest-all.cc | 48 + .../gtest/googletest/src/gtest-death-test.cc | 1536 +++ .../gtest/googletest/src/gtest-filepath.cc | 385 + .../gtest/googletest/src/gtest-internal-inl.h | 1175 ++ .../gtest/googletest/src/gtest-port.cc | 1277 +++ .../gtest/googletest/src/gtest-printers.cc | 458 + .../gtest/googletest/src/gtest-test-part.cc | 102 + .../gtest/googletest/src/gtest-typed-test.cc | 119 + .../thirdparty/gtest/googletest/src/gtest.cc | 5846 ++++++++++ .../gtest/googletest/src/gtest_main.cc | 38 + .../gtest/googletest/test/BUILD.bazel | 396 + .../test/gtest-death-test_ex_test.cc | 93 + .../googletest/test/gtest-death-test_test.cc | 1424 +++ .../googletest/test/gtest-filepath_test.cc | 652 ++ .../googletest/test/gtest-linked_ptr_test.cc | 154 + .../googletest/test/gtest-listener_test.cc | 311 + .../googletest/test/gtest-message_test.cc | 159 + .../googletest/test/gtest-options_test.cc | 213 + .../googletest/test/gtest-param-test2_test.cc | 61 + .../googletest/test/gtest-param-test_test.cc | 1110 ++ .../googletest/test/gtest-param-test_test.h | 53 + .../gtest/googletest/test/gtest-port_test.cc | 1303 +++ .../googletest/test/gtest-printers_test.cc | 1737 +++ .../googletest/test/gtest-test-part_test.cc | 208 + .../gtest/googletest/test/gtest-tuple_test.cc | 320 + .../googletest/test/gtest-typed-test2_test.cc | 45 + .../googletest/test/gtest-typed-test_test.cc | 380 + .../googletest/test/gtest-typed-test_test.h | 66 + .../test/gtest-unittest-api_test.cc | 341 + .../gtest/googletest/test/gtest_all_test.cc | 47 + .../test/gtest_assert_by_exception_test.cc | 119 + .../test/gtest_break_on_failure_unittest.py | 210 + .../test/gtest_break_on_failure_unittest_.cc | 87 + .../test/gtest_catch_exceptions_test.py | 235 + .../test/gtest_catch_exceptions_test_.cc | 311 + .../gtest/googletest/test/gtest_color_test.py | 129 + .../googletest/test/gtest_color_test_.cc | 63 + .../googletest/test/gtest_env_var_test.py | 119 + .../googletest/test/gtest_env_var_test_.cc | 124 + .../googletest/test/gtest_environment_test.cc | 189 + .../googletest/test/gtest_filter_unittest.py | 638 ++ .../googletest/test/gtest_filter_unittest_.cc | 138 + .../gtest/googletest/test/gtest_help_test.py | 172 + .../gtest/googletest/test/gtest_help_test_.cc | 46 + .../test/gtest_json_outfiles_test.py | 162 + .../test/gtest_json_output_unittest.py | 611 ++ .../googletest/test/gtest_json_test_utils.py | 60 + .../test/gtest_list_tests_unittest.py | 207 + .../test/gtest_list_tests_unittest_.cc | 157 + .../googletest/test/gtest_main_unittest.cc | 45 + .../googletest/test/gtest_no_test_unittest.cc | 56 + .../googletest/test/gtest_output_test.py | 344 + .../googletest/test/gtest_output_test_.cc | 1067 ++ .../test/gtest_output_test_golden_lin.txt | 781 ++ .../test/gtest_pred_impl_unittest.cc | 2427 ++++ .../test/gtest_premature_exit_test.cc | 127 + .../gtest/googletest/test/gtest_prod_test.cc | 57 + .../googletest/test/gtest_repeat_test.cc | 236 + .../googletest/test/gtest_shuffle_test.py | 325 + .../googletest/test/gtest_shuffle_test_.cc | 103 + .../googletest/test/gtest_sole_header_test.cc | 57 + .../googletest/test/gtest_stress_test.cc | 250 + .../gtest/googletest/test/gtest_test_utils.py | 318 + .../googletest/test/gtest_testbridge_test.py | 65 + .../googletest/test/gtest_testbridge_test_.cc | 44 + .../test/gtest_throw_on_failure_ex_test.cc | 92 + .../test/gtest_throw_on_failure_test.py | 171 + .../test/gtest_throw_on_failure_test_.cc | 72 + .../test/gtest_uninitialized_test.py | 69 + .../test/gtest_uninitialized_test_.cc | 43 + .../gtest/googletest/test/gtest_unittest.cc | 7797 +++++++++++++ .../test/gtest_xml_outfile1_test_.cc | 48 + .../test/gtest_xml_outfile2_test_.cc | 48 + .../test/gtest_xml_outfiles_test.py | 140 + .../test/gtest_xml_output_unittest.py | 378 + .../test/gtest_xml_output_unittest_.cc | 179 + .../googletest/test/gtest_xml_test_utils.py | 196 + .../gtest/googletest/test/production.cc | 36 + .../gtest/googletest/test/production.h | 55 + .../xcode/Config/DebugProject.xcconfig | 30 + .../xcode/Config/FrameworkTarget.xcconfig | 17 + .../googletest/xcode/Config/General.xcconfig | 41 + .../xcode/Config/ReleaseProject.xcconfig | 32 + .../xcode/Config/StaticLibraryTarget.xcconfig | 18 + .../xcode/Config/TestTarget.xcconfig | 8 + .../googletest/xcode/Resources/Info.plist | 30 + .../xcode/Samples/FrameworkSample/Info.plist | 28 + .../WidgetFramework.xcodeproj/project.pbxproj | 457 + .../xcode/Samples/FrameworkSample/runtests.sh | 62 + .../xcode/Samples/FrameworkSample/widget.cc | 63 + .../xcode/Samples/FrameworkSample/widget.h | 59 + .../Samples/FrameworkSample/widget_test.cc | 68 + .../googletest/xcode/Scripts/runtests.sh | 65 + .../xcode/Scripts/versiongenerate.py | 100 + .../xcode/gtest.xcodeproj/project.pbxproj | 1182 ++ deps/rapidjson/travis-doxygen.sh | 128 + deps/zlib | 1 - deps/zlib/.github/workflows/cmake.yml | 89 + deps/zlib/.github/workflows/configure.yml | 136 + deps/zlib/.github/workflows/fuzz.yml | 25 + deps/zlib/.gitignore | 36 + deps/zlib/CMakeLists.txt | 213 + deps/zlib/ChangeLog | 1611 +++ deps/zlib/FAQ | 368 + deps/zlib/INDEX | 68 + deps/zlib/LICENSE | 22 + deps/zlib/Makefile | 5 + deps/zlib/Makefile.in | 410 + deps/zlib/README | 117 + deps/zlib/adler32.c | 164 + deps/zlib/amiga/Makefile.pup | 69 + deps/zlib/amiga/Makefile.sas | 68 + deps/zlib/compress.c | 75 + deps/zlib/configure | 929 ++ deps/zlib/contrib/README.contrib | 57 + deps/zlib/contrib/ada/buffer_demo.adb | 106 + deps/zlib/contrib/ada/mtest.adb | 156 + deps/zlib/contrib/ada/read.adb | 156 + deps/zlib/contrib/ada/readme.txt | 65 + deps/zlib/contrib/ada/test.adb | 463 + deps/zlib/contrib/ada/zlib-streams.adb | 225 + deps/zlib/contrib/ada/zlib-streams.ads | 114 + deps/zlib/contrib/ada/zlib-thin.adb | 141 + deps/zlib/contrib/ada/zlib-thin.ads | 450 + deps/zlib/contrib/ada/zlib.adb | 701 ++ deps/zlib/contrib/ada/zlib.ads | 328 + deps/zlib/contrib/ada/zlib.gpr | 20 + deps/zlib/contrib/blast/Makefile | 8 + deps/zlib/contrib/blast/README | 4 + deps/zlib/contrib/blast/blast.c | 466 + deps/zlib/contrib/blast/blast.h | 83 + deps/zlib/contrib/blast/test.pk | Bin 0 -> 8 bytes deps/zlib/contrib/blast/test.txt | 1 + deps/zlib/contrib/delphi/ZLib.pas | 557 + deps/zlib/contrib/delphi/ZLibConst.pas | 11 + deps/zlib/contrib/delphi/readme.txt | 76 + deps/zlib/contrib/delphi/zlibd32.mak | 99 + deps/zlib/contrib/dotzlib/DotZLib.build | 33 + deps/zlib/contrib/dotzlib/DotZLib.chm | Bin 0 -> 72726 bytes deps/zlib/contrib/dotzlib/DotZLib.sln | 21 + .../contrib/dotzlib/DotZLib/AssemblyInfo.cs | 58 + .../contrib/dotzlib/DotZLib/ChecksumImpl.cs | 202 + .../contrib/dotzlib/DotZLib/CircularBuffer.cs | 83 + .../zlib/contrib/dotzlib/DotZLib/CodecBase.cs | 198 + deps/zlib/contrib/dotzlib/DotZLib/Deflater.cs | 106 + deps/zlib/contrib/dotzlib/DotZLib/DotZLib.cs | 288 + .../contrib/dotzlib/DotZLib/DotZLib.csproj | 141 + .../contrib/dotzlib/DotZLib/GZipStream.cs | 301 + deps/zlib/contrib/dotzlib/DotZLib/Inflater.cs | 105 + .../zlib/contrib/dotzlib/DotZLib/UnitTests.cs | 274 + deps/zlib/contrib/dotzlib/LICENSE_1_0.txt | 23 + deps/zlib/contrib/dotzlib/readme.txt | 58 + deps/zlib/contrib/gcc_gvmat64/gvmat64.S | 574 + deps/zlib/contrib/infback9/README | 1 + deps/zlib/contrib/infback9/infback9.c | 603 + deps/zlib/contrib/infback9/infback9.h | 37 + deps/zlib/contrib/infback9/inffix9.h | 107 + deps/zlib/contrib/infback9/inflate9.h | 47 + deps/zlib/contrib/infback9/inftree9.c | 319 + deps/zlib/contrib/infback9/inftree9.h | 61 + deps/zlib/contrib/iostream/test.cpp | 24 + deps/zlib/contrib/iostream/zfstream.cpp | 329 + deps/zlib/contrib/iostream/zfstream.h | 128 + deps/zlib/contrib/iostream2/zstream.h | 307 + deps/zlib/contrib/iostream2/zstream_test.cpp | 25 + deps/zlib/contrib/iostream3/README | 35 + deps/zlib/contrib/iostream3/TODO | 17 + deps/zlib/contrib/iostream3/test.cc | 50 + deps/zlib/contrib/iostream3/zfstream.cc | 479 + deps/zlib/contrib/iostream3/zfstream.h | 466 + deps/zlib/contrib/minizip/Makefile | 29 + deps/zlib/contrib/minizip/Makefile.am | 45 + .../contrib/minizip/MiniZip64_Changes.txt | 6 + deps/zlib/contrib/minizip/MiniZip64_info.txt | 74 + deps/zlib/contrib/minizip/configure.ac | 32 + deps/zlib/contrib/minizip/crypt.h | 128 + deps/zlib/contrib/minizip/ioapi.c | 231 + deps/zlib/contrib/minizip/ioapi.h | 210 + deps/zlib/contrib/minizip/iowin32.c | 440 + deps/zlib/contrib/minizip/iowin32.h | 28 + deps/zlib/contrib/minizip/make_vms.com | 25 + deps/zlib/contrib/minizip/miniunz.c | 633 ++ deps/zlib/contrib/minizip/miniunzip.1 | 63 + deps/zlib/contrib/minizip/minizip.1 | 46 + deps/zlib/contrib/minizip/minizip.c | 509 + deps/zlib/contrib/minizip/minizip.pc.in | 12 + deps/zlib/contrib/minizip/mztools.c | 285 + deps/zlib/contrib/minizip/mztools.h | 37 + deps/zlib/contrib/minizip/unzip.c | 1985 ++++ deps/zlib/contrib/minizip/unzip.h | 437 + deps/zlib/contrib/minizip/zip.c | 1956 ++++ deps/zlib/contrib/minizip/zip.h | 364 + deps/zlib/contrib/nuget/nuget.csproj | 43 + deps/zlib/contrib/nuget/nuget.sln | 22 + deps/zlib/contrib/pascal/example.pas | 599 + deps/zlib/contrib/pascal/readme.txt | 76 + deps/zlib/contrib/pascal/zlibd32.mak | 99 + deps/zlib/contrib/pascal/zlibpas.pas | 276 + deps/zlib/contrib/puff/Makefile | 42 + deps/zlib/contrib/puff/README | 63 + deps/zlib/contrib/puff/puff.c | 840 ++ deps/zlib/contrib/puff/puff.h | 35 + deps/zlib/contrib/puff/pufftest.c | 165 + deps/zlib/contrib/puff/zeros.raw | Bin 0 -> 2517 bytes deps/zlib/contrib/testzlib/testzlib.c | 275 + deps/zlib/contrib/testzlib/testzlib.txt | 10 + deps/zlib/contrib/untgz/Makefile | 14 + deps/zlib/contrib/untgz/Makefile.msc | 17 + deps/zlib/contrib/untgz/untgz.c | 667 ++ deps/zlib/contrib/vstudio/readme.txt | 81 + .../zlib/contrib/vstudio/vc10/miniunz.vcxproj | 310 + .../vstudio/vc10/miniunz.vcxproj.filters | 22 + .../zlib/contrib/vstudio/vc10/minizip.vcxproj | 307 + .../vstudio/vc10/minizip.vcxproj.filters | 22 + .../contrib/vstudio/vc10/testzlib.vcxproj | 412 + .../vstudio/vc10/testzlib.vcxproj.filters | 55 + .../contrib/vstudio/vc10/testzlibdll.vcxproj | 310 + .../vstudio/vc10/testzlibdll.vcxproj.filters | 22 + deps/zlib/contrib/vstudio/vc10/zlib.rc | 32 + .../contrib/vstudio/vc10/zlibstat.vcxproj | 449 + .../vstudio/vc10/zlibstat.vcxproj.filters | 74 + deps/zlib/contrib/vstudio/vc10/zlibvc.def | 158 + deps/zlib/contrib/vstudio/vc10/zlibvc.sln | 135 + deps/zlib/contrib/vstudio/vc10/zlibvc.vcxproj | 633 ++ .../vstudio/vc10/zlibvc.vcxproj.filters | 115 + .../zlib/contrib/vstudio/vc11/miniunz.vcxproj | 314 + .../zlib/contrib/vstudio/vc11/minizip.vcxproj | 311 + .../contrib/vstudio/vc11/testzlib.vcxproj | 418 + .../contrib/vstudio/vc11/testzlibdll.vcxproj | 314 + deps/zlib/contrib/vstudio/vc11/zlib.rc | 32 + .../contrib/vstudio/vc11/zlibstat.vcxproj | 456 + deps/zlib/contrib/vstudio/vc11/zlibvc.def | 158 + deps/zlib/contrib/vstudio/vc11/zlibvc.sln | 117 + deps/zlib/contrib/vstudio/vc11/zlibvc.vcxproj | 664 ++ .../zlib/contrib/vstudio/vc12/miniunz.vcxproj | 316 + .../zlib/contrib/vstudio/vc12/minizip.vcxproj | 313 + .../contrib/vstudio/vc12/testzlib.vcxproj | 422 + .../contrib/vstudio/vc12/testzlibdll.vcxproj | 316 + deps/zlib/contrib/vstudio/vc12/zlib.rc | 32 + .../contrib/vstudio/vc12/zlibstat.vcxproj | 459 + deps/zlib/contrib/vstudio/vc12/zlibvc.def | 158 + deps/zlib/contrib/vstudio/vc12/zlibvc.sln | 119 + deps/zlib/contrib/vstudio/vc12/zlibvc.vcxproj | 668 ++ .../zlib/contrib/vstudio/vc14/miniunz.vcxproj | 316 + .../zlib/contrib/vstudio/vc14/minizip.vcxproj | 313 + .../contrib/vstudio/vc14/testzlib.vcxproj | 422 + .../contrib/vstudio/vc14/testzlibdll.vcxproj | 316 + deps/zlib/contrib/vstudio/vc14/zlib.rc | 32 + .../contrib/vstudio/vc14/zlibstat.vcxproj | 459 + deps/zlib/contrib/vstudio/vc14/zlibvc.def | 158 + deps/zlib/contrib/vstudio/vc14/zlibvc.sln | 119 + deps/zlib/contrib/vstudio/vc14/zlibvc.vcxproj | 668 ++ .../zlib/contrib/vstudio/vc17/miniunz.vcxproj | 409 + .../zlib/contrib/vstudio/vc17/minizip.vcxproj | 405 + .../contrib/vstudio/vc17/testzlib.vcxproj | 473 + .../contrib/vstudio/vc17/testzlibdll.vcxproj | 409 + deps/zlib/contrib/vstudio/vc17/zlib.rc | 32 + .../contrib/vstudio/vc17/zlibstat.vcxproj | 602 + deps/zlib/contrib/vstudio/vc17/zlibvc.def | 158 + deps/zlib/contrib/vstudio/vc17/zlibvc.sln | 179 + deps/zlib/contrib/vstudio/vc17/zlibvc.vcxproj | 875 ++ deps/zlib/contrib/vstudio/vc9/miniunz.vcproj | 565 + deps/zlib/contrib/vstudio/vc9/minizip.vcproj | 562 + deps/zlib/contrib/vstudio/vc9/testzlib.vcproj | 796 ++ .../contrib/vstudio/vc9/testzlibdll.vcproj | 565 + deps/zlib/contrib/vstudio/vc9/zlib.rc | 32 + deps/zlib/contrib/vstudio/vc9/zlibstat.vcproj | 781 ++ deps/zlib/contrib/vstudio/vc9/zlibvc.def | 158 + deps/zlib/contrib/vstudio/vc9/zlibvc.sln | 144 + deps/zlib/contrib/vstudio/vc9/zlibvc.vcproj | 1100 ++ deps/zlib/crc32.c | 1049 ++ deps/zlib/crc32.h | 9446 ++++++++++++++++ deps/zlib/deflate.c | 2135 ++++ deps/zlib/deflate.h | 375 + deps/zlib/doc/algorithm.txt | 209 + deps/zlib/doc/crc-doc.1.0.pdf | Bin 0 -> 776142 bytes deps/zlib/doc/rfc1950.txt | 619 ++ deps/zlib/doc/rfc1951.txt | 955 ++ deps/zlib/doc/rfc1952.txt | 675 ++ deps/zlib/doc/txtvsbin.txt | 107 + deps/zlib/examples/README.examples | 54 + deps/zlib/examples/enough.c | 597 + deps/zlib/examples/fitblk.c | 233 + deps/zlib/examples/gun.c | 702 ++ deps/zlib/examples/gzappend.c | 504 + deps/zlib/examples/gzjoin.c | 449 + deps/zlib/examples/gzlog.c | 1061 ++ deps/zlib/examples/gzlog.h | 91 + deps/zlib/examples/gznorm.c | 470 + deps/zlib/examples/zlib_how.html | 549 + deps/zlib/examples/zpipe.c | 205 + deps/zlib/examples/zran.c | 533 + deps/zlib/examples/zran.h | 51 + deps/zlib/gzclose.c | 23 + deps/zlib/gzguts.h | 218 + deps/zlib/gzlib.c | 582 + deps/zlib/gzread.c | 602 + deps/zlib/gzwrite.c | 631 ++ deps/zlib/infback.c | 628 ++ deps/zlib/inffast.c | 320 + deps/zlib/inffast.h | 11 + deps/zlib/inffixed.h | 94 + deps/zlib/inflate.c | 1526 +++ deps/zlib/inflate.h | 126 + deps/zlib/inftrees.c | 299 + deps/zlib/inftrees.h | 62 + deps/zlib/make_vms.com | 867 ++ deps/zlib/msdos/Makefile.bor | 115 + deps/zlib/msdos/Makefile.dj2 | 104 + deps/zlib/msdos/Makefile.emx | 69 + deps/zlib/msdos/Makefile.msc | 112 + deps/zlib/msdos/Makefile.tc | 100 + deps/zlib/nintendods/Makefile | 126 + deps/zlib/nintendods/README | 5 + deps/zlib/old/Makefile.emx | 69 + deps/zlib/old/Makefile.riscos | 151 + deps/zlib/old/README | 3 + deps/zlib/old/descrip.mms | 48 + deps/zlib/old/os2/Makefile.os2 | 136 + deps/zlib/old/os2/zlib.def | 51 + deps/zlib/old/visual-basic.txt | 160 + deps/zlib/os400/README400 | 48 + deps/zlib/os400/bndsrc | 127 + deps/zlib/os400/make.sh | 366 + deps/zlib/os400/zlib.inc | 527 + deps/zlib/qnx/package.qpg | 141 + deps/zlib/test/example.c | 546 + deps/zlib/test/infcover.c | 672 ++ deps/zlib/test/minigzip.c | 579 + deps/zlib/treebuild.xml | 116 + deps/zlib/trees.c | 1117 ++ deps/zlib/trees.h | 128 + deps/zlib/uncompr.c | 85 + deps/zlib/watcom/watcom_f.mak | 43 + deps/zlib/watcom/watcom_l.mak | 43 + deps/zlib/win32/DLL_FAQ.txt | 397 + deps/zlib/win32/Makefile.bor | 109 + deps/zlib/win32/Makefile.gcc | 177 + deps/zlib/win32/Makefile.msc | 159 + deps/zlib/win32/README-WIN32.txt | 103 + deps/zlib/win32/VisualC.txt | 3 + deps/zlib/win32/zlib.def | 97 + deps/zlib/win32/zlib1.rc | 40 + deps/zlib/zconf.h | 551 + deps/zlib/zconf.h.cmakein | 553 + deps/zlib/zconf.h.in | 551 + deps/zlib/zlib.3 | 149 + deps/zlib/zlib.3.pdf | Bin 0 -> 19505 bytes deps/zlib/zlib.h | 1938 ++++ deps/zlib/zlib.map | 100 + deps/zlib/zlib.pc.cmakein | 13 + deps/zlib/zlib.pc.in | 13 + deps/zlib/zutil.c | 299 + deps/zlib/zutil.h | 275 + 5618 files changed, 1022726 insertions(+), 6 deletions(-) delete mode 160000 deps/GSL create mode 100644 deps/GSL/.clang-format create mode 100644 deps/GSL/.gitattributes create mode 100644 deps/GSL/.github/workflows/android.yml create mode 100644 deps/GSL/.github/workflows/cmake_find_package.yml create mode 100644 deps/GSL/.github/workflows/ios.yml create mode 100644 deps/GSL/.gitignore create mode 100644 deps/GSL/CMakeLists.txt create mode 100644 deps/GSL/CMakeSettings.json create mode 100644 deps/GSL/CONTRIBUTING.md create mode 100644 deps/GSL/GSL.natvis create mode 100644 deps/GSL/LICENSE create mode 100644 deps/GSL/README.md create mode 100644 deps/GSL/SECURITY.md create mode 100644 deps/GSL/ThirdPartyNotices.txt create mode 100644 deps/GSL/azure-pipelines.yml create mode 100644 deps/GSL/docs/headers.md create mode 100644 deps/GSL/include/CMakeLists.txt create mode 100644 deps/GSL/include/gsl/algorithm create mode 100644 deps/GSL/include/gsl/assert create mode 100644 deps/GSL/include/gsl/byte create mode 100644 deps/GSL/include/gsl/gsl create mode 100644 deps/GSL/include/gsl/narrow create mode 100644 deps/GSL/include/gsl/pointers create mode 100644 deps/GSL/include/gsl/span create mode 100644 deps/GSL/include/gsl/span_ext create mode 100644 deps/GSL/include/gsl/string_span create mode 100644 deps/GSL/include/gsl/util create mode 100644 deps/GSL/include/gsl/zstring create mode 100644 deps/GSL/pipelines/jobs.yml create mode 100644 deps/GSL/pipelines/setup_apple.yml create mode 100644 deps/GSL/pipelines/setup_clang.yml create mode 100644 deps/GSL/pipelines/setup_gcc.yml create mode 100644 deps/GSL/pipelines/steps.yml create mode 100644 deps/GSL/tests/CMakeLists.txt create mode 100644 deps/GSL/tests/CMakeLists.txt.in create mode 100644 deps/GSL/tests/algorithm_tests.cpp create mode 100644 deps/GSL/tests/assertion_tests.cpp create mode 100644 deps/GSL/tests/at_tests.cpp create mode 100644 deps/GSL/tests/byte_tests.cpp create mode 100644 deps/GSL/tests/deathTestCommon.h create mode 100644 deps/GSL/tests/no_exception_ensure_tests.cpp create mode 100644 deps/GSL/tests/notnull_tests.cpp create mode 100644 deps/GSL/tests/owner_tests.cpp create mode 100644 deps/GSL/tests/span_compatibility_tests.cpp create mode 100644 deps/GSL/tests/span_ext_tests.cpp create mode 100644 deps/GSL/tests/span_tests.cpp create mode 100644 deps/GSL/tests/strict_notnull_tests.cpp create mode 100644 deps/GSL/tests/utils_tests.cpp delete mode 160000 deps/curl create mode 100644 deps/curl/.azure-pipelines.yml create mode 100644 deps/curl/.circleci/config.yml create mode 100644 deps/curl/.cirrus.yml create mode 100644 deps/curl/.dcignore create mode 100644 deps/curl/.dir-locals.el create mode 100644 deps/curl/.git-blame-ignore-revs create mode 100644 deps/curl/.gitattributes create mode 100644 deps/curl/.github/CODEOWNERS create mode 100644 deps/curl/.github/CONTRIBUTING.md create mode 100644 deps/curl/.github/FUNDING.yml create mode 100644 deps/curl/.github/ISSUE_TEMPLATE/bug_report.yml create mode 100644 deps/curl/.github/ISSUE_TEMPLATE/config.yml create mode 100644 deps/curl/.github/labeler.yml create mode 100644 deps/curl/.github/lock.yml create mode 100644 deps/curl/.github/scripts/cleanspell.pl create mode 100644 deps/curl/.github/scripts/codespell-ignore.txt create mode 100644 deps/curl/.github/scripts/spellcheck.words create mode 100644 deps/curl/.github/scripts/spellcheck.yaml create mode 100644 deps/curl/.github/scripts/verify-examples.pl create mode 100644 deps/curl/.github/scripts/verify-synopsis.pl create mode 100644 deps/curl/.github/stale.yml create mode 100644 deps/curl/.github/workflows/appveyor-status.yml create mode 100644 deps/curl/.github/workflows/awslc.yml create mode 100644 deps/curl/.github/workflows/codeql-analysis.yml create mode 100644 deps/curl/.github/workflows/codespell.yml create mode 100644 deps/curl/.github/workflows/configure-vs-cmake.yml create mode 100644 deps/curl/.github/workflows/distcheck.yml create mode 100644 deps/curl/.github/workflows/fuzz.yml create mode 100644 deps/curl/.github/workflows/hacktoberfest-accepted.yml create mode 100644 deps/curl/.github/workflows/label.yml create mode 100644 deps/curl/.github/workflows/linkcheck.yml create mode 100644 deps/curl/.github/workflows/linux.yml create mode 100644 deps/curl/.github/workflows/linux32.yml create mode 100644 deps/curl/.github/workflows/macos.yml create mode 100644 deps/curl/.github/workflows/man-examples.yml create mode 100644 deps/curl/.github/workflows/ngtcp2-linux.yml create mode 100644 deps/curl/.github/workflows/proselint.yml create mode 100644 deps/curl/.github/workflows/quiche-linux.yml create mode 100644 deps/curl/.github/workflows/reuse.yml create mode 100644 deps/curl/.github/workflows/spellcheck.yml create mode 100644 deps/curl/.github/workflows/synopsis.yml create mode 100644 deps/curl/.github/workflows/torture.yml create mode 100644 deps/curl/.github/workflows/wolfssl.yml create mode 100644 deps/curl/.gitignore create mode 100644 deps/curl/.mailmap create mode 100644 deps/curl/.reuse/dep5 create mode 100644 deps/curl/CHANGES create mode 100644 deps/curl/CMake/CMakeConfigurableFile.in create mode 100644 deps/curl/CMake/CurlSymbolHiding.cmake create mode 100644 deps/curl/CMake/CurlTests.c create mode 100644 deps/curl/CMake/FindBearSSL.cmake create mode 100644 deps/curl/CMake/FindBrotli.cmake create mode 100644 deps/curl/CMake/FindCARES.cmake create mode 100644 deps/curl/CMake/FindGSS.cmake create mode 100644 deps/curl/CMake/FindLibPSL.cmake create mode 100644 deps/curl/CMake/FindLibSSH2.cmake create mode 100644 deps/curl/CMake/FindMSH3.cmake create mode 100644 deps/curl/CMake/FindMbedTLS.cmake create mode 100644 deps/curl/CMake/FindNGHTTP2.cmake create mode 100644 deps/curl/CMake/FindNGHTTP3.cmake create mode 100644 deps/curl/CMake/FindNGTCP2.cmake create mode 100644 deps/curl/CMake/FindQUICHE.cmake create mode 100644 deps/curl/CMake/FindWolfSSL.cmake create mode 100644 deps/curl/CMake/FindZstd.cmake create mode 100644 deps/curl/CMake/Macros.cmake create mode 100644 deps/curl/CMake/OtherTests.cmake create mode 100644 deps/curl/CMake/PickyWarnings.cmake create mode 100644 deps/curl/CMake/Platforms/WindowsCache.cmake create mode 100644 deps/curl/CMake/Utilities.cmake create mode 100644 deps/curl/CMake/cmake_uninstall.cmake.in create mode 100644 deps/curl/CMake/curl-config.cmake.in create mode 100644 deps/curl/CMakeLists.txt create mode 100644 deps/curl/COPYING create mode 100644 deps/curl/GIT-INFO create mode 100644 deps/curl/LICENSES/BSD-3-Clause.txt create mode 100644 deps/curl/LICENSES/BSD-4-Clause-UC.txt create mode 100644 deps/curl/LICENSES/ISC.txt create mode 100644 deps/curl/LICENSES/curl.txt create mode 100644 deps/curl/MacOSX-Framework create mode 100644 deps/curl/Makefile.am create mode 100644 deps/curl/Makefile.dist create mode 100644 deps/curl/README create mode 100644 deps/curl/README.md create mode 100644 deps/curl/RELEASE-NOTES create mode 100644 deps/curl/SECURITY.md create mode 100644 deps/curl/acinclude.m4 create mode 100644 deps/curl/appveyor.yml create mode 100644 deps/curl/buildconf create mode 100644 deps/curl/buildconf.bat create mode 100644 deps/curl/configure.ac create mode 100644 deps/curl/curl-config.in create mode 100644 deps/curl/docs/.gitignore create mode 100644 deps/curl/docs/ALTSVC.md create mode 100644 deps/curl/docs/BINDINGS.md create mode 100644 deps/curl/docs/BUFQ.md create mode 100644 deps/curl/docs/BUFREF.md create mode 100644 deps/curl/docs/BUG-BOUNTY.md create mode 100644 deps/curl/docs/BUGS.md create mode 100644 deps/curl/docs/CHECKSRC.md create mode 100644 deps/curl/docs/CIPHERS.md create mode 100644 deps/curl/docs/CMakeLists.txt create mode 100644 deps/curl/docs/CODE_OF_CONDUCT.md create mode 100644 deps/curl/docs/CODE_REVIEW.md create mode 100644 deps/curl/docs/CODE_STYLE.md create mode 100644 deps/curl/docs/CONNECTION-FILTERS.md create mode 100644 deps/curl/docs/CONTRIBUTE.md create mode 100644 deps/curl/docs/CURL-DISABLE.md create mode 100644 deps/curl/docs/DEPRECATE.md create mode 100644 deps/curl/docs/DYNBUF.md create mode 100644 deps/curl/docs/EARLY-RELEASE.md create mode 100644 deps/curl/docs/EXPERIMENTAL.md create mode 100644 deps/curl/docs/FAQ create mode 100644 deps/curl/docs/FEATURES.md create mode 100644 deps/curl/docs/GOVERNANCE.md create mode 100644 deps/curl/docs/HELP-US.md create mode 100644 deps/curl/docs/HISTORY.md create mode 100644 deps/curl/docs/HSTS.md create mode 100644 deps/curl/docs/HTTP-COOKIES.md create mode 100644 deps/curl/docs/HTTP2.md create mode 100644 deps/curl/docs/HTTP3.md create mode 100644 deps/curl/docs/HYPER.md create mode 100644 deps/curl/docs/INSTALL.cmake create mode 100644 deps/curl/docs/INSTALL.md create mode 100644 deps/curl/docs/INTERNALS.md create mode 100644 deps/curl/docs/IPFS.md create mode 100644 deps/curl/docs/KNOWN_BUGS create mode 100644 deps/curl/docs/MAIL-ETIQUETTE create mode 100644 deps/curl/docs/MANUAL.md create mode 100644 deps/curl/docs/MQTT.md create mode 100644 deps/curl/docs/Makefile.am create mode 100644 deps/curl/docs/NEW-PROTOCOL.md create mode 100644 deps/curl/docs/PARALLEL-TRANSFERS.md create mode 100644 deps/curl/docs/README.md create mode 100644 deps/curl/docs/RELEASE-PROCEDURE.md create mode 100644 deps/curl/docs/ROADMAP.md create mode 100644 deps/curl/docs/RUSTLS.md create mode 100644 deps/curl/docs/SECURITY-ADVISORY.md create mode 100644 deps/curl/docs/SSL-PROBLEMS.md create mode 100644 deps/curl/docs/SSLCERTS.md create mode 100644 deps/curl/docs/THANKS create mode 100644 deps/curl/docs/THANKS-filter create mode 100644 deps/curl/docs/TODO create mode 100644 deps/curl/docs/TheArtOfHttpScripting.md create mode 100644 deps/curl/docs/URL-SYNTAX.md create mode 100644 deps/curl/docs/VERSIONS.md create mode 100644 deps/curl/docs/VULN-DISCLOSURE-POLICY.md create mode 100644 deps/curl/docs/WEBSOCKET.md create mode 100644 deps/curl/docs/cmdline-opts/CMakeLists.txt create mode 100644 deps/curl/docs/cmdline-opts/MANPAGE.md create mode 100644 deps/curl/docs/cmdline-opts/Makefile.am create mode 100644 deps/curl/docs/cmdline-opts/Makefile.inc create mode 100644 deps/curl/docs/cmdline-opts/abstract-unix-socket.d create mode 100644 deps/curl/docs/cmdline-opts/alt-svc.d create mode 100644 deps/curl/docs/cmdline-opts/anyauth.d create mode 100644 deps/curl/docs/cmdline-opts/append.d create mode 100644 deps/curl/docs/cmdline-opts/aws-sigv4.d create mode 100644 deps/curl/docs/cmdline-opts/basic.d create mode 100644 deps/curl/docs/cmdline-opts/ca-native.d create mode 100644 deps/curl/docs/cmdline-opts/cacert.d create mode 100644 deps/curl/docs/cmdline-opts/capath.d create mode 100644 deps/curl/docs/cmdline-opts/cert-status.d create mode 100644 deps/curl/docs/cmdline-opts/cert-type.d create mode 100644 deps/curl/docs/cmdline-opts/cert.d create mode 100644 deps/curl/docs/cmdline-opts/ciphers.d create mode 100644 deps/curl/docs/cmdline-opts/compressed-ssh.d create mode 100644 deps/curl/docs/cmdline-opts/compressed.d create mode 100644 deps/curl/docs/cmdline-opts/config.d create mode 100644 deps/curl/docs/cmdline-opts/connect-timeout.d create mode 100644 deps/curl/docs/cmdline-opts/connect-to.d create mode 100644 deps/curl/docs/cmdline-opts/continue-at.d create mode 100644 deps/curl/docs/cmdline-opts/cookie-jar.d create mode 100644 deps/curl/docs/cmdline-opts/cookie.d create mode 100644 deps/curl/docs/cmdline-opts/create-dirs.d create mode 100644 deps/curl/docs/cmdline-opts/create-file-mode.d create mode 100644 deps/curl/docs/cmdline-opts/crlf.d create mode 100644 deps/curl/docs/cmdline-opts/crlfile.d create mode 100644 deps/curl/docs/cmdline-opts/curves.d create mode 100644 deps/curl/docs/cmdline-opts/data-ascii.d create mode 100644 deps/curl/docs/cmdline-opts/data-binary.d create mode 100644 deps/curl/docs/cmdline-opts/data-raw.d create mode 100644 deps/curl/docs/cmdline-opts/data-urlencode.d create mode 100644 deps/curl/docs/cmdline-opts/data.d create mode 100644 deps/curl/docs/cmdline-opts/delegation.d create mode 100644 deps/curl/docs/cmdline-opts/digest.d create mode 100644 deps/curl/docs/cmdline-opts/disable-eprt.d create mode 100644 deps/curl/docs/cmdline-opts/disable-epsv.d create mode 100644 deps/curl/docs/cmdline-opts/disable.d create mode 100644 deps/curl/docs/cmdline-opts/disallow-username-in-url.d create mode 100644 deps/curl/docs/cmdline-opts/dns-interface.d create mode 100644 deps/curl/docs/cmdline-opts/dns-ipv4-addr.d create mode 100644 deps/curl/docs/cmdline-opts/dns-ipv6-addr.d create mode 100644 deps/curl/docs/cmdline-opts/dns-servers.d create mode 100644 deps/curl/docs/cmdline-opts/doh-cert-status.d create mode 100644 deps/curl/docs/cmdline-opts/doh-insecure.d create mode 100644 deps/curl/docs/cmdline-opts/doh-url.d create mode 100644 deps/curl/docs/cmdline-opts/dump-header.d create mode 100644 deps/curl/docs/cmdline-opts/egd-file.d create mode 100644 deps/curl/docs/cmdline-opts/engine.d create mode 100644 deps/curl/docs/cmdline-opts/etag-compare.d create mode 100644 deps/curl/docs/cmdline-opts/etag-save.d create mode 100644 deps/curl/docs/cmdline-opts/expect100-timeout.d create mode 100644 deps/curl/docs/cmdline-opts/fail-early.d create mode 100644 deps/curl/docs/cmdline-opts/fail-with-body.d create mode 100644 deps/curl/docs/cmdline-opts/fail.d create mode 100644 deps/curl/docs/cmdline-opts/false-start.d create mode 100644 deps/curl/docs/cmdline-opts/form-escape.d create mode 100644 deps/curl/docs/cmdline-opts/form-string.d create mode 100644 deps/curl/docs/cmdline-opts/form.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-account.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-alternative-to-user.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-create-dirs.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-method.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-pasv.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-port.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-pret.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-skip-pasv-ip.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-ssl-ccc-mode.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-ssl-ccc.d create mode 100644 deps/curl/docs/cmdline-opts/ftp-ssl-control.d create mode 100644 deps/curl/docs/cmdline-opts/gen.pl create mode 100644 deps/curl/docs/cmdline-opts/get.d create mode 100644 deps/curl/docs/cmdline-opts/globoff.d create mode 100644 deps/curl/docs/cmdline-opts/happy-eyeballs-timeout-ms.d create mode 100644 deps/curl/docs/cmdline-opts/haproxy-clientip.d create mode 100644 deps/curl/docs/cmdline-opts/haproxy-protocol.d create mode 100644 deps/curl/docs/cmdline-opts/head.d create mode 100644 deps/curl/docs/cmdline-opts/header.d create mode 100644 deps/curl/docs/cmdline-opts/help.d create mode 100644 deps/curl/docs/cmdline-opts/hostpubmd5.d create mode 100644 deps/curl/docs/cmdline-opts/hostpubsha256.d create mode 100644 deps/curl/docs/cmdline-opts/hsts.d create mode 100644 deps/curl/docs/cmdline-opts/http0.9.d create mode 100644 deps/curl/docs/cmdline-opts/http1.0.d create mode 100644 deps/curl/docs/cmdline-opts/http1.1.d create mode 100644 deps/curl/docs/cmdline-opts/http2-prior-knowledge.d create mode 100644 deps/curl/docs/cmdline-opts/http2.d create mode 100644 deps/curl/docs/cmdline-opts/http3-only.d create mode 100644 deps/curl/docs/cmdline-opts/http3.d create mode 100644 deps/curl/docs/cmdline-opts/ignore-content-length.d create mode 100644 deps/curl/docs/cmdline-opts/include.d create mode 100644 deps/curl/docs/cmdline-opts/insecure.d create mode 100644 deps/curl/docs/cmdline-opts/interface.d create mode 100644 deps/curl/docs/cmdline-opts/ipfs-gateway.d create mode 100644 deps/curl/docs/cmdline-opts/ipv4.d create mode 100644 deps/curl/docs/cmdline-opts/ipv6.d create mode 100644 deps/curl/docs/cmdline-opts/json.d create mode 100644 deps/curl/docs/cmdline-opts/junk-session-cookies.d create mode 100644 deps/curl/docs/cmdline-opts/keepalive-time.d create mode 100644 deps/curl/docs/cmdline-opts/key-type.d create mode 100644 deps/curl/docs/cmdline-opts/key.d create mode 100644 deps/curl/docs/cmdline-opts/krb.d create mode 100644 deps/curl/docs/cmdline-opts/libcurl.d create mode 100644 deps/curl/docs/cmdline-opts/limit-rate.d create mode 100644 deps/curl/docs/cmdline-opts/list-only.d create mode 100644 deps/curl/docs/cmdline-opts/local-port.d create mode 100644 deps/curl/docs/cmdline-opts/location-trusted.d create mode 100644 deps/curl/docs/cmdline-opts/location.d create mode 100644 deps/curl/docs/cmdline-opts/login-options.d create mode 100644 deps/curl/docs/cmdline-opts/mail-auth.d create mode 100644 deps/curl/docs/cmdline-opts/mail-from.d create mode 100644 deps/curl/docs/cmdline-opts/mail-rcpt-allowfails.d create mode 100644 deps/curl/docs/cmdline-opts/mail-rcpt.d create mode 100644 deps/curl/docs/cmdline-opts/manual.d create mode 100644 deps/curl/docs/cmdline-opts/max-filesize.d create mode 100644 deps/curl/docs/cmdline-opts/max-redirs.d create mode 100644 deps/curl/docs/cmdline-opts/max-time.d create mode 100644 deps/curl/docs/cmdline-opts/metalink.d create mode 100644 deps/curl/docs/cmdline-opts/negotiate.d create mode 100644 deps/curl/docs/cmdline-opts/netrc-file.d create mode 100644 deps/curl/docs/cmdline-opts/netrc-optional.d create mode 100644 deps/curl/docs/cmdline-opts/netrc.d create mode 100644 deps/curl/docs/cmdline-opts/next.d create mode 100644 deps/curl/docs/cmdline-opts/no-alpn.d create mode 100644 deps/curl/docs/cmdline-opts/no-buffer.d create mode 100644 deps/curl/docs/cmdline-opts/no-clobber.d create mode 100644 deps/curl/docs/cmdline-opts/no-keepalive.d create mode 100644 deps/curl/docs/cmdline-opts/no-npn.d create mode 100644 deps/curl/docs/cmdline-opts/no-progress-meter.d create mode 100644 deps/curl/docs/cmdline-opts/no-sessionid.d create mode 100644 deps/curl/docs/cmdline-opts/noproxy.d create mode 100644 deps/curl/docs/cmdline-opts/ntlm-wb.d create mode 100644 deps/curl/docs/cmdline-opts/ntlm.d create mode 100644 deps/curl/docs/cmdline-opts/oauth2-bearer.d create mode 100644 deps/curl/docs/cmdline-opts/output-dir.d create mode 100644 deps/curl/docs/cmdline-opts/output.d create mode 100644 deps/curl/docs/cmdline-opts/page-footer create mode 100644 deps/curl/docs/cmdline-opts/page-header create mode 100644 deps/curl/docs/cmdline-opts/parallel-immediate.d create mode 100644 deps/curl/docs/cmdline-opts/parallel-max.d create mode 100644 deps/curl/docs/cmdline-opts/parallel.d create mode 100644 deps/curl/docs/cmdline-opts/pass.d create mode 100644 deps/curl/docs/cmdline-opts/path-as-is.d create mode 100644 deps/curl/docs/cmdline-opts/pinnedpubkey.d create mode 100644 deps/curl/docs/cmdline-opts/post301.d create mode 100644 deps/curl/docs/cmdline-opts/post302.d create mode 100644 deps/curl/docs/cmdline-opts/post303.d create mode 100644 deps/curl/docs/cmdline-opts/preproxy.d create mode 100644 deps/curl/docs/cmdline-opts/progress-bar.d create mode 100644 deps/curl/docs/cmdline-opts/proto-default.d create mode 100644 deps/curl/docs/cmdline-opts/proto-redir.d create mode 100644 deps/curl/docs/cmdline-opts/proto.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-anyauth.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-basic.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-ca-native.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-cacert.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-capath.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-cert-type.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-cert.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-ciphers.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-crlfile.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-digest.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-header.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-http2.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-insecure.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-key-type.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-key.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-negotiate.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-ntlm.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-pass.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-pinnedpubkey.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-service-name.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-ssl-allow-beast.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-ssl-auto-client-cert.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-tls13-ciphers.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-tlsauthtype.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-tlspassword.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-tlsuser.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-tlsv1.d create mode 100644 deps/curl/docs/cmdline-opts/proxy-user.d create mode 100644 deps/curl/docs/cmdline-opts/proxy.d create mode 100644 deps/curl/docs/cmdline-opts/proxy1.0.d create mode 100644 deps/curl/docs/cmdline-opts/proxytunnel.d create mode 100644 deps/curl/docs/cmdline-opts/pubkey.d create mode 100644 deps/curl/docs/cmdline-opts/quote.d create mode 100644 deps/curl/docs/cmdline-opts/random-file.d create mode 100644 deps/curl/docs/cmdline-opts/range.d create mode 100644 deps/curl/docs/cmdline-opts/rate.d create mode 100644 deps/curl/docs/cmdline-opts/raw.d create mode 100644 deps/curl/docs/cmdline-opts/referer.d create mode 100644 deps/curl/docs/cmdline-opts/remote-header-name.d create mode 100644 deps/curl/docs/cmdline-opts/remote-name-all.d create mode 100644 deps/curl/docs/cmdline-opts/remote-name.d create mode 100644 deps/curl/docs/cmdline-opts/remote-time.d create mode 100644 deps/curl/docs/cmdline-opts/remove-on-error.d create mode 100644 deps/curl/docs/cmdline-opts/request-target.d create mode 100644 deps/curl/docs/cmdline-opts/request.d create mode 100644 deps/curl/docs/cmdline-opts/resolve.d create mode 100644 deps/curl/docs/cmdline-opts/retry-all-errors.d create mode 100644 deps/curl/docs/cmdline-opts/retry-connrefused.d create mode 100644 deps/curl/docs/cmdline-opts/retry-delay.d create mode 100644 deps/curl/docs/cmdline-opts/retry-max-time.d create mode 100644 deps/curl/docs/cmdline-opts/retry.d create mode 100644 deps/curl/docs/cmdline-opts/sasl-authzid.d create mode 100644 deps/curl/docs/cmdline-opts/sasl-ir.d create mode 100644 deps/curl/docs/cmdline-opts/service-name.d create mode 100644 deps/curl/docs/cmdline-opts/show-error.d create mode 100644 deps/curl/docs/cmdline-opts/silent.d create mode 100644 deps/curl/docs/cmdline-opts/socks4.d create mode 100644 deps/curl/docs/cmdline-opts/socks4a.d create mode 100644 deps/curl/docs/cmdline-opts/socks5-basic.d create mode 100644 deps/curl/docs/cmdline-opts/socks5-gssapi-nec.d create mode 100644 deps/curl/docs/cmdline-opts/socks5-gssapi-service.d create mode 100644 deps/curl/docs/cmdline-opts/socks5-gssapi.d create mode 100644 deps/curl/docs/cmdline-opts/socks5-hostname.d create mode 100644 deps/curl/docs/cmdline-opts/socks5.d create mode 100644 deps/curl/docs/cmdline-opts/speed-limit.d create mode 100644 deps/curl/docs/cmdline-opts/speed-time.d create mode 100644 deps/curl/docs/cmdline-opts/ssl-allow-beast.d create mode 100644 deps/curl/docs/cmdline-opts/ssl-auto-client-cert.d create mode 100644 deps/curl/docs/cmdline-opts/ssl-no-revoke.d create mode 100644 deps/curl/docs/cmdline-opts/ssl-reqd.d create mode 100644 deps/curl/docs/cmdline-opts/ssl-revoke-best-effort.d create mode 100644 deps/curl/docs/cmdline-opts/ssl.d create mode 100644 deps/curl/docs/cmdline-opts/sslv2.d create mode 100644 deps/curl/docs/cmdline-opts/sslv3.d create mode 100644 deps/curl/docs/cmdline-opts/stderr.d create mode 100644 deps/curl/docs/cmdline-opts/styled-output.d create mode 100644 deps/curl/docs/cmdline-opts/suppress-connect-headers.d create mode 100644 deps/curl/docs/cmdline-opts/tcp-fastopen.d create mode 100644 deps/curl/docs/cmdline-opts/tcp-nodelay.d create mode 100644 deps/curl/docs/cmdline-opts/telnet-option.d create mode 100644 deps/curl/docs/cmdline-opts/tftp-blksize.d create mode 100644 deps/curl/docs/cmdline-opts/tftp-no-options.d create mode 100644 deps/curl/docs/cmdline-opts/time-cond.d create mode 100644 deps/curl/docs/cmdline-opts/tls-max.d create mode 100644 deps/curl/docs/cmdline-opts/tls13-ciphers.d create mode 100644 deps/curl/docs/cmdline-opts/tlsauthtype.d create mode 100644 deps/curl/docs/cmdline-opts/tlspassword.d create mode 100644 deps/curl/docs/cmdline-opts/tlsuser.d create mode 100644 deps/curl/docs/cmdline-opts/tlsv1.0.d create mode 100644 deps/curl/docs/cmdline-opts/tlsv1.1.d create mode 100644 deps/curl/docs/cmdline-opts/tlsv1.2.d create mode 100644 deps/curl/docs/cmdline-opts/tlsv1.3.d create mode 100644 deps/curl/docs/cmdline-opts/tlsv1.d create mode 100644 deps/curl/docs/cmdline-opts/tr-encoding.d create mode 100644 deps/curl/docs/cmdline-opts/trace-ascii.d create mode 100644 deps/curl/docs/cmdline-opts/trace-config.d create mode 100644 deps/curl/docs/cmdline-opts/trace-ids.d create mode 100644 deps/curl/docs/cmdline-opts/trace-time.d create mode 100644 deps/curl/docs/cmdline-opts/trace.d create mode 100644 deps/curl/docs/cmdline-opts/unix-socket.d create mode 100644 deps/curl/docs/cmdline-opts/upload-file.d create mode 100644 deps/curl/docs/cmdline-opts/url-query.d create mode 100644 deps/curl/docs/cmdline-opts/url.d create mode 100644 deps/curl/docs/cmdline-opts/use-ascii.d create mode 100644 deps/curl/docs/cmdline-opts/user-agent.d create mode 100644 deps/curl/docs/cmdline-opts/user.d create mode 100644 deps/curl/docs/cmdline-opts/variable.d create mode 100644 deps/curl/docs/cmdline-opts/verbose.d create mode 100644 deps/curl/docs/cmdline-opts/version.d create mode 100644 deps/curl/docs/cmdline-opts/write-out.d create mode 100644 deps/curl/docs/cmdline-opts/xattr.d create mode 100644 deps/curl/docs/curl-config.1 create mode 100644 deps/curl/docs/examples/.checksrc create mode 100644 deps/curl/docs/examples/.gitignore create mode 100644 deps/curl/docs/examples/10-at-a-time.c create mode 100644 deps/curl/docs/examples/Makefile.am create mode 100644 deps/curl/docs/examples/Makefile.example create mode 100644 deps/curl/docs/examples/Makefile.inc create mode 100644 deps/curl/docs/examples/Makefile.mk create mode 100644 deps/curl/docs/examples/README.md create mode 100644 deps/curl/docs/examples/adddocsref.pl create mode 100644 deps/curl/docs/examples/altsvc.c create mode 100644 deps/curl/docs/examples/anyauthput.c create mode 100644 deps/curl/docs/examples/cacertinmem.c create mode 100644 deps/curl/docs/examples/certinfo.c create mode 100644 deps/curl/docs/examples/chkspeed.c create mode 100644 deps/curl/docs/examples/connect-to.c create mode 100644 deps/curl/docs/examples/cookie_interface.c create mode 100644 deps/curl/docs/examples/crawler.c create mode 100644 deps/curl/docs/examples/debug.c create mode 100644 deps/curl/docs/examples/default-scheme.c create mode 100644 deps/curl/docs/examples/ephiperfifo.c create mode 100644 deps/curl/docs/examples/evhiperfifo.c create mode 100644 deps/curl/docs/examples/externalsocket.c create mode 100644 deps/curl/docs/examples/fileupload.c create mode 100644 deps/curl/docs/examples/ftp-wildcard.c create mode 100644 deps/curl/docs/examples/ftpget.c create mode 100644 deps/curl/docs/examples/ftpgetinfo.c create mode 100644 deps/curl/docs/examples/ftpgetresp.c create mode 100644 deps/curl/docs/examples/ftpsget.c create mode 100644 deps/curl/docs/examples/ftpupload.c create mode 100644 deps/curl/docs/examples/ftpuploadfrommem.c create mode 100644 deps/curl/docs/examples/ftpuploadresume.c create mode 100644 deps/curl/docs/examples/getinfo.c create mode 100644 deps/curl/docs/examples/getinmemory.c create mode 100644 deps/curl/docs/examples/getredirect.c create mode 100644 deps/curl/docs/examples/getreferrer.c create mode 100644 deps/curl/docs/examples/ghiper.c create mode 100644 deps/curl/docs/examples/headerapi.c create mode 100644 deps/curl/docs/examples/hiperfifo.c create mode 100644 deps/curl/docs/examples/href_extractor.c create mode 100644 deps/curl/docs/examples/hsts-preload.c create mode 100644 deps/curl/docs/examples/htmltidy.c create mode 100644 deps/curl/docs/examples/htmltitle.cpp create mode 100644 deps/curl/docs/examples/http-options.c create mode 100644 deps/curl/docs/examples/http-post.c create mode 100644 deps/curl/docs/examples/http2-download.c create mode 100644 deps/curl/docs/examples/http2-pushinmemory.c create mode 100644 deps/curl/docs/examples/http2-serverpush.c create mode 100644 deps/curl/docs/examples/http2-upload.c create mode 100644 deps/curl/docs/examples/http3-present.c create mode 100644 deps/curl/docs/examples/http3.c create mode 100644 deps/curl/docs/examples/httpcustomheader.c create mode 100644 deps/curl/docs/examples/httpput-postfields.c create mode 100644 deps/curl/docs/examples/httpput.c create mode 100644 deps/curl/docs/examples/https.c create mode 100644 deps/curl/docs/examples/imap-append.c create mode 100644 deps/curl/docs/examples/imap-authzid.c create mode 100644 deps/curl/docs/examples/imap-copy.c create mode 100644 deps/curl/docs/examples/imap-create.c create mode 100644 deps/curl/docs/examples/imap-delete.c create mode 100644 deps/curl/docs/examples/imap-examine.c create mode 100644 deps/curl/docs/examples/imap-fetch.c create mode 100644 deps/curl/docs/examples/imap-list.c create mode 100644 deps/curl/docs/examples/imap-lsub.c create mode 100644 deps/curl/docs/examples/imap-multi.c create mode 100644 deps/curl/docs/examples/imap-noop.c create mode 100644 deps/curl/docs/examples/imap-search.c create mode 100644 deps/curl/docs/examples/imap-ssl.c create mode 100644 deps/curl/docs/examples/imap-store.c create mode 100644 deps/curl/docs/examples/imap-tls.c create mode 100644 deps/curl/docs/examples/interface.c create mode 100644 deps/curl/docs/examples/ipv6.c create mode 100644 deps/curl/docs/examples/keepalive.c create mode 100644 deps/curl/docs/examples/localport.c create mode 100644 deps/curl/docs/examples/maxconnects.c create mode 100644 deps/curl/docs/examples/multi-app.c create mode 100644 deps/curl/docs/examples/multi-debugcallback.c create mode 100644 deps/curl/docs/examples/multi-double.c create mode 100644 deps/curl/docs/examples/multi-event.c create mode 100644 deps/curl/docs/examples/multi-formadd.c create mode 100644 deps/curl/docs/examples/multi-legacy.c create mode 100644 deps/curl/docs/examples/multi-post.c create mode 100644 deps/curl/docs/examples/multi-single.c create mode 100644 deps/curl/docs/examples/multi-uv.c create mode 100644 deps/curl/docs/examples/multithread.c create mode 100644 deps/curl/docs/examples/parseurl.c create mode 100644 deps/curl/docs/examples/persistent.c create mode 100644 deps/curl/docs/examples/pop3-authzid.c create mode 100644 deps/curl/docs/examples/pop3-dele.c create mode 100644 deps/curl/docs/examples/pop3-list.c create mode 100644 deps/curl/docs/examples/pop3-multi.c create mode 100644 deps/curl/docs/examples/pop3-noop.c create mode 100644 deps/curl/docs/examples/pop3-retr.c create mode 100644 deps/curl/docs/examples/pop3-ssl.c create mode 100644 deps/curl/docs/examples/pop3-stat.c create mode 100644 deps/curl/docs/examples/pop3-tls.c create mode 100644 deps/curl/docs/examples/pop3-top.c create mode 100644 deps/curl/docs/examples/pop3-uidl.c create mode 100644 deps/curl/docs/examples/post-callback.c create mode 100644 deps/curl/docs/examples/postinmemory.c create mode 100644 deps/curl/docs/examples/postit2-formadd.c create mode 100644 deps/curl/docs/examples/postit2.c create mode 100644 deps/curl/docs/examples/progressfunc.c create mode 100644 deps/curl/docs/examples/protofeats.c create mode 100644 deps/curl/docs/examples/resolve.c create mode 100644 deps/curl/docs/examples/rtsp-options.c create mode 100644 deps/curl/docs/examples/sendrecv.c create mode 100644 deps/curl/docs/examples/sepheaders.c create mode 100644 deps/curl/docs/examples/sessioninfo.c create mode 100644 deps/curl/docs/examples/sftpget.c create mode 100644 deps/curl/docs/examples/sftpuploadresume.c create mode 100644 deps/curl/docs/examples/shared-connection-cache.c create mode 100644 deps/curl/docs/examples/simple.c create mode 100644 deps/curl/docs/examples/simplepost.c create mode 100644 deps/curl/docs/examples/simplessl.c create mode 100644 deps/curl/docs/examples/smooth-gtk-thread.c create mode 100644 deps/curl/docs/examples/smtp-authzid.c create mode 100644 deps/curl/docs/examples/smtp-expn.c create mode 100644 deps/curl/docs/examples/smtp-mail.c create mode 100644 deps/curl/docs/examples/smtp-mime.c create mode 100644 deps/curl/docs/examples/smtp-multi.c create mode 100644 deps/curl/docs/examples/smtp-ssl.c create mode 100644 deps/curl/docs/examples/smtp-tls.c create mode 100644 deps/curl/docs/examples/smtp-vrfy.c create mode 100644 deps/curl/docs/examples/sslbackend.c create mode 100644 deps/curl/docs/examples/synctime.c create mode 100644 deps/curl/docs/examples/threaded-ssl.c create mode 100644 deps/curl/docs/examples/unixsocket.c create mode 100644 deps/curl/docs/examples/url2file.c create mode 100644 deps/curl/docs/examples/urlapi.c create mode 100644 deps/curl/docs/examples/usercertinmem.c create mode 100644 deps/curl/docs/examples/version-check.pl create mode 100644 deps/curl/docs/examples/websocket-cb.c create mode 100644 deps/curl/docs/examples/websocket.c create mode 100644 deps/curl/docs/examples/xmlstream.c create mode 100644 deps/curl/docs/libcurl/.gitignore create mode 100644 deps/curl/docs/libcurl/ABI.md create mode 100644 deps/curl/docs/libcurl/CMakeLists.txt create mode 100644 deps/curl/docs/libcurl/Makefile.am create mode 100644 deps/curl/docs/libcurl/Makefile.inc create mode 100644 deps/curl/docs/libcurl/curl_easy_cleanup.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_duphandle.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_escape.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_getinfo.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_header.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_init.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_nextheader.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_option_by_id.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_option_by_name.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_option_next.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_pause.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_perform.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_recv.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_reset.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_send.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_setopt.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_strerror.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_unescape.3 create mode 100644 deps/curl/docs/libcurl/curl_easy_upkeep.3 create mode 100644 deps/curl/docs/libcurl/curl_escape.3 create mode 100644 deps/curl/docs/libcurl/curl_formadd.3 create mode 100644 deps/curl/docs/libcurl/curl_formfree.3 create mode 100644 deps/curl/docs/libcurl/curl_formget.3 create mode 100644 deps/curl/docs/libcurl/curl_free.3 create mode 100644 deps/curl/docs/libcurl/curl_getdate.3 create mode 100644 deps/curl/docs/libcurl/curl_getenv.3 create mode 100644 deps/curl/docs/libcurl/curl_global_cleanup.3 create mode 100644 deps/curl/docs/libcurl/curl_global_init.3 create mode 100644 deps/curl/docs/libcurl/curl_global_init_mem.3 create mode 100644 deps/curl/docs/libcurl/curl_global_sslset.3 create mode 100644 deps/curl/docs/libcurl/curl_global_trace.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_addpart.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_data.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_data_cb.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_encoder.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_filedata.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_filename.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_free.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_headers.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_init.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_name.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_subparts.3 create mode 100644 deps/curl/docs/libcurl/curl_mime_type.3 create mode 100644 deps/curl/docs/libcurl/curl_mprintf.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_add_handle.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_assign.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_cleanup.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_fdset.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_get_handles.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_info_read.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_init.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_perform.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_poll.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_remove_handle.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_setopt.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_socket.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_socket_action.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_socket_all.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_strerror.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_timeout.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_wait.3 create mode 100644 deps/curl/docs/libcurl/curl_multi_wakeup.3 create mode 100644 deps/curl/docs/libcurl/curl_pushheader_byname.3 create mode 100644 deps/curl/docs/libcurl/curl_pushheader_bynum.3 create mode 100644 deps/curl/docs/libcurl/curl_share_cleanup.3 create mode 100644 deps/curl/docs/libcurl/curl_share_init.3 create mode 100644 deps/curl/docs/libcurl/curl_share_setopt.3 create mode 100644 deps/curl/docs/libcurl/curl_share_strerror.3 create mode 100644 deps/curl/docs/libcurl/curl_slist_append.3 create mode 100644 deps/curl/docs/libcurl/curl_slist_free_all.3 create mode 100644 deps/curl/docs/libcurl/curl_strequal.3 create mode 100644 deps/curl/docs/libcurl/curl_strnequal.3 create mode 100644 deps/curl/docs/libcurl/curl_unescape.3 create mode 100644 deps/curl/docs/libcurl/curl_url.3 create mode 100644 deps/curl/docs/libcurl/curl_url_cleanup.3 create mode 100644 deps/curl/docs/libcurl/curl_url_dup.3 create mode 100644 deps/curl/docs/libcurl/curl_url_get.3 create mode 100644 deps/curl/docs/libcurl/curl_url_set.3 create mode 100644 deps/curl/docs/libcurl/curl_url_strerror.3 create mode 100644 deps/curl/docs/libcurl/curl_version.3 create mode 100644 deps/curl/docs/libcurl/curl_version_info.3 create mode 100644 deps/curl/docs/libcurl/curl_ws_meta.3 create mode 100644 deps/curl/docs/libcurl/curl_ws_recv.3 create mode 100644 deps/curl/docs/libcurl/curl_ws_send.3 create mode 100644 deps/curl/docs/libcurl/libcurl-easy.3 create mode 100644 deps/curl/docs/libcurl/libcurl-env-dbg.3 create mode 100644 deps/curl/docs/libcurl/libcurl-env.3 create mode 100644 deps/curl/docs/libcurl/libcurl-errors.3 create mode 100644 deps/curl/docs/libcurl/libcurl-multi.3 create mode 100644 deps/curl/docs/libcurl/libcurl-security.3 create mode 100644 deps/curl/docs/libcurl/libcurl-share.3 create mode 100644 deps/curl/docs/libcurl/libcurl-thread.3 create mode 100644 deps/curl/docs/libcurl/libcurl-tutorial.3 create mode 100644 deps/curl/docs/libcurl/libcurl-url.3 create mode 100644 deps/curl/docs/libcurl/libcurl-ws.3 create mode 100644 deps/curl/docs/libcurl/libcurl.3 create mode 100644 deps/curl/docs/libcurl/libcurl.m4 create mode 100644 deps/curl/docs/libcurl/mksymbolsmanpage.pl create mode 100644 deps/curl/docs/libcurl/opts/CMakeLists.txt create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_ACTIVESOCKET.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_APPCONNECT_TIME_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CAINFO.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CAPATH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CERTINFO.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CONDITION_UNMET.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CONNECT_TIME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CONNECT_TIME_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CONN_ID.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_DOWNLOAD_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CONTENT_LENGTH_UPLOAD_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_CONTENT_TYPE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_COOKIELIST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_EFFECTIVE_METHOD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_EFFECTIVE_URL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_FILETIME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_FILETIME_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_FTP_ENTRY_PATH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_HEADER_SIZE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_HTTPAUTH_AVAIL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_HTTP_CONNECTCODE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_HTTP_VERSION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_LASTSOCKET.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_LOCAL_IP.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_LOCAL_PORT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_NAMELOOKUP_TIME_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_NUM_CONNECTS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_OS_ERRNO.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_PRETRANSFER_TIME_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_PRIMARY_IP.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_PRIMARY_PORT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_PRIVATE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_PROTOCOL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_PROXYAUTH_AVAIL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_PROXY_ERROR.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_PROXY_SSL_VERIFYRESULT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_REDIRECT_COUNT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_REDIRECT_TIME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_REDIRECT_TIME_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_REDIRECT_URL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_REFERER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_REQUEST_SIZE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_RESPONSE_CODE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_RETRY_AFTER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_RTSP_CLIENT_CSEQ.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_RTSP_CSEQ_RECV.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_RTSP_SERVER_CSEQ.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_RTSP_SESSION_ID.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SCHEME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SIZE_DOWNLOAD_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SIZE_UPLOAD_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SPEED_DOWNLOAD_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SPEED_UPLOAD_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SSL_ENGINES.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_SSL_VERIFYRESULT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_STARTTRANSFER_TIME_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_TLS_SESSION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_TLS_SSL_PTR.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_TOTAL_TIME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_TOTAL_TIME_T.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLINFO_XFER_ID.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_CHUNK_LENGTH_PENALTY_SIZE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_CONTENT_LENGTH_PENALTY_SIZE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_MAXCONNECTS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_MAX_CONCURRENT_STREAMS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_MAX_HOST_CONNECTIONS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_MAX_PIPELINE_LENGTH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_MAX_TOTAL_CONNECTIONS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_PIPELINING.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_PIPELINING_SERVER_BL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_PIPELINING_SITE_BL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_PUSHDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_PUSHFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_SOCKETDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_SOCKETFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_TIMERDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLMOPT_TIMERFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_ABSTRACT_UNIX_SOCKET.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_ACCEPTTIMEOUT_MS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_ACCEPT_ENCODING.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_ADDRESS_SCOPE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_ALTSVC.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_ALTSVC_CTRL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_APPEND.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_AUTOREFERER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_AWS_SIGV4.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_BUFFERSIZE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CAINFO.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CAINFO_BLOB.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CAPATH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CA_CACHE_TIMEOUT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CERTINFO.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CHUNK_BGN_FUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CHUNK_DATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CHUNK_END_FUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CLOSESOCKETDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CLOSESOCKETFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CONNECTTIMEOUT_MS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CONNECT_ONLY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CONNECT_TO.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CONV_FROM_NETWORK_FUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CONV_FROM_UTF8_FUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CONV_TO_NETWORK_FUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_COOKIE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_COOKIEFILE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_COOKIEJAR.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_COOKIELIST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_COOKIESESSION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_COPYPOSTFIELDS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CRLF.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CRLFILE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CURLU.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_CUSTOMREQUEST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DEBUGDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DEBUGFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DEFAULT_PROTOCOL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DIRLISTONLY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DISALLOW_USERNAME_IN_URL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DNS_CACHE_TIMEOUT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DNS_INTERFACE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP4.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DNS_LOCAL_IP6.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DNS_SERVERS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DNS_SHUFFLE_ADDRESSES.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DNS_USE_GLOBAL_CACHE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYHOST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYPEER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DOH_SSL_VERIFYSTATUS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_DOH_URL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_EGDSOCKET.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_ERRORBUFFER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_EXPECT_100_TIMEOUT_MS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FAILONERROR.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FILETIME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FNMATCH_DATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FNMATCH_FUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FOLLOWLOCATION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FORBID_REUSE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FRESH_CONNECT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTPPORT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTPSSLAUTH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTP_ACCOUNT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTP_ALTERNATIVE_TO_USER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTP_CREATE_MISSING_DIRS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTP_FILEMETHOD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTP_SKIP_PASV_IP.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTP_SSL_CCC.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTP_USE_EPRT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTP_USE_EPSV.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_FTP_USE_PRET.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_GSSAPI_DELEGATION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HAPPY_EYEBALLS_TIMEOUT_MS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HAPROXYPROTOCOL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HAPROXY_CLIENT_IP.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HEADER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HEADERDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HEADERFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HEADEROPT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HSTS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HSTSREADDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HSTSREADFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HSTSWRITEDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HSTSWRITEFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HSTS_CTRL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HTTP09_ALLOWED.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HTTP200ALIASES.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HTTPAUTH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HTTPGET.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HTTPHEADER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HTTPPOST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HTTPPROXYTUNNEL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HTTP_CONTENT_DECODING.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HTTP_TRANSFER_DECODING.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_HTTP_VERSION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_IGNORE_CONTENT_LENGTH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_INFILESIZE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_INFILESIZE_LARGE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_INTERFACE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_INTERLEAVEDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_INTERLEAVEFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_IOCTLDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_IOCTLFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_IPRESOLVE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_ISSUERCERT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_ISSUERCERT_BLOB.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_KEEP_SENDING_ON_ERROR.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_KEYPASSWD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_KRBLEVEL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_LOCALPORT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_LOCALPORTRANGE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_LOGIN_OPTIONS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_LOW_SPEED_LIMIT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_LOW_SPEED_TIME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAIL_AUTH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAIL_FROM.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAIL_RCPT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAIL_RCPT_ALLOWFAILS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAXAGE_CONN.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAXCONNECTS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAXFILESIZE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAXFILESIZE_LARGE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAXLIFETIME_CONN.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAXREDIRS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAX_RECV_SPEED_LARGE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MAX_SEND_SPEED_LARGE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MIMEPOST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_MIME_OPTIONS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_NETRC.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_NETRC_FILE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_NEW_DIRECTORY_PERMS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_NEW_FILE_PERMS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_NOBODY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_NOPROGRESS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_NOPROXY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_NOSIGNAL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_OPENSOCKETDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_OPENSOCKETFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PASSWORD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PATH_AS_IS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PIPEWAIT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PORT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_POST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_POSTFIELDS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_POSTFIELDSIZE_LARGE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_POSTQUOTE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_POSTREDIR.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PREQUOTE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PREREQDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PREREQFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PRE_PROXY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PRIVATE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROGRESSDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROGRESSFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROTOCOLS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROTOCOLS_STR.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXYAUTH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXYHEADER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXYPASSWORD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXYPORT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXYTYPE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXYUSERNAME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXYUSERPWD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_CAINFO.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_CAINFO_BLOB.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_CAPATH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_CRLFILE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_ISSUERCERT_BLOB.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_KEYPASSWD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_PINNEDPUBLICKEY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SERVICE_NAME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLCERTTYPE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLCERT_BLOB.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLKEYTYPE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLKEY_BLOB.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSLVERSION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_CIPHER_LIST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_OPTIONS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYHOST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_SSL_VERIFYPEER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_TLS13_CIPHERS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_PASSWORD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_TYPE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_TLSAUTH_USERNAME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PROXY_TRANSFER_MODE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_PUT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_QUICK_EXIT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_QUOTE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RANDOM_FILE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RANGE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_READDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_READFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_REDIR_PROTOCOLS_STR.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_REFERER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_REQUEST_TARGET.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RESOLVE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RESOLVER_START_DATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RESOLVER_START_FUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RESUME_FROM.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RESUME_FROM_LARGE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RTSP_CLIENT_CSEQ.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RTSP_REQUEST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RTSP_SERVER_CSEQ.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RTSP_SESSION_ID.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RTSP_STREAM_URI.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_RTSP_TRANSPORT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SASL_AUTHZID.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SASL_IR.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SEEKDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SEEKFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SERVER_RESPONSE_TIMEOUT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SERVICE_NAME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SHARE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SOCKOPTDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SOCKOPTFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SOCKS5_AUTH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_NEC.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SOCKS5_GSSAPI_SERVICE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_AUTH_TYPES.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_COMPRESSION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_HOSTKEYFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_MD5.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_HOST_PUBLIC_KEY_SHA256.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_KEYDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_KEYFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_KNOWNHOSTS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_PRIVATE_KEYFILE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSH_PUBLIC_KEYFILE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSLCERT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSLCERTTYPE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSLCERT_BLOB.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSLENGINE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSLENGINE_DEFAULT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSLKEY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSLKEYTYPE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSLKEY_BLOB.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSLVERSION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_CIPHER_LIST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_CTX_DATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_CTX_FUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_EC_CURVES.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_ENABLE_ALPN.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_ENABLE_NPN.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_FALSESTART.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_OPTIONS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_SESSIONID_CACHE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYHOST.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYPEER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SSL_VERIFYSTATUS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_STDERR.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_STREAM_DEPENDS_E.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_STREAM_WEIGHT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_SUPPRESS_CONNECT_HEADERS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TCP_FASTOPEN.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPALIVE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPIDLE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TCP_KEEPINTVL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TCP_NODELAY.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TELNETOPTIONS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TFTP_BLKSIZE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TFTP_NO_OPTIONS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TIMECONDITION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TIMEOUT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TIMEOUT_MS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TIMEVALUE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TIMEVALUE_LARGE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TLS13_CIPHERS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_PASSWORD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_TYPE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TLSAUTH_USERNAME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TRAILERDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TRAILERFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TRANSFERTEXT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_UNIX_SOCKET_PATH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_UNRESTRICTED_AUTH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_UPKEEP_INTERVAL_MS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_UPLOAD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_UPLOAD_BUFFERSIZE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_URL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_USERAGENT.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_USERNAME.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_USERPWD.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_USE_SSL.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_VERBOSE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_WILDCARDMATCH.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_WRITEDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_WRITEFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_WS_OPTIONS.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_XFERINFODATA.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_XFERINFOFUNCTION.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLOPT_XOAUTH2_BEARER.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLSHOPT_LOCKFUNC.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLSHOPT_SHARE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLSHOPT_UNLOCKFUNC.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLSHOPT_UNSHARE.3 create mode 100644 deps/curl/docs/libcurl/opts/CURLSHOPT_USERDATA.3 create mode 100644 deps/curl/docs/libcurl/opts/Makefile.am create mode 100644 deps/curl/docs/libcurl/opts/Makefile.inc create mode 100644 deps/curl/docs/libcurl/opts/template.3 create mode 100644 deps/curl/docs/libcurl/symbols-in-versions create mode 100644 deps/curl/docs/libcurl/symbols.pl create mode 100644 deps/curl/docs/mk-ca-bundle.1 create mode 100644 deps/curl/docs/options-in-versions create mode 100644 deps/curl/include/Makefile.am create mode 100644 deps/curl/include/README.md create mode 100644 deps/curl/include/curl/.gitignore create mode 100644 deps/curl/include/curl/Makefile.am create mode 100644 deps/curl/include/curl/curl.h create mode 100644 deps/curl/include/curl/curlver.h create mode 100644 deps/curl/include/curl/easy.h create mode 100644 deps/curl/include/curl/header.h create mode 100644 deps/curl/include/curl/mprintf.h create mode 100644 deps/curl/include/curl/multi.h create mode 100644 deps/curl/include/curl/options.h create mode 100644 deps/curl/include/curl/stdcheaders.h create mode 100644 deps/curl/include/curl/system.h create mode 100644 deps/curl/include/curl/typecheck-gcc.h create mode 100644 deps/curl/include/curl/urlapi.h create mode 100644 deps/curl/include/curl/websockets.h create mode 100644 deps/curl/lib/.checksrc create mode 100644 deps/curl/lib/.gitattributes create mode 100644 deps/curl/lib/.gitignore create mode 100644 deps/curl/lib/CMakeLists.txt create mode 100644 deps/curl/lib/Makefile.am create mode 100644 deps/curl/lib/Makefile.inc create mode 100644 deps/curl/lib/Makefile.mk create mode 100644 deps/curl/lib/Makefile.soname create mode 100644 deps/curl/lib/altsvc.c create mode 100644 deps/curl/lib/altsvc.h create mode 100644 deps/curl/lib/amigaos.c create mode 100644 deps/curl/lib/amigaos.h create mode 100644 deps/curl/lib/arpa_telnet.h create mode 100644 deps/curl/lib/asyn-ares.c create mode 100644 deps/curl/lib/asyn-thread.c create mode 100644 deps/curl/lib/asyn.h create mode 100644 deps/curl/lib/base64.c create mode 100644 deps/curl/lib/bufq.c create mode 100644 deps/curl/lib/bufq.h create mode 100644 deps/curl/lib/bufref.c create mode 100644 deps/curl/lib/bufref.h create mode 100644 deps/curl/lib/c-hyper.c create mode 100644 deps/curl/lib/c-hyper.h create mode 100644 deps/curl/lib/cf-h1-proxy.c create mode 100644 deps/curl/lib/cf-h1-proxy.h create mode 100644 deps/curl/lib/cf-h2-proxy.c create mode 100644 deps/curl/lib/cf-h2-proxy.h create mode 100644 deps/curl/lib/cf-haproxy.c create mode 100644 deps/curl/lib/cf-haproxy.h create mode 100644 deps/curl/lib/cf-https-connect.c create mode 100644 deps/curl/lib/cf-https-connect.h create mode 100644 deps/curl/lib/cf-socket.c create mode 100644 deps/curl/lib/cf-socket.h create mode 100644 deps/curl/lib/cfilters.c create mode 100644 deps/curl/lib/cfilters.h create mode 100644 deps/curl/lib/config-amigaos.h create mode 100644 deps/curl/lib/config-dos.h create mode 100644 deps/curl/lib/config-mac.h create mode 100644 deps/curl/lib/config-os400.h create mode 100644 deps/curl/lib/config-plan9.h create mode 100644 deps/curl/lib/config-riscos.h create mode 100644 deps/curl/lib/config-win32.h create mode 100644 deps/curl/lib/config-win32ce.h create mode 100644 deps/curl/lib/conncache.c create mode 100644 deps/curl/lib/conncache.h create mode 100644 deps/curl/lib/connect.c create mode 100644 deps/curl/lib/connect.h create mode 100644 deps/curl/lib/content_encoding.c create mode 100644 deps/curl/lib/content_encoding.h create mode 100644 deps/curl/lib/cookie.c create mode 100644 deps/curl/lib/cookie.h create mode 100644 deps/curl/lib/curl_addrinfo.c create mode 100644 deps/curl/lib/curl_addrinfo.h create mode 100644 deps/curl/lib/curl_base64.h create mode 100644 deps/curl/lib/curl_config.h.cmake create mode 100644 deps/curl/lib/curl_ctype.h create mode 100644 deps/curl/lib/curl_des.c create mode 100644 deps/curl/lib/curl_des.h create mode 100644 deps/curl/lib/curl_endian.c create mode 100644 deps/curl/lib/curl_endian.h create mode 100644 deps/curl/lib/curl_fnmatch.c create mode 100644 deps/curl/lib/curl_fnmatch.h create mode 100644 deps/curl/lib/curl_get_line.c create mode 100644 deps/curl/lib/curl_get_line.h create mode 100644 deps/curl/lib/curl_gethostname.c create mode 100644 deps/curl/lib/curl_gethostname.h create mode 100644 deps/curl/lib/curl_gssapi.c create mode 100644 deps/curl/lib/curl_gssapi.h create mode 100644 deps/curl/lib/curl_hmac.h create mode 100644 deps/curl/lib/curl_krb5.h create mode 100644 deps/curl/lib/curl_ldap.h create mode 100644 deps/curl/lib/curl_md4.h create mode 100644 deps/curl/lib/curl_md5.h create mode 100644 deps/curl/lib/curl_memory.h create mode 100644 deps/curl/lib/curl_memrchr.c create mode 100644 deps/curl/lib/curl_memrchr.h create mode 100644 deps/curl/lib/curl_multibyte.c create mode 100644 deps/curl/lib/curl_multibyte.h create mode 100644 deps/curl/lib/curl_ntlm_core.c create mode 100644 deps/curl/lib/curl_ntlm_core.h create mode 100644 deps/curl/lib/curl_ntlm_wb.c create mode 100644 deps/curl/lib/curl_ntlm_wb.h create mode 100644 deps/curl/lib/curl_path.c create mode 100644 deps/curl/lib/curl_path.h create mode 100644 deps/curl/lib/curl_printf.h create mode 100644 deps/curl/lib/curl_range.c create mode 100644 deps/curl/lib/curl_range.h create mode 100644 deps/curl/lib/curl_rtmp.c create mode 100644 deps/curl/lib/curl_rtmp.h create mode 100644 deps/curl/lib/curl_sasl.c create mode 100644 deps/curl/lib/curl_sasl.h create mode 100644 deps/curl/lib/curl_setup.h create mode 100644 deps/curl/lib/curl_setup_once.h create mode 100644 deps/curl/lib/curl_sha256.h create mode 100644 deps/curl/lib/curl_sspi.c create mode 100644 deps/curl/lib/curl_sspi.h create mode 100644 deps/curl/lib/curl_threads.c create mode 100644 deps/curl/lib/curl_threads.h create mode 100644 deps/curl/lib/curl_trc.c create mode 100644 deps/curl/lib/curl_trc.h create mode 100644 deps/curl/lib/curlx.h create mode 100644 deps/curl/lib/dict.c create mode 100644 deps/curl/lib/dict.h create mode 100644 deps/curl/lib/doh.c create mode 100644 deps/curl/lib/doh.h create mode 100644 deps/curl/lib/dynbuf.c create mode 100644 deps/curl/lib/dynbuf.h create mode 100644 deps/curl/lib/dynhds.c create mode 100644 deps/curl/lib/dynhds.h create mode 100644 deps/curl/lib/easy.c create mode 100644 deps/curl/lib/easy_lock.h create mode 100644 deps/curl/lib/easygetopt.c create mode 100644 deps/curl/lib/easyif.h create mode 100644 deps/curl/lib/easyoptions.c create mode 100644 deps/curl/lib/easyoptions.h create mode 100644 deps/curl/lib/escape.c create mode 100644 deps/curl/lib/escape.h create mode 100644 deps/curl/lib/file.c create mode 100644 deps/curl/lib/file.h create mode 100644 deps/curl/lib/fileinfo.c create mode 100644 deps/curl/lib/fileinfo.h create mode 100644 deps/curl/lib/fopen.c create mode 100644 deps/curl/lib/fopen.h create mode 100644 deps/curl/lib/formdata.c create mode 100644 deps/curl/lib/formdata.h create mode 100644 deps/curl/lib/ftp.c create mode 100644 deps/curl/lib/ftp.h create mode 100644 deps/curl/lib/ftplistparser.c create mode 100644 deps/curl/lib/ftplistparser.h create mode 100644 deps/curl/lib/functypes.h create mode 100644 deps/curl/lib/getenv.c create mode 100644 deps/curl/lib/getinfo.c create mode 100644 deps/curl/lib/getinfo.h create mode 100644 deps/curl/lib/gopher.c create mode 100644 deps/curl/lib/gopher.h create mode 100644 deps/curl/lib/hash.c create mode 100644 deps/curl/lib/hash.h create mode 100644 deps/curl/lib/headers.c create mode 100644 deps/curl/lib/headers.h create mode 100644 deps/curl/lib/hmac.c create mode 100644 deps/curl/lib/hostasyn.c create mode 100644 deps/curl/lib/hostip.c create mode 100644 deps/curl/lib/hostip.h create mode 100644 deps/curl/lib/hostip4.c create mode 100644 deps/curl/lib/hostip6.c create mode 100644 deps/curl/lib/hostsyn.c create mode 100644 deps/curl/lib/hsts.c create mode 100644 deps/curl/lib/hsts.h create mode 100644 deps/curl/lib/http.c create mode 100644 deps/curl/lib/http.h create mode 100644 deps/curl/lib/http1.c create mode 100644 deps/curl/lib/http1.h create mode 100644 deps/curl/lib/http2.c create mode 100644 deps/curl/lib/http2.h create mode 100644 deps/curl/lib/http_aws_sigv4.c create mode 100644 deps/curl/lib/http_aws_sigv4.h create mode 100644 deps/curl/lib/http_chunks.c create mode 100644 deps/curl/lib/http_chunks.h create mode 100644 deps/curl/lib/http_digest.c create mode 100644 deps/curl/lib/http_digest.h create mode 100644 deps/curl/lib/http_negotiate.c create mode 100644 deps/curl/lib/http_negotiate.h create mode 100644 deps/curl/lib/http_ntlm.c create mode 100644 deps/curl/lib/http_ntlm.h create mode 100644 deps/curl/lib/http_proxy.c create mode 100644 deps/curl/lib/http_proxy.h create mode 100644 deps/curl/lib/idn.c create mode 100644 deps/curl/lib/idn.h create mode 100644 deps/curl/lib/if2ip.c create mode 100644 deps/curl/lib/if2ip.h create mode 100644 deps/curl/lib/imap.c create mode 100644 deps/curl/lib/imap.h create mode 100644 deps/curl/lib/inet_ntop.c create mode 100644 deps/curl/lib/inet_ntop.h create mode 100644 deps/curl/lib/inet_pton.c create mode 100644 deps/curl/lib/inet_pton.h create mode 100644 deps/curl/lib/krb5.c create mode 100644 deps/curl/lib/ldap.c create mode 100644 deps/curl/lib/libcurl.plist.in create mode 100644 deps/curl/lib/libcurl.rc create mode 100644 deps/curl/lib/libcurl.vers.in create mode 100644 deps/curl/lib/llist.c create mode 100644 deps/curl/lib/llist.h create mode 100644 deps/curl/lib/macos.c create mode 100644 deps/curl/lib/macos.h create mode 100644 deps/curl/lib/md4.c create mode 100644 deps/curl/lib/md5.c create mode 100644 deps/curl/lib/memdebug.c create mode 100644 deps/curl/lib/memdebug.h create mode 100644 deps/curl/lib/mime.c create mode 100644 deps/curl/lib/mime.h create mode 100644 deps/curl/lib/mprintf.c create mode 100644 deps/curl/lib/mqtt.c create mode 100644 deps/curl/lib/mqtt.h create mode 100644 deps/curl/lib/multi.c create mode 100644 deps/curl/lib/multihandle.h create mode 100644 deps/curl/lib/multiif.h create mode 100644 deps/curl/lib/netrc.c create mode 100644 deps/curl/lib/netrc.h create mode 100644 deps/curl/lib/nonblock.c create mode 100644 deps/curl/lib/nonblock.h create mode 100644 deps/curl/lib/noproxy.c create mode 100644 deps/curl/lib/noproxy.h create mode 100644 deps/curl/lib/openldap.c create mode 100644 deps/curl/lib/optiontable.pl create mode 100644 deps/curl/lib/parsedate.c create mode 100644 deps/curl/lib/parsedate.h create mode 100644 deps/curl/lib/pingpong.c create mode 100644 deps/curl/lib/pingpong.h create mode 100644 deps/curl/lib/pop3.c create mode 100644 deps/curl/lib/pop3.h create mode 100644 deps/curl/lib/progress.c create mode 100644 deps/curl/lib/progress.h create mode 100644 deps/curl/lib/psl.c create mode 100644 deps/curl/lib/psl.h create mode 100644 deps/curl/lib/rand.c create mode 100644 deps/curl/lib/rand.h create mode 100644 deps/curl/lib/rename.c create mode 100644 deps/curl/lib/rename.h create mode 100644 deps/curl/lib/rtsp.c create mode 100644 deps/curl/lib/rtsp.h create mode 100644 deps/curl/lib/select.c create mode 100644 deps/curl/lib/select.h create mode 100644 deps/curl/lib/sendf.c create mode 100644 deps/curl/lib/sendf.h create mode 100644 deps/curl/lib/setopt.c create mode 100644 deps/curl/lib/setopt.h create mode 100644 deps/curl/lib/setup-os400.h create mode 100644 deps/curl/lib/setup-vms.h create mode 100644 deps/curl/lib/setup-win32.h create mode 100644 deps/curl/lib/sha256.c create mode 100644 deps/curl/lib/share.c create mode 100644 deps/curl/lib/share.h create mode 100644 deps/curl/lib/sigpipe.h create mode 100644 deps/curl/lib/slist.c create mode 100644 deps/curl/lib/slist.h create mode 100644 deps/curl/lib/smb.c create mode 100644 deps/curl/lib/smb.h create mode 100644 deps/curl/lib/smtp.c create mode 100644 deps/curl/lib/smtp.h create mode 100644 deps/curl/lib/sockaddr.h create mode 100644 deps/curl/lib/socketpair.c create mode 100644 deps/curl/lib/socketpair.h create mode 100644 deps/curl/lib/socks.c create mode 100644 deps/curl/lib/socks.h create mode 100644 deps/curl/lib/socks_gssapi.c create mode 100644 deps/curl/lib/socks_sspi.c create mode 100644 deps/curl/lib/speedcheck.c create mode 100644 deps/curl/lib/speedcheck.h create mode 100644 deps/curl/lib/splay.c create mode 100644 deps/curl/lib/splay.h create mode 100644 deps/curl/lib/strcase.c create mode 100644 deps/curl/lib/strcase.h create mode 100644 deps/curl/lib/strdup.c create mode 100644 deps/curl/lib/strdup.h create mode 100644 deps/curl/lib/strerror.c create mode 100644 deps/curl/lib/strerror.h create mode 100644 deps/curl/lib/strtok.c create mode 100644 deps/curl/lib/strtok.h create mode 100644 deps/curl/lib/strtoofft.c create mode 100644 deps/curl/lib/strtoofft.h create mode 100644 deps/curl/lib/system_win32.c create mode 100644 deps/curl/lib/system_win32.h create mode 100644 deps/curl/lib/telnet.c create mode 100644 deps/curl/lib/telnet.h create mode 100644 deps/curl/lib/tftp.c create mode 100644 deps/curl/lib/tftp.h create mode 100644 deps/curl/lib/timediff.c create mode 100644 deps/curl/lib/timediff.h create mode 100644 deps/curl/lib/timeval.c create mode 100644 deps/curl/lib/timeval.h create mode 100644 deps/curl/lib/transfer.c create mode 100644 deps/curl/lib/transfer.h create mode 100644 deps/curl/lib/url.c create mode 100644 deps/curl/lib/url.h create mode 100644 deps/curl/lib/urlapi-int.h create mode 100644 deps/curl/lib/urlapi.c create mode 100644 deps/curl/lib/urldata.h create mode 100644 deps/curl/lib/vauth/cleartext.c create mode 100644 deps/curl/lib/vauth/cram.c create mode 100644 deps/curl/lib/vauth/digest.c create mode 100644 deps/curl/lib/vauth/digest.h create mode 100644 deps/curl/lib/vauth/digest_sspi.c create mode 100644 deps/curl/lib/vauth/gsasl.c create mode 100644 deps/curl/lib/vauth/krb5_gssapi.c create mode 100644 deps/curl/lib/vauth/krb5_sspi.c create mode 100644 deps/curl/lib/vauth/ntlm.c create mode 100644 deps/curl/lib/vauth/ntlm.h create mode 100644 deps/curl/lib/vauth/ntlm_sspi.c create mode 100644 deps/curl/lib/vauth/oauth2.c create mode 100644 deps/curl/lib/vauth/spnego_gssapi.c create mode 100644 deps/curl/lib/vauth/spnego_sspi.c create mode 100644 deps/curl/lib/vauth/vauth.c create mode 100644 deps/curl/lib/vauth/vauth.h create mode 100644 deps/curl/lib/version.c create mode 100644 deps/curl/lib/version_win32.c create mode 100644 deps/curl/lib/version_win32.h create mode 100644 deps/curl/lib/vquic/curl_msh3.c create mode 100644 deps/curl/lib/vquic/curl_msh3.h create mode 100644 deps/curl/lib/vquic/curl_ngtcp2.c create mode 100644 deps/curl/lib/vquic/curl_ngtcp2.h create mode 100644 deps/curl/lib/vquic/curl_quiche.c create mode 100644 deps/curl/lib/vquic/curl_quiche.h create mode 100644 deps/curl/lib/vquic/vquic.c create mode 100644 deps/curl/lib/vquic/vquic.h create mode 100644 deps/curl/lib/vquic/vquic_int.h create mode 100644 deps/curl/lib/vssh/libssh.c create mode 100644 deps/curl/lib/vssh/libssh2.c create mode 100644 deps/curl/lib/vssh/ssh.h create mode 100644 deps/curl/lib/vssh/wolfssh.c create mode 100644 deps/curl/lib/vtls/bearssl.c create mode 100644 deps/curl/lib/vtls/bearssl.h create mode 100644 deps/curl/lib/vtls/gtls.c create mode 100644 deps/curl/lib/vtls/gtls.h create mode 100644 deps/curl/lib/vtls/hostcheck.c create mode 100644 deps/curl/lib/vtls/hostcheck.h create mode 100644 deps/curl/lib/vtls/keylog.c create mode 100644 deps/curl/lib/vtls/keylog.h create mode 100644 deps/curl/lib/vtls/mbedtls.c create mode 100644 deps/curl/lib/vtls/mbedtls.h create mode 100644 deps/curl/lib/vtls/mbedtls_threadlock.c create mode 100644 deps/curl/lib/vtls/mbedtls_threadlock.h create mode 100644 deps/curl/lib/vtls/openssl.c create mode 100644 deps/curl/lib/vtls/openssl.h create mode 100644 deps/curl/lib/vtls/rustls.c create mode 100644 deps/curl/lib/vtls/rustls.h create mode 100644 deps/curl/lib/vtls/schannel.c create mode 100644 deps/curl/lib/vtls/schannel.h create mode 100644 deps/curl/lib/vtls/schannel_int.h create mode 100644 deps/curl/lib/vtls/schannel_verify.c create mode 100644 deps/curl/lib/vtls/sectransp.c create mode 100644 deps/curl/lib/vtls/sectransp.h create mode 100644 deps/curl/lib/vtls/vtls.c create mode 100644 deps/curl/lib/vtls/vtls.h create mode 100644 deps/curl/lib/vtls/vtls_int.h create mode 100644 deps/curl/lib/vtls/wolfssl.c create mode 100644 deps/curl/lib/vtls/wolfssl.h create mode 100644 deps/curl/lib/vtls/x509asn1.c create mode 100644 deps/curl/lib/vtls/x509asn1.h create mode 100644 deps/curl/lib/warnless.c create mode 100644 deps/curl/lib/warnless.h create mode 100644 deps/curl/lib/ws.c create mode 100644 deps/curl/lib/ws.h create mode 100644 deps/curl/libcurl.def create mode 100644 deps/curl/libcurl.pc.in create mode 100644 deps/curl/m4/.gitignore create mode 100644 deps/curl/m4/curl-amissl.m4 create mode 100644 deps/curl/m4/curl-bearssl.m4 create mode 100644 deps/curl/m4/curl-compilers.m4 create mode 100644 deps/curl/m4/curl-confopts.m4 create mode 100644 deps/curl/m4/curl-functions.m4 create mode 100644 deps/curl/m4/curl-gnutls.m4 create mode 100644 deps/curl/m4/curl-mbedtls.m4 create mode 100644 deps/curl/m4/curl-openssl.m4 create mode 100644 deps/curl/m4/curl-override.m4 create mode 100644 deps/curl/m4/curl-reentrant.m4 create mode 100644 deps/curl/m4/curl-rustls.m4 create mode 100644 deps/curl/m4/curl-schannel.m4 create mode 100644 deps/curl/m4/curl-sectransp.m4 create mode 100644 deps/curl/m4/curl-sysconfig.m4 create mode 100644 deps/curl/m4/curl-wolfssl.m4 create mode 100644 deps/curl/m4/xc-am-iface.m4 create mode 100644 deps/curl/m4/xc-cc-check.m4 create mode 100644 deps/curl/m4/xc-lt-iface.m4 create mode 100644 deps/curl/m4/xc-translit.m4 create mode 100644 deps/curl/m4/xc-val-flgs.m4 create mode 100644 deps/curl/m4/zz40-xc-ovr.m4 create mode 100644 deps/curl/m4/zz50-xc-ovr.m4 create mode 100644 deps/curl/m4/zz60-xc-ovr.m4 create mode 100644 deps/curl/maketgz create mode 100644 deps/curl/packages/Makefile.am create mode 100644 deps/curl/packages/OS400/README.OS400 create mode 100644 deps/curl/packages/OS400/ccsidcurl.c create mode 100644 deps/curl/packages/OS400/ccsidcurl.h create mode 100644 deps/curl/packages/OS400/config400.default create mode 100644 deps/curl/packages/OS400/curl.cmd create mode 100644 deps/curl/packages/OS400/curl.inc.in create mode 100644 deps/curl/packages/OS400/curlcl.c create mode 100644 deps/curl/packages/OS400/curlmain.c create mode 100644 deps/curl/packages/OS400/initscript.sh create mode 100644 deps/curl/packages/OS400/make-include.sh create mode 100644 deps/curl/packages/OS400/make-lib.sh create mode 100644 deps/curl/packages/OS400/make-src.sh create mode 100644 deps/curl/packages/OS400/make-tests.sh create mode 100644 deps/curl/packages/OS400/makefile.sh create mode 100644 deps/curl/packages/OS400/os400sys.c create mode 100644 deps/curl/packages/OS400/os400sys.h create mode 100644 deps/curl/packages/OS400/rpg-examples/HEADERAPI create mode 100644 deps/curl/packages/OS400/rpg-examples/HTTPPOST create mode 100644 deps/curl/packages/OS400/rpg-examples/INMEMORY create mode 100644 deps/curl/packages/OS400/rpg-examples/SIMPLE1 create mode 100644 deps/curl/packages/OS400/rpg-examples/SIMPLE2 create mode 100644 deps/curl/packages/OS400/rpg-examples/SMTPSRCMBR create mode 100644 deps/curl/packages/README.md create mode 100644 deps/curl/packages/vms/Makefile.am create mode 100644 deps/curl/packages/vms/backup_gnv_curl_src.com create mode 100644 deps/curl/packages/vms/build_curl-config_script.com create mode 100644 deps/curl/packages/vms/build_gnv_curl.com create mode 100644 deps/curl/packages/vms/build_gnv_curl_pcsi_desc.com create mode 100644 deps/curl/packages/vms/build_gnv_curl_pcsi_text.com create mode 100644 deps/curl/packages/vms/build_gnv_curl_release_notes.com create mode 100644 deps/curl/packages/vms/build_libcurl_pc.com create mode 100644 deps/curl/packages/vms/build_vms.com create mode 100644 deps/curl/packages/vms/clean_gnv_curl.com create mode 100644 deps/curl/packages/vms/compare_curl_source.com create mode 100644 deps/curl/packages/vms/config_h.com create mode 100644 deps/curl/packages/vms/curl_crtl_init.c create mode 100644 deps/curl/packages/vms/curl_gnv_build_steps.txt create mode 100644 deps/curl/packages/vms/curl_release_note_start.txt create mode 100644 deps/curl/packages/vms/curl_startup.com create mode 100644 deps/curl/packages/vms/curlmsg.h create mode 100644 deps/curl/packages/vms/curlmsg.msg create mode 100644 deps/curl/packages/vms/curlmsg.sdl create mode 100644 deps/curl/packages/vms/curlmsg_vms.h create mode 100644 deps/curl/packages/vms/generate_config_vms_h_curl.com create mode 100644 deps/curl/packages/vms/generate_vax_transfer.com create mode 100644 deps/curl/packages/vms/gnv_conftest.c_first create mode 100644 deps/curl/packages/vms/gnv_curl_configure.sh create mode 100644 deps/curl/packages/vms/gnv_libcurl_symbols.opt create mode 100644 deps/curl/packages/vms/gnv_link_curl.com create mode 100644 deps/curl/packages/vms/macro32_exactcase.patch create mode 100644 deps/curl/packages/vms/make_gnv_curl_install.sh create mode 100644 deps/curl/packages/vms/make_pcsi_curl_kit_name.com create mode 100644 deps/curl/packages/vms/pcsi_gnv_curl_file_list.txt create mode 100644 deps/curl/packages/vms/pcsi_product_gnv_curl.com create mode 100644 deps/curl/packages/vms/readme create mode 100644 deps/curl/packages/vms/report_openssl_version.c create mode 100644 deps/curl/packages/vms/setup_gnv_curl_build.com create mode 100644 deps/curl/packages/vms/stage_curl_install.com create mode 100644 deps/curl/packages/vms/vms_eco_level.h create mode 100644 deps/curl/plan9/README create mode 100644 deps/curl/plan9/include/mkfile create mode 100644 deps/curl/plan9/lib/mkfile create mode 100644 deps/curl/plan9/lib/mkfile.inc create mode 100644 deps/curl/plan9/mkfile create mode 100644 deps/curl/plan9/mkfile.proto create mode 100644 deps/curl/plan9/src/mkfile create mode 100644 deps/curl/plan9/src/mkfile.inc create mode 100644 deps/curl/projects/README.md create mode 100644 deps/curl/projects/Windows/.gitattributes create mode 100644 deps/curl/projects/Windows/.gitignore create mode 100644 deps/curl/projects/Windows/VC10/.gitignore create mode 100644 deps/curl/projects/Windows/VC10/curl-all.sln create mode 100644 deps/curl/projects/Windows/VC10/lib/.gitignore create mode 100644 deps/curl/projects/Windows/VC10/lib/libcurl.sln create mode 100644 deps/curl/projects/Windows/VC10/lib/libcurl.tmpl create mode 100644 deps/curl/projects/Windows/VC10/lib/libcurl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC10/src/.gitignore create mode 100644 deps/curl/projects/Windows/VC10/src/curl.sln create mode 100644 deps/curl/projects/Windows/VC10/src/curl.tmpl create mode 100644 deps/curl/projects/Windows/VC10/src/curl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC11/.gitignore create mode 100644 deps/curl/projects/Windows/VC11/curl-all.sln create mode 100644 deps/curl/projects/Windows/VC11/lib/.gitignore create mode 100644 deps/curl/projects/Windows/VC11/lib/libcurl.sln create mode 100644 deps/curl/projects/Windows/VC11/lib/libcurl.tmpl create mode 100644 deps/curl/projects/Windows/VC11/lib/libcurl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC11/src/.gitignore create mode 100644 deps/curl/projects/Windows/VC11/src/curl.sln create mode 100644 deps/curl/projects/Windows/VC11/src/curl.tmpl create mode 100644 deps/curl/projects/Windows/VC11/src/curl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC12/.gitignore create mode 100644 deps/curl/projects/Windows/VC12/curl-all.sln create mode 100644 deps/curl/projects/Windows/VC12/lib/.gitignore create mode 100644 deps/curl/projects/Windows/VC12/lib/libcurl.sln create mode 100644 deps/curl/projects/Windows/VC12/lib/libcurl.tmpl create mode 100644 deps/curl/projects/Windows/VC12/lib/libcurl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC12/src/.gitignore create mode 100644 deps/curl/projects/Windows/VC12/src/curl.sln create mode 100644 deps/curl/projects/Windows/VC12/src/curl.tmpl create mode 100644 deps/curl/projects/Windows/VC12/src/curl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC14.10/.gitignore create mode 100644 deps/curl/projects/Windows/VC14.10/curl-all.sln create mode 100644 deps/curl/projects/Windows/VC14.10/lib/.gitignore create mode 100644 deps/curl/projects/Windows/VC14.10/lib/libcurl.sln create mode 100644 deps/curl/projects/Windows/VC14.10/lib/libcurl.tmpl create mode 100644 deps/curl/projects/Windows/VC14.10/lib/libcurl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC14.10/src/.gitignore create mode 100644 deps/curl/projects/Windows/VC14.10/src/curl.sln create mode 100644 deps/curl/projects/Windows/VC14.10/src/curl.tmpl create mode 100644 deps/curl/projects/Windows/VC14.10/src/curl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC14.20/.gitignore create mode 100644 deps/curl/projects/Windows/VC14.20/curl-all.sln create mode 100644 deps/curl/projects/Windows/VC14.20/lib/.gitignore create mode 100644 deps/curl/projects/Windows/VC14.20/lib/libcurl.sln create mode 100644 deps/curl/projects/Windows/VC14.20/lib/libcurl.tmpl create mode 100644 deps/curl/projects/Windows/VC14.20/lib/libcurl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC14.20/src/.gitignore create mode 100644 deps/curl/projects/Windows/VC14.20/src/curl.sln create mode 100644 deps/curl/projects/Windows/VC14.20/src/curl.tmpl create mode 100644 deps/curl/projects/Windows/VC14.20/src/curl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC14.30/.gitignore create mode 100644 deps/curl/projects/Windows/VC14.30/curl-all.sln create mode 100644 deps/curl/projects/Windows/VC14.30/lib/.gitignore create mode 100644 deps/curl/projects/Windows/VC14.30/lib/libcurl.sln create mode 100644 deps/curl/projects/Windows/VC14.30/lib/libcurl.tmpl create mode 100644 deps/curl/projects/Windows/VC14.30/lib/libcurl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC14.30/src/.gitignore create mode 100644 deps/curl/projects/Windows/VC14.30/src/curl.sln create mode 100644 deps/curl/projects/Windows/VC14.30/src/curl.tmpl create mode 100644 deps/curl/projects/Windows/VC14.30/src/curl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC14/.gitignore create mode 100644 deps/curl/projects/Windows/VC14/curl-all.sln create mode 100644 deps/curl/projects/Windows/VC14/lib/.gitignore create mode 100644 deps/curl/projects/Windows/VC14/lib/libcurl.sln create mode 100644 deps/curl/projects/Windows/VC14/lib/libcurl.tmpl create mode 100644 deps/curl/projects/Windows/VC14/lib/libcurl.vcxproj.filters create mode 100644 deps/curl/projects/Windows/VC14/src/.gitignore create mode 100644 deps/curl/projects/Windows/VC14/src/curl.sln create mode 100644 deps/curl/projects/Windows/VC14/src/curl.tmpl create mode 100644 deps/curl/projects/Windows/VC14/src/curl.vcxproj.filters create mode 100644 deps/curl/projects/build-openssl.bat create mode 100644 deps/curl/projects/build-wolfssl.bat create mode 100644 deps/curl/projects/checksrc.bat create mode 100644 deps/curl/projects/generate.bat create mode 100644 deps/curl/projects/wolfssl_options.h create mode 100644 deps/curl/projects/wolfssl_override.props create mode 100644 deps/curl/scripts/Makefile.am create mode 100644 deps/curl/scripts/checksrc.pl create mode 100644 deps/curl/scripts/ciconfig.pl create mode 100644 deps/curl/scripts/cijobs.pl create mode 100644 deps/curl/scripts/cmp-config.pl create mode 100644 deps/curl/scripts/completion.pl create mode 100644 deps/curl/scripts/contributors.sh create mode 100644 deps/curl/scripts/contrithanks.sh create mode 100644 deps/curl/scripts/copyright.pl create mode 100644 deps/curl/scripts/coverage.sh create mode 100644 deps/curl/scripts/delta create mode 100644 deps/curl/scripts/firefox-db2pem.sh create mode 100644 deps/curl/scripts/installcheck.sh create mode 100644 deps/curl/scripts/log2changes.pl create mode 100644 deps/curl/scripts/mk-ca-bundle.pl create mode 100644 deps/curl/scripts/release-notes.pl create mode 100644 deps/curl/scripts/schemetable.c create mode 100644 deps/curl/scripts/singleuse.pl create mode 100644 deps/curl/scripts/updatemanpages.pl create mode 100644 deps/curl/src/.checksrc create mode 100644 deps/curl/src/.gitignore create mode 100644 deps/curl/src/CMakeLists.txt create mode 100644 deps/curl/src/Makefile.am create mode 100644 deps/curl/src/Makefile.inc create mode 100644 deps/curl/src/Makefile.mk create mode 100644 deps/curl/src/curl.rc create mode 100644 deps/curl/src/mkhelp.pl create mode 100644 deps/curl/src/slist_wc.c create mode 100644 deps/curl/src/slist_wc.h create mode 100644 deps/curl/src/tool_binmode.c create mode 100644 deps/curl/src/tool_binmode.h create mode 100644 deps/curl/src/tool_bname.c create mode 100644 deps/curl/src/tool_bname.h create mode 100644 deps/curl/src/tool_cb_dbg.c create mode 100644 deps/curl/src/tool_cb_dbg.h create mode 100644 deps/curl/src/tool_cb_hdr.c create mode 100644 deps/curl/src/tool_cb_hdr.h create mode 100644 deps/curl/src/tool_cb_prg.c create mode 100644 deps/curl/src/tool_cb_prg.h create mode 100644 deps/curl/src/tool_cb_rea.c create mode 100644 deps/curl/src/tool_cb_rea.h create mode 100644 deps/curl/src/tool_cb_see.c create mode 100644 deps/curl/src/tool_cb_see.h create mode 100644 deps/curl/src/tool_cb_wrt.c create mode 100644 deps/curl/src/tool_cb_wrt.h create mode 100644 deps/curl/src/tool_cfgable.c create mode 100644 deps/curl/src/tool_cfgable.h create mode 100644 deps/curl/src/tool_dirhie.c create mode 100644 deps/curl/src/tool_dirhie.h create mode 100644 deps/curl/src/tool_doswin.c create mode 100644 deps/curl/src/tool_doswin.h create mode 100644 deps/curl/src/tool_easysrc.c create mode 100644 deps/curl/src/tool_easysrc.h create mode 100644 deps/curl/src/tool_filetime.c create mode 100644 deps/curl/src/tool_filetime.h create mode 100644 deps/curl/src/tool_findfile.c create mode 100644 deps/curl/src/tool_findfile.h create mode 100644 deps/curl/src/tool_formparse.c create mode 100644 deps/curl/src/tool_formparse.h create mode 100644 deps/curl/src/tool_getparam.c create mode 100644 deps/curl/src/tool_getparam.h create mode 100644 deps/curl/src/tool_getpass.c create mode 100644 deps/curl/src/tool_getpass.h create mode 100644 deps/curl/src/tool_help.c create mode 100644 deps/curl/src/tool_help.h create mode 100644 deps/curl/src/tool_helpers.c create mode 100644 deps/curl/src/tool_helpers.h create mode 100644 deps/curl/src/tool_hugehelp.c.cvs create mode 100644 deps/curl/src/tool_hugehelp.h create mode 100644 deps/curl/src/tool_ipfs.c create mode 100644 deps/curl/src/tool_ipfs.h create mode 100644 deps/curl/src/tool_libinfo.c create mode 100644 deps/curl/src/tool_libinfo.h create mode 100644 deps/curl/src/tool_listhelp.c create mode 100644 deps/curl/src/tool_main.c create mode 100644 deps/curl/src/tool_main.h create mode 100644 deps/curl/src/tool_msgs.c create mode 100644 deps/curl/src/tool_msgs.h create mode 100644 deps/curl/src/tool_operate.c create mode 100644 deps/curl/src/tool_operate.h create mode 100644 deps/curl/src/tool_operhlp.c create mode 100644 deps/curl/src/tool_operhlp.h create mode 100644 deps/curl/src/tool_paramhlp.c create mode 100644 deps/curl/src/tool_paramhlp.h create mode 100644 deps/curl/src/tool_parsecfg.c create mode 100644 deps/curl/src/tool_parsecfg.h create mode 100644 deps/curl/src/tool_progress.c create mode 100644 deps/curl/src/tool_progress.h create mode 100644 deps/curl/src/tool_sdecls.h create mode 100644 deps/curl/src/tool_setopt.c create mode 100644 deps/curl/src/tool_setopt.h create mode 100644 deps/curl/src/tool_setup.h create mode 100644 deps/curl/src/tool_sleep.c create mode 100644 deps/curl/src/tool_sleep.h create mode 100644 deps/curl/src/tool_stderr.c create mode 100644 deps/curl/src/tool_stderr.h create mode 100644 deps/curl/src/tool_strdup.c create mode 100644 deps/curl/src/tool_strdup.h create mode 100644 deps/curl/src/tool_urlglob.c create mode 100644 deps/curl/src/tool_urlglob.h create mode 100644 deps/curl/src/tool_util.c create mode 100644 deps/curl/src/tool_util.h create mode 100644 deps/curl/src/tool_version.h create mode 100644 deps/curl/src/tool_vms.c create mode 100644 deps/curl/src/tool_vms.h create mode 100644 deps/curl/src/tool_writeout.c create mode 100644 deps/curl/src/tool_writeout.h create mode 100644 deps/curl/src/tool_writeout_json.c create mode 100644 deps/curl/src/tool_writeout_json.h create mode 100644 deps/curl/src/tool_xattr.c create mode 100644 deps/curl/src/tool_xattr.h create mode 100644 deps/curl/src/var.c create mode 100644 deps/curl/src/var.h create mode 100644 deps/curl/tests/.gitignore create mode 100644 deps/curl/tests/CI.md create mode 100644 deps/curl/tests/CMakeLists.txt create mode 100644 deps/curl/tests/FILEFORMAT.md create mode 100644 deps/curl/tests/Makefile.am create mode 100644 deps/curl/tests/README.md create mode 100644 deps/curl/tests/appveyor.pm create mode 100644 deps/curl/tests/azure.pm create mode 100644 deps/curl/tests/badsymbols.pl create mode 100644 deps/curl/tests/certs/.gitignore create mode 100644 deps/curl/tests/certs/EdelCurlRoot-ca.cacert create mode 100644 deps/curl/tests/certs/EdelCurlRoot-ca.cnf create mode 100644 deps/curl/tests/certs/EdelCurlRoot-ca.crt create mode 100644 deps/curl/tests/certs/EdelCurlRoot-ca.csr create mode 100644 deps/curl/tests/certs/EdelCurlRoot-ca.der create mode 100644 deps/curl/tests/certs/EdelCurlRoot-ca.key create mode 100644 deps/curl/tests/certs/EdelCurlRoot-ca.prm create mode 100644 deps/curl/tests/certs/Makefile.am create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.crl create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.crt create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.csr create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.der create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.dhp create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.key create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.pem create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.prm create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.pub.der create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.pub.pem create mode 100644 deps/curl/tests/certs/Server-localhost-firstSAN-sv.pubkey-pinned create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.crl create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.crt create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.csr create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.der create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.dhp create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.key create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.pem create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.prm create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.pub.der create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.pub.pem create mode 100644 deps/curl/tests/certs/Server-localhost-lastSAN-sv.pubkey-pinned create mode 100644 deps/curl/tests/certs/Server-localhost-sv.crl create mode 100644 deps/curl/tests/certs/Server-localhost-sv.crt create mode 100644 deps/curl/tests/certs/Server-localhost-sv.csr create mode 100644 deps/curl/tests/certs/Server-localhost-sv.der create mode 100644 deps/curl/tests/certs/Server-localhost-sv.dhp create mode 100644 deps/curl/tests/certs/Server-localhost-sv.key create mode 100644 deps/curl/tests/certs/Server-localhost-sv.pem create mode 100644 deps/curl/tests/certs/Server-localhost-sv.prm create mode 100644 deps/curl/tests/certs/Server-localhost-sv.pub.der create mode 100644 deps/curl/tests/certs/Server-localhost-sv.pub.pem create mode 100644 deps/curl/tests/certs/Server-localhost-sv.pubkey-pinned create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.crl create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.crt create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.csr create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.der create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.dhp create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.key create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.pem create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.prm create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.pub.der create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.pub.pem create mode 100644 deps/curl/tests/certs/Server-localhost.nn-sv.pubkey-pinned create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.crl create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.crt create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.csr create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.der create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.dhp create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.key create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.pem create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.prm create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.pub.der create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.pub.pem create mode 100644 deps/curl/tests/certs/Server-localhost0h-sv.pubkey-pinned create mode 100644 deps/curl/tests/certs/scripts/Makefile.am create mode 100644 deps/curl/tests/certs/scripts/genroot.sh create mode 100644 deps/curl/tests/certs/scripts/genserv.sh create mode 100644 deps/curl/tests/certs/srp-verifier-conf create mode 100644 deps/curl/tests/certs/srp-verifier-db create mode 100644 deps/curl/tests/certs/stunnel-sv.crl create mode 100644 deps/curl/tests/certs/stunnel-sv.crt create mode 100644 deps/curl/tests/certs/stunnel-sv.csr create mode 100644 deps/curl/tests/certs/stunnel-sv.der create mode 100644 deps/curl/tests/certs/stunnel-sv.dhp create mode 100644 deps/curl/tests/certs/stunnel-sv.key create mode 100644 deps/curl/tests/certs/stunnel-sv.pem create mode 100644 deps/curl/tests/certs/stunnel-sv.prm create mode 100644 deps/curl/tests/certs/stunnel-sv.pub.der create mode 100644 deps/curl/tests/certs/stunnel-sv.pub.pem create mode 100644 deps/curl/tests/certs/stunnel-sv.pubkey-pinned create mode 100644 deps/curl/tests/check-deprecated.pl create mode 100644 deps/curl/tests/check-translatable-options.pl create mode 100644 deps/curl/tests/config.in create mode 100644 deps/curl/tests/conftest.py create mode 100644 deps/curl/tests/convsrctest.pl create mode 100644 deps/curl/tests/data/.gitattributes create mode 100644 deps/curl/tests/data/.gitignore create mode 100644 deps/curl/tests/data/CMakeLists.txt create mode 100644 deps/curl/tests/data/DISABLED create mode 100644 deps/curl/tests/data/Makefile.am create mode 100644 deps/curl/tests/data/Makefile.inc create mode 100644 deps/curl/tests/data/test1 create mode 100644 deps/curl/tests/data/test10 create mode 100644 deps/curl/tests/data/test100 create mode 100644 deps/curl/tests/data/test1000 create mode 100644 deps/curl/tests/data/test1001 create mode 100644 deps/curl/tests/data/test1002 create mode 100644 deps/curl/tests/data/test1003 create mode 100644 deps/curl/tests/data/test1004 create mode 100644 deps/curl/tests/data/test1005 create mode 100644 deps/curl/tests/data/test1006 create mode 100644 deps/curl/tests/data/test1007 create mode 100644 deps/curl/tests/data/test1008 create mode 100644 deps/curl/tests/data/test1009 create mode 100644 deps/curl/tests/data/test101 create mode 100644 deps/curl/tests/data/test1010 create mode 100644 deps/curl/tests/data/test1011 create mode 100644 deps/curl/tests/data/test1012 create mode 100644 deps/curl/tests/data/test1013 create mode 100644 deps/curl/tests/data/test1014 create mode 100644 deps/curl/tests/data/test1015 create mode 100644 deps/curl/tests/data/test1016 create mode 100644 deps/curl/tests/data/test1017 create mode 100644 deps/curl/tests/data/test1018 create mode 100644 deps/curl/tests/data/test1019 create mode 100644 deps/curl/tests/data/test102 create mode 100644 deps/curl/tests/data/test1020 create mode 100644 deps/curl/tests/data/test1021 create mode 100644 deps/curl/tests/data/test1022 create mode 100644 deps/curl/tests/data/test1023 create mode 100644 deps/curl/tests/data/test1024 create mode 100644 deps/curl/tests/data/test1025 create mode 100644 deps/curl/tests/data/test1026 create mode 100644 deps/curl/tests/data/test1027 create mode 100644 deps/curl/tests/data/test1028 create mode 100644 deps/curl/tests/data/test1029 create mode 100644 deps/curl/tests/data/test103 create mode 100644 deps/curl/tests/data/test1030 create mode 100644 deps/curl/tests/data/test1031 create mode 100644 deps/curl/tests/data/test1032 create mode 100644 deps/curl/tests/data/test1033 create mode 100644 deps/curl/tests/data/test1034 create mode 100644 deps/curl/tests/data/test1035 create mode 100644 deps/curl/tests/data/test1036 create mode 100644 deps/curl/tests/data/test1037 create mode 100644 deps/curl/tests/data/test1038 create mode 100644 deps/curl/tests/data/test1039 create mode 100644 deps/curl/tests/data/test104 create mode 100644 deps/curl/tests/data/test1040 create mode 100644 deps/curl/tests/data/test1041 create mode 100644 deps/curl/tests/data/test1042 create mode 100644 deps/curl/tests/data/test1043 create mode 100644 deps/curl/tests/data/test1044 create mode 100644 deps/curl/tests/data/test1045 create mode 100644 deps/curl/tests/data/test1046 create mode 100644 deps/curl/tests/data/test1047 create mode 100644 deps/curl/tests/data/test1048 create mode 100644 deps/curl/tests/data/test1049 create mode 100644 deps/curl/tests/data/test105 create mode 100644 deps/curl/tests/data/test1050 create mode 100644 deps/curl/tests/data/test1051 create mode 100644 deps/curl/tests/data/test1052 create mode 100644 deps/curl/tests/data/test1053 create mode 100644 deps/curl/tests/data/test1054 create mode 100644 deps/curl/tests/data/test1055 create mode 100644 deps/curl/tests/data/test1056 create mode 100644 deps/curl/tests/data/test1057 create mode 100644 deps/curl/tests/data/test1058 create mode 100644 deps/curl/tests/data/test1059 create mode 100644 deps/curl/tests/data/test106 create mode 100644 deps/curl/tests/data/test1060 create mode 100644 deps/curl/tests/data/test1061 create mode 100644 deps/curl/tests/data/test1062 create mode 100644 deps/curl/tests/data/test1063 create mode 100644 deps/curl/tests/data/test1064 create mode 100644 deps/curl/tests/data/test1065 create mode 100644 deps/curl/tests/data/test1066 create mode 100644 deps/curl/tests/data/test1067 create mode 100644 deps/curl/tests/data/test1068 create mode 100644 deps/curl/tests/data/test1069 create mode 100644 deps/curl/tests/data/test107 create mode 100644 deps/curl/tests/data/test1070 create mode 100644 deps/curl/tests/data/test1071 create mode 100644 deps/curl/tests/data/test1072 create mode 100644 deps/curl/tests/data/test1073 create mode 100644 deps/curl/tests/data/test1074 create mode 100644 deps/curl/tests/data/test1075 create mode 100644 deps/curl/tests/data/test1076 create mode 100644 deps/curl/tests/data/test1077 create mode 100644 deps/curl/tests/data/test1078 create mode 100644 deps/curl/tests/data/test1079 create mode 100644 deps/curl/tests/data/test108 create mode 100644 deps/curl/tests/data/test1080 create mode 100644 deps/curl/tests/data/test1081 create mode 100644 deps/curl/tests/data/test1082 create mode 100644 deps/curl/tests/data/test1083 create mode 100644 deps/curl/tests/data/test1084 create mode 100644 deps/curl/tests/data/test1085 create mode 100644 deps/curl/tests/data/test1086 create mode 100644 deps/curl/tests/data/test1087 create mode 100644 deps/curl/tests/data/test1088 create mode 100644 deps/curl/tests/data/test1089 create mode 100644 deps/curl/tests/data/test109 create mode 100644 deps/curl/tests/data/test1090 create mode 100644 deps/curl/tests/data/test1091 create mode 100644 deps/curl/tests/data/test1092 create mode 100644 deps/curl/tests/data/test1093 create mode 100644 deps/curl/tests/data/test1094 create mode 100644 deps/curl/tests/data/test1095 create mode 100644 deps/curl/tests/data/test1096 create mode 100644 deps/curl/tests/data/test1097 create mode 100644 deps/curl/tests/data/test1098 create mode 100644 deps/curl/tests/data/test1099 create mode 100644 deps/curl/tests/data/test11 create mode 100644 deps/curl/tests/data/test110 create mode 100644 deps/curl/tests/data/test1100 create mode 100644 deps/curl/tests/data/test1101 create mode 100644 deps/curl/tests/data/test1102 create mode 100644 deps/curl/tests/data/test1103 create mode 100644 deps/curl/tests/data/test1104 create mode 100644 deps/curl/tests/data/test1105 create mode 100644 deps/curl/tests/data/test1106 create mode 100644 deps/curl/tests/data/test1107 create mode 100644 deps/curl/tests/data/test1108 create mode 100644 deps/curl/tests/data/test1109 create mode 100644 deps/curl/tests/data/test111 create mode 100644 deps/curl/tests/data/test1110 create mode 100644 deps/curl/tests/data/test1111 create mode 100644 deps/curl/tests/data/test1112 create mode 100644 deps/curl/tests/data/test1113 create mode 100644 deps/curl/tests/data/test1114 create mode 100644 deps/curl/tests/data/test1115 create mode 100644 deps/curl/tests/data/test1116 create mode 100644 deps/curl/tests/data/test1117 create mode 100644 deps/curl/tests/data/test1118 create mode 100644 deps/curl/tests/data/test1119 create mode 100644 deps/curl/tests/data/test112 create mode 100644 deps/curl/tests/data/test1120 create mode 100644 deps/curl/tests/data/test1121 create mode 100644 deps/curl/tests/data/test1122 create mode 100644 deps/curl/tests/data/test1123 create mode 100644 deps/curl/tests/data/test1124 create mode 100644 deps/curl/tests/data/test1125 create mode 100644 deps/curl/tests/data/test1126 create mode 100644 deps/curl/tests/data/test1127 create mode 100644 deps/curl/tests/data/test1128 create mode 100644 deps/curl/tests/data/test1129 create mode 100644 deps/curl/tests/data/test113 create mode 100644 deps/curl/tests/data/test1130 create mode 100644 deps/curl/tests/data/test1131 create mode 100644 deps/curl/tests/data/test1132 create mode 100644 deps/curl/tests/data/test1133 create mode 100644 deps/curl/tests/data/test1134 create mode 100644 deps/curl/tests/data/test1135 create mode 100644 deps/curl/tests/data/test1136 create mode 100644 deps/curl/tests/data/test1137 create mode 100644 deps/curl/tests/data/test1138 create mode 100644 deps/curl/tests/data/test1139 create mode 100644 deps/curl/tests/data/test114 create mode 100644 deps/curl/tests/data/test1140 create mode 100644 deps/curl/tests/data/test1141 create mode 100644 deps/curl/tests/data/test1142 create mode 100644 deps/curl/tests/data/test1143 create mode 100644 deps/curl/tests/data/test1144 create mode 100644 deps/curl/tests/data/test1145 create mode 100644 deps/curl/tests/data/test1146 create mode 100644 deps/curl/tests/data/test1147 create mode 100644 deps/curl/tests/data/test1148 create mode 100644 deps/curl/tests/data/test1149 create mode 100644 deps/curl/tests/data/test115 create mode 100644 deps/curl/tests/data/test1150 create mode 100644 deps/curl/tests/data/test1151 create mode 100644 deps/curl/tests/data/test1152 create mode 100644 deps/curl/tests/data/test1153 create mode 100644 deps/curl/tests/data/test1154 create mode 100644 deps/curl/tests/data/test1155 create mode 100644 deps/curl/tests/data/test1156 create mode 100644 deps/curl/tests/data/test1157 create mode 100644 deps/curl/tests/data/test1158 create mode 100644 deps/curl/tests/data/test1159 create mode 100644 deps/curl/tests/data/test116 create mode 100644 deps/curl/tests/data/test1160 create mode 100644 deps/curl/tests/data/test1161 create mode 100644 deps/curl/tests/data/test1162 create mode 100644 deps/curl/tests/data/test1163 create mode 100644 deps/curl/tests/data/test1164 create mode 100644 deps/curl/tests/data/test1165 create mode 100644 deps/curl/tests/data/test1166 create mode 100644 deps/curl/tests/data/test1167 create mode 100644 deps/curl/tests/data/test1168 create mode 100644 deps/curl/tests/data/test1169 create mode 100644 deps/curl/tests/data/test117 create mode 100644 deps/curl/tests/data/test1170 create mode 100644 deps/curl/tests/data/test1171 create mode 100644 deps/curl/tests/data/test1172 create mode 100644 deps/curl/tests/data/test1173 create mode 100644 deps/curl/tests/data/test1174 create mode 100644 deps/curl/tests/data/test1175 create mode 100644 deps/curl/tests/data/test1176 create mode 100644 deps/curl/tests/data/test1177 create mode 100644 deps/curl/tests/data/test1178 create mode 100644 deps/curl/tests/data/test1179 create mode 100644 deps/curl/tests/data/test118 create mode 100644 deps/curl/tests/data/test1180 create mode 100644 deps/curl/tests/data/test1181 create mode 100644 deps/curl/tests/data/test1182 create mode 100644 deps/curl/tests/data/test1183 create mode 100644 deps/curl/tests/data/test1184 create mode 100644 deps/curl/tests/data/test1185 create mode 100644 deps/curl/tests/data/test1186 create mode 100644 deps/curl/tests/data/test1187 create mode 100644 deps/curl/tests/data/test1188 create mode 100644 deps/curl/tests/data/test1189 create mode 100644 deps/curl/tests/data/test119 create mode 100644 deps/curl/tests/data/test1190 create mode 100644 deps/curl/tests/data/test1191 create mode 100644 deps/curl/tests/data/test1192 create mode 100644 deps/curl/tests/data/test1193 create mode 100644 deps/curl/tests/data/test1194 create mode 100644 deps/curl/tests/data/test1195 create mode 100644 deps/curl/tests/data/test1196 create mode 100644 deps/curl/tests/data/test1197 create mode 100644 deps/curl/tests/data/test1198 create mode 100644 deps/curl/tests/data/test1199 create mode 100644 deps/curl/tests/data/test12 create mode 100644 deps/curl/tests/data/test120 create mode 100644 deps/curl/tests/data/test1200 create mode 100644 deps/curl/tests/data/test1201 create mode 100644 deps/curl/tests/data/test1202 create mode 100644 deps/curl/tests/data/test1203 create mode 100644 deps/curl/tests/data/test1204 create mode 100644 deps/curl/tests/data/test1205 create mode 100644 deps/curl/tests/data/test1206 create mode 100644 deps/curl/tests/data/test1207 create mode 100644 deps/curl/tests/data/test1208 create mode 100644 deps/curl/tests/data/test1209 create mode 100644 deps/curl/tests/data/test121 create mode 100644 deps/curl/tests/data/test1210 create mode 100644 deps/curl/tests/data/test1211 create mode 100644 deps/curl/tests/data/test1212 create mode 100644 deps/curl/tests/data/test1213 create mode 100644 deps/curl/tests/data/test1214 create mode 100644 deps/curl/tests/data/test1215 create mode 100644 deps/curl/tests/data/test1216 create mode 100644 deps/curl/tests/data/test1217 create mode 100644 deps/curl/tests/data/test1218 create mode 100644 deps/curl/tests/data/test1219 create mode 100644 deps/curl/tests/data/test122 create mode 100644 deps/curl/tests/data/test1220 create mode 100644 deps/curl/tests/data/test1221 create mode 100644 deps/curl/tests/data/test1222 create mode 100644 deps/curl/tests/data/test1223 create mode 100644 deps/curl/tests/data/test1224 create mode 100644 deps/curl/tests/data/test1225 create mode 100644 deps/curl/tests/data/test1226 create mode 100644 deps/curl/tests/data/test1227 create mode 100644 deps/curl/tests/data/test1228 create mode 100644 deps/curl/tests/data/test1229 create mode 100644 deps/curl/tests/data/test123 create mode 100644 deps/curl/tests/data/test1230 create mode 100644 deps/curl/tests/data/test1231 create mode 100644 deps/curl/tests/data/test1232 create mode 100644 deps/curl/tests/data/test1233 create mode 100644 deps/curl/tests/data/test1234 create mode 100644 deps/curl/tests/data/test1235 create mode 100644 deps/curl/tests/data/test1236 create mode 100644 deps/curl/tests/data/test1237 create mode 100644 deps/curl/tests/data/test1238 create mode 100644 deps/curl/tests/data/test1239 create mode 100644 deps/curl/tests/data/test124 create mode 100644 deps/curl/tests/data/test1240 create mode 100644 deps/curl/tests/data/test1241 create mode 100644 deps/curl/tests/data/test1242 create mode 100644 deps/curl/tests/data/test1243 create mode 100644 deps/curl/tests/data/test1244 create mode 100644 deps/curl/tests/data/test1245 create mode 100644 deps/curl/tests/data/test1246 create mode 100644 deps/curl/tests/data/test1247 create mode 100644 deps/curl/tests/data/test1248 create mode 100644 deps/curl/tests/data/test1249 create mode 100644 deps/curl/tests/data/test125 create mode 100644 deps/curl/tests/data/test1250 create mode 100644 deps/curl/tests/data/test1251 create mode 100644 deps/curl/tests/data/test1252 create mode 100644 deps/curl/tests/data/test1253 create mode 100644 deps/curl/tests/data/test1254 create mode 100644 deps/curl/tests/data/test1255 create mode 100644 deps/curl/tests/data/test1256 create mode 100644 deps/curl/tests/data/test1257 create mode 100644 deps/curl/tests/data/test1258 create mode 100644 deps/curl/tests/data/test1259 create mode 100644 deps/curl/tests/data/test126 create mode 100644 deps/curl/tests/data/test1260 create mode 100644 deps/curl/tests/data/test1261 create mode 100644 deps/curl/tests/data/test1262 create mode 100644 deps/curl/tests/data/test1263 create mode 100644 deps/curl/tests/data/test1264 create mode 100644 deps/curl/tests/data/test1265 create mode 100644 deps/curl/tests/data/test1266 create mode 100644 deps/curl/tests/data/test1267 create mode 100644 deps/curl/tests/data/test1268 create mode 100644 deps/curl/tests/data/test1269 create mode 100644 deps/curl/tests/data/test127 create mode 100644 deps/curl/tests/data/test1270 create mode 100644 deps/curl/tests/data/test1271 create mode 100644 deps/curl/tests/data/test1272 create mode 100644 deps/curl/tests/data/test1273 create mode 100644 deps/curl/tests/data/test1274 create mode 100644 deps/curl/tests/data/test1275 create mode 100644 deps/curl/tests/data/test1276 create mode 100644 deps/curl/tests/data/test1277 create mode 100644 deps/curl/tests/data/test1278 create mode 100644 deps/curl/tests/data/test1279 create mode 100644 deps/curl/tests/data/test128 create mode 100644 deps/curl/tests/data/test1280 create mode 100644 deps/curl/tests/data/test1281 create mode 100644 deps/curl/tests/data/test1282 create mode 100644 deps/curl/tests/data/test1283 create mode 100644 deps/curl/tests/data/test1284 create mode 100644 deps/curl/tests/data/test1285 create mode 100644 deps/curl/tests/data/test1286 create mode 100644 deps/curl/tests/data/test1287 create mode 100644 deps/curl/tests/data/test1288 create mode 100644 deps/curl/tests/data/test1289 create mode 100644 deps/curl/tests/data/test129 create mode 100644 deps/curl/tests/data/test1290 create mode 100644 deps/curl/tests/data/test1291 create mode 100644 deps/curl/tests/data/test1292 create mode 100644 deps/curl/tests/data/test1293 create mode 100644 deps/curl/tests/data/test1294 create mode 100644 deps/curl/tests/data/test1295 create mode 100644 deps/curl/tests/data/test1296 create mode 100644 deps/curl/tests/data/test1297 create mode 100644 deps/curl/tests/data/test1298 create mode 100644 deps/curl/tests/data/test1299 create mode 100644 deps/curl/tests/data/test13 create mode 100644 deps/curl/tests/data/test130 create mode 100644 deps/curl/tests/data/test1300 create mode 100644 deps/curl/tests/data/test1301 create mode 100644 deps/curl/tests/data/test1302 create mode 100644 deps/curl/tests/data/test1303 create mode 100644 deps/curl/tests/data/test1304 create mode 100644 deps/curl/tests/data/test1305 create mode 100644 deps/curl/tests/data/test1306 create mode 100644 deps/curl/tests/data/test1307 create mode 100644 deps/curl/tests/data/test1308 create mode 100644 deps/curl/tests/data/test1309 create mode 100644 deps/curl/tests/data/test131 create mode 100644 deps/curl/tests/data/test1310 create mode 100644 deps/curl/tests/data/test1311 create mode 100644 deps/curl/tests/data/test1312 create mode 100644 deps/curl/tests/data/test1313 create mode 100644 deps/curl/tests/data/test1314 create mode 100644 deps/curl/tests/data/test1315 create mode 100644 deps/curl/tests/data/test1316 create mode 100644 deps/curl/tests/data/test1317 create mode 100644 deps/curl/tests/data/test1318 create mode 100644 deps/curl/tests/data/test1319 create mode 100644 deps/curl/tests/data/test132 create mode 100644 deps/curl/tests/data/test1320 create mode 100644 deps/curl/tests/data/test1321 create mode 100644 deps/curl/tests/data/test1322 create mode 100644 deps/curl/tests/data/test1323 create mode 100644 deps/curl/tests/data/test1324 create mode 100644 deps/curl/tests/data/test1325 create mode 100644 deps/curl/tests/data/test1326 create mode 100644 deps/curl/tests/data/test1327 create mode 100644 deps/curl/tests/data/test1328 create mode 100644 deps/curl/tests/data/test1329 create mode 100644 deps/curl/tests/data/test133 create mode 100644 deps/curl/tests/data/test1330 create mode 100644 deps/curl/tests/data/test1331 create mode 100644 deps/curl/tests/data/test1332 create mode 100644 deps/curl/tests/data/test1333 create mode 100644 deps/curl/tests/data/test1334 create mode 100644 deps/curl/tests/data/test1335 create mode 100644 deps/curl/tests/data/test1336 create mode 100644 deps/curl/tests/data/test1337 create mode 100644 deps/curl/tests/data/test1338 create mode 100644 deps/curl/tests/data/test1339 create mode 100644 deps/curl/tests/data/test134 create mode 100644 deps/curl/tests/data/test1340 create mode 100644 deps/curl/tests/data/test1341 create mode 100644 deps/curl/tests/data/test1342 create mode 100644 deps/curl/tests/data/test1343 create mode 100644 deps/curl/tests/data/test1344 create mode 100644 deps/curl/tests/data/test1345 create mode 100644 deps/curl/tests/data/test1346 create mode 100644 deps/curl/tests/data/test1347 create mode 100644 deps/curl/tests/data/test1348 create mode 100644 deps/curl/tests/data/test1349 create mode 100644 deps/curl/tests/data/test135 create mode 100644 deps/curl/tests/data/test1350 create mode 100644 deps/curl/tests/data/test1351 create mode 100644 deps/curl/tests/data/test1352 create mode 100644 deps/curl/tests/data/test1353 create mode 100644 deps/curl/tests/data/test1354 create mode 100644 deps/curl/tests/data/test1355 create mode 100644 deps/curl/tests/data/test1356 create mode 100644 deps/curl/tests/data/test1357 create mode 100644 deps/curl/tests/data/test1358 create mode 100644 deps/curl/tests/data/test1359 create mode 100644 deps/curl/tests/data/test136 create mode 100644 deps/curl/tests/data/test1360 create mode 100644 deps/curl/tests/data/test1361 create mode 100644 deps/curl/tests/data/test1362 create mode 100644 deps/curl/tests/data/test1363 create mode 100644 deps/curl/tests/data/test1364 create mode 100644 deps/curl/tests/data/test1365 create mode 100644 deps/curl/tests/data/test1366 create mode 100644 deps/curl/tests/data/test1367 create mode 100644 deps/curl/tests/data/test1368 create mode 100644 deps/curl/tests/data/test1369 create mode 100644 deps/curl/tests/data/test137 create mode 100644 deps/curl/tests/data/test1370 create mode 100644 deps/curl/tests/data/test1371 create mode 100644 deps/curl/tests/data/test1372 create mode 100644 deps/curl/tests/data/test1373 create mode 100644 deps/curl/tests/data/test1374 create mode 100644 deps/curl/tests/data/test1375 create mode 100644 deps/curl/tests/data/test1376 create mode 100644 deps/curl/tests/data/test1377 create mode 100644 deps/curl/tests/data/test1378 create mode 100644 deps/curl/tests/data/test1379 create mode 100644 deps/curl/tests/data/test138 create mode 100644 deps/curl/tests/data/test1380 create mode 100644 deps/curl/tests/data/test1381 create mode 100644 deps/curl/tests/data/test1382 create mode 100644 deps/curl/tests/data/test1383 create mode 100644 deps/curl/tests/data/test1384 create mode 100644 deps/curl/tests/data/test1385 create mode 100644 deps/curl/tests/data/test1386 create mode 100644 deps/curl/tests/data/test1387 create mode 100644 deps/curl/tests/data/test1388 create mode 100644 deps/curl/tests/data/test1389 create mode 100644 deps/curl/tests/data/test139 create mode 100644 deps/curl/tests/data/test1390 create mode 100644 deps/curl/tests/data/test1391 create mode 100644 deps/curl/tests/data/test1392 create mode 100644 deps/curl/tests/data/test1393 create mode 100644 deps/curl/tests/data/test1394 create mode 100644 deps/curl/tests/data/test1395 create mode 100644 deps/curl/tests/data/test1396 create mode 100644 deps/curl/tests/data/test1397 create mode 100644 deps/curl/tests/data/test1398 create mode 100644 deps/curl/tests/data/test1399 create mode 100644 deps/curl/tests/data/test14 create mode 100644 deps/curl/tests/data/test140 create mode 100644 deps/curl/tests/data/test1400 create mode 100644 deps/curl/tests/data/test1401 create mode 100644 deps/curl/tests/data/test1402 create mode 100644 deps/curl/tests/data/test1403 create mode 100644 deps/curl/tests/data/test1404 create mode 100644 deps/curl/tests/data/test1405 create mode 100644 deps/curl/tests/data/test1406 create mode 100644 deps/curl/tests/data/test1407 create mode 100644 deps/curl/tests/data/test1408 create mode 100644 deps/curl/tests/data/test1409 create mode 100644 deps/curl/tests/data/test141 create mode 100644 deps/curl/tests/data/test1410 create mode 100644 deps/curl/tests/data/test1411 create mode 100644 deps/curl/tests/data/test1412 create mode 100644 deps/curl/tests/data/test1413 create mode 100644 deps/curl/tests/data/test1414 create mode 100644 deps/curl/tests/data/test1415 create mode 100644 deps/curl/tests/data/test1416 create mode 100644 deps/curl/tests/data/test1417 create mode 100644 deps/curl/tests/data/test1418 create mode 100644 deps/curl/tests/data/test1419 create mode 100644 deps/curl/tests/data/test142 create mode 100644 deps/curl/tests/data/test1420 create mode 100644 deps/curl/tests/data/test1421 create mode 100644 deps/curl/tests/data/test1422 create mode 100644 deps/curl/tests/data/test1423 create mode 100644 deps/curl/tests/data/test1424 create mode 100644 deps/curl/tests/data/test1425 create mode 100644 deps/curl/tests/data/test1426 create mode 100644 deps/curl/tests/data/test1427 create mode 100644 deps/curl/tests/data/test1428 create mode 100644 deps/curl/tests/data/test1429 create mode 100644 deps/curl/tests/data/test143 create mode 100644 deps/curl/tests/data/test1430 create mode 100644 deps/curl/tests/data/test1431 create mode 100644 deps/curl/tests/data/test1432 create mode 100644 deps/curl/tests/data/test1433 create mode 100644 deps/curl/tests/data/test1434 create mode 100644 deps/curl/tests/data/test1435 create mode 100644 deps/curl/tests/data/test1436 create mode 100644 deps/curl/tests/data/test1437 create mode 100644 deps/curl/tests/data/test1438 create mode 100644 deps/curl/tests/data/test1439 create mode 100644 deps/curl/tests/data/test144 create mode 100644 deps/curl/tests/data/test1440 create mode 100644 deps/curl/tests/data/test1441 create mode 100644 deps/curl/tests/data/test1442 create mode 100644 deps/curl/tests/data/test1443 create mode 100644 deps/curl/tests/data/test1444 create mode 100644 deps/curl/tests/data/test1445 create mode 100644 deps/curl/tests/data/test1446 create mode 100644 deps/curl/tests/data/test1447 create mode 100644 deps/curl/tests/data/test1448 create mode 100644 deps/curl/tests/data/test1449 create mode 100644 deps/curl/tests/data/test145 create mode 100644 deps/curl/tests/data/test1450 create mode 100644 deps/curl/tests/data/test1451 create mode 100644 deps/curl/tests/data/test1452 create mode 100644 deps/curl/tests/data/test1453 create mode 100644 deps/curl/tests/data/test1454 create mode 100644 deps/curl/tests/data/test1455 create mode 100644 deps/curl/tests/data/test1456 create mode 100644 deps/curl/tests/data/test1457 create mode 100644 deps/curl/tests/data/test1458 create mode 100644 deps/curl/tests/data/test1459 create mode 100644 deps/curl/tests/data/test146 create mode 100644 deps/curl/tests/data/test1460 create mode 100644 deps/curl/tests/data/test1461 create mode 100644 deps/curl/tests/data/test1462 create mode 100644 deps/curl/tests/data/test1463 create mode 100644 deps/curl/tests/data/test1464 create mode 100644 deps/curl/tests/data/test1465 create mode 100644 deps/curl/tests/data/test1466 create mode 100644 deps/curl/tests/data/test1467 create mode 100644 deps/curl/tests/data/test1468 create mode 100644 deps/curl/tests/data/test1469 create mode 100644 deps/curl/tests/data/test147 create mode 100644 deps/curl/tests/data/test1470 create mode 100644 deps/curl/tests/data/test1471 create mode 100644 deps/curl/tests/data/test1472 create mode 100644 deps/curl/tests/data/test1473 create mode 100644 deps/curl/tests/data/test1474 create mode 100644 deps/curl/tests/data/test1475 create mode 100644 deps/curl/tests/data/test1476 create mode 100644 deps/curl/tests/data/test1477 create mode 100644 deps/curl/tests/data/test148 create mode 100644 deps/curl/tests/data/test149 create mode 100644 deps/curl/tests/data/test15 create mode 100644 deps/curl/tests/data/test150 create mode 100644 deps/curl/tests/data/test1500 create mode 100644 deps/curl/tests/data/test1501 create mode 100644 deps/curl/tests/data/test1502 create mode 100644 deps/curl/tests/data/test1503 create mode 100644 deps/curl/tests/data/test1504 create mode 100644 deps/curl/tests/data/test1505 create mode 100644 deps/curl/tests/data/test1506 create mode 100644 deps/curl/tests/data/test1507 create mode 100644 deps/curl/tests/data/test1508 create mode 100644 deps/curl/tests/data/test1509 create mode 100644 deps/curl/tests/data/test151 create mode 100644 deps/curl/tests/data/test1510 create mode 100644 deps/curl/tests/data/test1511 create mode 100644 deps/curl/tests/data/test1512 create mode 100644 deps/curl/tests/data/test1513 create mode 100644 deps/curl/tests/data/test1514 create mode 100644 deps/curl/tests/data/test1515 create mode 100644 deps/curl/tests/data/test1516 create mode 100644 deps/curl/tests/data/test1517 create mode 100644 deps/curl/tests/data/test1518 create mode 100644 deps/curl/tests/data/test1519 create mode 100644 deps/curl/tests/data/test152 create mode 100644 deps/curl/tests/data/test1520 create mode 100644 deps/curl/tests/data/test1521 create mode 100644 deps/curl/tests/data/test1522 create mode 100644 deps/curl/tests/data/test1523 create mode 100644 deps/curl/tests/data/test1524 create mode 100644 deps/curl/tests/data/test1525 create mode 100644 deps/curl/tests/data/test1526 create mode 100644 deps/curl/tests/data/test1527 create mode 100644 deps/curl/tests/data/test1528 create mode 100644 deps/curl/tests/data/test1529 create mode 100644 deps/curl/tests/data/test153 create mode 100644 deps/curl/tests/data/test1530 create mode 100644 deps/curl/tests/data/test1531 create mode 100644 deps/curl/tests/data/test1532 create mode 100644 deps/curl/tests/data/test1533 create mode 100644 deps/curl/tests/data/test1534 create mode 100644 deps/curl/tests/data/test1535 create mode 100644 deps/curl/tests/data/test1536 create mode 100644 deps/curl/tests/data/test1537 create mode 100644 deps/curl/tests/data/test1538 create mode 100644 deps/curl/tests/data/test1539 create mode 100644 deps/curl/tests/data/test154 create mode 100644 deps/curl/tests/data/test1540 create mode 100644 deps/curl/tests/data/test1542 create mode 100644 deps/curl/tests/data/test1543 create mode 100644 deps/curl/tests/data/test1544 create mode 100644 deps/curl/tests/data/test1545 create mode 100644 deps/curl/tests/data/test155 create mode 100644 deps/curl/tests/data/test1550 create mode 100644 deps/curl/tests/data/test1551 create mode 100644 deps/curl/tests/data/test1552 create mode 100644 deps/curl/tests/data/test1553 create mode 100644 deps/curl/tests/data/test1554 create mode 100644 deps/curl/tests/data/test1555 create mode 100644 deps/curl/tests/data/test1556 create mode 100644 deps/curl/tests/data/test1557 create mode 100644 deps/curl/tests/data/test1558 create mode 100644 deps/curl/tests/data/test1559 create mode 100644 deps/curl/tests/data/test156 create mode 100644 deps/curl/tests/data/test1560 create mode 100644 deps/curl/tests/data/test1561 create mode 100644 deps/curl/tests/data/test1562 create mode 100644 deps/curl/tests/data/test1563 create mode 100644 deps/curl/tests/data/test1564 create mode 100644 deps/curl/tests/data/test1565 create mode 100644 deps/curl/tests/data/test1566 create mode 100644 deps/curl/tests/data/test1567 create mode 100644 deps/curl/tests/data/test1568 create mode 100644 deps/curl/tests/data/test1569 create mode 100644 deps/curl/tests/data/test157 create mode 100644 deps/curl/tests/data/test1570 create mode 100644 deps/curl/tests/data/test158 create mode 100644 deps/curl/tests/data/test159 create mode 100644 deps/curl/tests/data/test1590 create mode 100644 deps/curl/tests/data/test1591 create mode 100644 deps/curl/tests/data/test1592 create mode 100644 deps/curl/tests/data/test1593 create mode 100644 deps/curl/tests/data/test1594 create mode 100644 deps/curl/tests/data/test1595 create mode 100644 deps/curl/tests/data/test1596 create mode 100644 deps/curl/tests/data/test1597 create mode 100644 deps/curl/tests/data/test16 create mode 100644 deps/curl/tests/data/test160 create mode 100644 deps/curl/tests/data/test1600 create mode 100644 deps/curl/tests/data/test1601 create mode 100644 deps/curl/tests/data/test1602 create mode 100644 deps/curl/tests/data/test1603 create mode 100644 deps/curl/tests/data/test1604 create mode 100644 deps/curl/tests/data/test1605 create mode 100644 deps/curl/tests/data/test1606 create mode 100644 deps/curl/tests/data/test1607 create mode 100644 deps/curl/tests/data/test1608 create mode 100644 deps/curl/tests/data/test1609 create mode 100644 deps/curl/tests/data/test161 create mode 100644 deps/curl/tests/data/test1610 create mode 100644 deps/curl/tests/data/test1611 create mode 100644 deps/curl/tests/data/test1612 create mode 100644 deps/curl/tests/data/test1613 create mode 100644 deps/curl/tests/data/test1614 create mode 100644 deps/curl/tests/data/test162 create mode 100644 deps/curl/tests/data/test1620 create mode 100644 deps/curl/tests/data/test1621 create mode 100644 deps/curl/tests/data/test163 create mode 100644 deps/curl/tests/data/test1630 create mode 100644 deps/curl/tests/data/test1631 create mode 100644 deps/curl/tests/data/test1632 create mode 100644 deps/curl/tests/data/test1633 create mode 100644 deps/curl/tests/data/test1634 create mode 100644 deps/curl/tests/data/test1635 create mode 100644 deps/curl/tests/data/test164 create mode 100644 deps/curl/tests/data/test165 create mode 100644 deps/curl/tests/data/test1650 create mode 100644 deps/curl/tests/data/test1651 create mode 100644 deps/curl/tests/data/test1652 create mode 100644 deps/curl/tests/data/test1653 create mode 100644 deps/curl/tests/data/test1654 create mode 100644 deps/curl/tests/data/test1655 create mode 100644 deps/curl/tests/data/test166 create mode 100644 deps/curl/tests/data/test1660 create mode 100644 deps/curl/tests/data/test1661 create mode 100644 deps/curl/tests/data/test1662 create mode 100644 deps/curl/tests/data/test167 create mode 100644 deps/curl/tests/data/test1670 create mode 100644 deps/curl/tests/data/test1671 create mode 100644 deps/curl/tests/data/test168 create mode 100644 deps/curl/tests/data/test1680 create mode 100644 deps/curl/tests/data/test1681 create mode 100644 deps/curl/tests/data/test1682 create mode 100644 deps/curl/tests/data/test1683 create mode 100644 deps/curl/tests/data/test169 create mode 100644 deps/curl/tests/data/test17 create mode 100644 deps/curl/tests/data/test170 create mode 100644 deps/curl/tests/data/test1700 create mode 100644 deps/curl/tests/data/test1701 create mode 100644 deps/curl/tests/data/test1702 create mode 100644 deps/curl/tests/data/test1703 create mode 100644 deps/curl/tests/data/test171 create mode 100644 deps/curl/tests/data/test172 create mode 100644 deps/curl/tests/data/test173 create mode 100644 deps/curl/tests/data/test174 create mode 100644 deps/curl/tests/data/test175 create mode 100644 deps/curl/tests/data/test176 create mode 100644 deps/curl/tests/data/test177 create mode 100644 deps/curl/tests/data/test178 create mode 100644 deps/curl/tests/data/test179 create mode 100644 deps/curl/tests/data/test18 create mode 100644 deps/curl/tests/data/test180 create mode 100644 deps/curl/tests/data/test1800 create mode 100644 deps/curl/tests/data/test1801 create mode 100644 deps/curl/tests/data/test181 create mode 100644 deps/curl/tests/data/test182 create mode 100644 deps/curl/tests/data/test183 create mode 100644 deps/curl/tests/data/test184 create mode 100644 deps/curl/tests/data/test185 create mode 100644 deps/curl/tests/data/test186 create mode 100644 deps/curl/tests/data/test187 create mode 100644 deps/curl/tests/data/test188 create mode 100644 deps/curl/tests/data/test189 create mode 100644 deps/curl/tests/data/test19 create mode 100644 deps/curl/tests/data/test190 create mode 100644 deps/curl/tests/data/test1900 create mode 100644 deps/curl/tests/data/test1903 create mode 100644 deps/curl/tests/data/test1904 create mode 100644 deps/curl/tests/data/test1905 create mode 100644 deps/curl/tests/data/test1906 create mode 100644 deps/curl/tests/data/test1907 create mode 100644 deps/curl/tests/data/test1908 create mode 100644 deps/curl/tests/data/test1909 create mode 100644 deps/curl/tests/data/test191 create mode 100644 deps/curl/tests/data/test1910 create mode 100644 deps/curl/tests/data/test1911 create mode 100644 deps/curl/tests/data/test1912 create mode 100644 deps/curl/tests/data/test1913 create mode 100644 deps/curl/tests/data/test1914 create mode 100644 deps/curl/tests/data/test1915 create mode 100644 deps/curl/tests/data/test1916 create mode 100644 deps/curl/tests/data/test1917 create mode 100644 deps/curl/tests/data/test1918 create mode 100644 deps/curl/tests/data/test1919 create mode 100644 deps/curl/tests/data/test192 create mode 100644 deps/curl/tests/data/test193 create mode 100644 deps/curl/tests/data/test1933 create mode 100644 deps/curl/tests/data/test1934 create mode 100644 deps/curl/tests/data/test1935 create mode 100644 deps/curl/tests/data/test1936 create mode 100644 deps/curl/tests/data/test1937 create mode 100644 deps/curl/tests/data/test1938 create mode 100644 deps/curl/tests/data/test1939 create mode 100644 deps/curl/tests/data/test194 create mode 100644 deps/curl/tests/data/test1940 create mode 100644 deps/curl/tests/data/test1941 create mode 100644 deps/curl/tests/data/test1942 create mode 100644 deps/curl/tests/data/test1943 create mode 100644 deps/curl/tests/data/test1944 create mode 100644 deps/curl/tests/data/test1945 create mode 100644 deps/curl/tests/data/test1946 create mode 100644 deps/curl/tests/data/test1947 create mode 100644 deps/curl/tests/data/test1948 create mode 100644 deps/curl/tests/data/test195 create mode 100644 deps/curl/tests/data/test1955 create mode 100644 deps/curl/tests/data/test1956 create mode 100644 deps/curl/tests/data/test1957 create mode 100644 deps/curl/tests/data/test1958 create mode 100644 deps/curl/tests/data/test1959 create mode 100644 deps/curl/tests/data/test196 create mode 100644 deps/curl/tests/data/test1960 create mode 100644 deps/curl/tests/data/test1964 create mode 100644 deps/curl/tests/data/test197 create mode 100644 deps/curl/tests/data/test1970 create mode 100644 deps/curl/tests/data/test1971 create mode 100644 deps/curl/tests/data/test1972 create mode 100644 deps/curl/tests/data/test1973 create mode 100644 deps/curl/tests/data/test1974 create mode 100644 deps/curl/tests/data/test1975 create mode 100644 deps/curl/tests/data/test198 create mode 100644 deps/curl/tests/data/test199 create mode 100644 deps/curl/tests/data/test2 create mode 100644 deps/curl/tests/data/test20 create mode 100644 deps/curl/tests/data/test200 create mode 100644 deps/curl/tests/data/test2000 create mode 100644 deps/curl/tests/data/test2001 create mode 100644 deps/curl/tests/data/test2002 create mode 100644 deps/curl/tests/data/test2003 create mode 100644 deps/curl/tests/data/test2004 create mode 100644 deps/curl/tests/data/test201 create mode 100644 deps/curl/tests/data/test202 create mode 100644 deps/curl/tests/data/test2023 create mode 100644 deps/curl/tests/data/test2024 create mode 100644 deps/curl/tests/data/test2025 create mode 100644 deps/curl/tests/data/test2026 create mode 100644 deps/curl/tests/data/test2027 create mode 100644 deps/curl/tests/data/test2028 create mode 100644 deps/curl/tests/data/test2029 create mode 100644 deps/curl/tests/data/test203 create mode 100644 deps/curl/tests/data/test2030 create mode 100644 deps/curl/tests/data/test2031 create mode 100644 deps/curl/tests/data/test2032 create mode 100644 deps/curl/tests/data/test2033 create mode 100644 deps/curl/tests/data/test2034 create mode 100644 deps/curl/tests/data/test2035 create mode 100644 deps/curl/tests/data/test2036 create mode 100644 deps/curl/tests/data/test2037 create mode 100644 deps/curl/tests/data/test2038 create mode 100644 deps/curl/tests/data/test2039 create mode 100644 deps/curl/tests/data/test204 create mode 100644 deps/curl/tests/data/test2040 create mode 100644 deps/curl/tests/data/test2041 create mode 100644 deps/curl/tests/data/test2042 create mode 100644 deps/curl/tests/data/test2043 create mode 100644 deps/curl/tests/data/test2044 create mode 100644 deps/curl/tests/data/test2045 create mode 100644 deps/curl/tests/data/test2046 create mode 100644 deps/curl/tests/data/test2047 create mode 100644 deps/curl/tests/data/test2048 create mode 100644 deps/curl/tests/data/test2049 create mode 100644 deps/curl/tests/data/test205 create mode 100644 deps/curl/tests/data/test2050 create mode 100644 deps/curl/tests/data/test2051 create mode 100644 deps/curl/tests/data/test2052 create mode 100644 deps/curl/tests/data/test2053 create mode 100644 deps/curl/tests/data/test2054 create mode 100644 deps/curl/tests/data/test2055 create mode 100644 deps/curl/tests/data/test2056 create mode 100644 deps/curl/tests/data/test2057 create mode 100644 deps/curl/tests/data/test2058 create mode 100644 deps/curl/tests/data/test2059 create mode 100644 deps/curl/tests/data/test206 create mode 100644 deps/curl/tests/data/test2060 create mode 100644 deps/curl/tests/data/test2061 create mode 100644 deps/curl/tests/data/test2062 create mode 100644 deps/curl/tests/data/test2063 create mode 100644 deps/curl/tests/data/test2064 create mode 100644 deps/curl/tests/data/test2065 create mode 100644 deps/curl/tests/data/test2066 create mode 100644 deps/curl/tests/data/test2067 create mode 100644 deps/curl/tests/data/test2068 create mode 100644 deps/curl/tests/data/test2069 create mode 100644 deps/curl/tests/data/test207 create mode 100644 deps/curl/tests/data/test2070 create mode 100644 deps/curl/tests/data/test2071 create mode 100644 deps/curl/tests/data/test2072 create mode 100644 deps/curl/tests/data/test2073 create mode 100644 deps/curl/tests/data/test2074 create mode 100644 deps/curl/tests/data/test2075 create mode 100644 deps/curl/tests/data/test2076 create mode 100644 deps/curl/tests/data/test2077 create mode 100644 deps/curl/tests/data/test2078 create mode 100644 deps/curl/tests/data/test2079 create mode 100644 deps/curl/tests/data/test208 create mode 100644 deps/curl/tests/data/test2080 create mode 100644 deps/curl/tests/data/test2081 create mode 100644 deps/curl/tests/data/test2082 create mode 100644 deps/curl/tests/data/test2083 create mode 100644 deps/curl/tests/data/test2084 create mode 100644 deps/curl/tests/data/test2085 create mode 100644 deps/curl/tests/data/test2086 create mode 100644 deps/curl/tests/data/test2087 create mode 100644 deps/curl/tests/data/test209 create mode 100644 deps/curl/tests/data/test21 create mode 100644 deps/curl/tests/data/test210 create mode 100644 deps/curl/tests/data/test2100 create mode 100644 deps/curl/tests/data/test211 create mode 100644 deps/curl/tests/data/test212 create mode 100644 deps/curl/tests/data/test213 create mode 100644 deps/curl/tests/data/test214 create mode 100644 deps/curl/tests/data/test215 create mode 100644 deps/curl/tests/data/test216 create mode 100644 deps/curl/tests/data/test217 create mode 100644 deps/curl/tests/data/test218 create mode 100644 deps/curl/tests/data/test219 create mode 100644 deps/curl/tests/data/test22 create mode 100644 deps/curl/tests/data/test220 create mode 100644 deps/curl/tests/data/test2200 create mode 100644 deps/curl/tests/data/test2201 create mode 100644 deps/curl/tests/data/test2202 create mode 100644 deps/curl/tests/data/test2203 create mode 100644 deps/curl/tests/data/test2204 create mode 100644 deps/curl/tests/data/test2205 create mode 100644 deps/curl/tests/data/test221 create mode 100644 deps/curl/tests/data/test222 create mode 100644 deps/curl/tests/data/test223 create mode 100644 deps/curl/tests/data/test224 create mode 100644 deps/curl/tests/data/test225 create mode 100644 deps/curl/tests/data/test226 create mode 100644 deps/curl/tests/data/test227 create mode 100644 deps/curl/tests/data/test228 create mode 100644 deps/curl/tests/data/test229 create mode 100644 deps/curl/tests/data/test23 create mode 100644 deps/curl/tests/data/test230 create mode 100644 deps/curl/tests/data/test2300 create mode 100644 deps/curl/tests/data/test2301 create mode 100644 deps/curl/tests/data/test2302 create mode 100644 deps/curl/tests/data/test2303 create mode 100644 deps/curl/tests/data/test2304 create mode 100644 deps/curl/tests/data/test2305 create mode 100644 deps/curl/tests/data/test2306 create mode 100644 deps/curl/tests/data/test231 create mode 100644 deps/curl/tests/data/test232 create mode 100644 deps/curl/tests/data/test233 create mode 100644 deps/curl/tests/data/test234 create mode 100644 deps/curl/tests/data/test235 create mode 100644 deps/curl/tests/data/test236 create mode 100644 deps/curl/tests/data/test237 create mode 100644 deps/curl/tests/data/test238 create mode 100644 deps/curl/tests/data/test239 create mode 100644 deps/curl/tests/data/test24 create mode 100644 deps/curl/tests/data/test240 create mode 100644 deps/curl/tests/data/test2400 create mode 100644 deps/curl/tests/data/test2401 create mode 100644 deps/curl/tests/data/test2402 create mode 100644 deps/curl/tests/data/test2403 create mode 100644 deps/curl/tests/data/test2404 create mode 100644 deps/curl/tests/data/test241 create mode 100644 deps/curl/tests/data/test242 create mode 100644 deps/curl/tests/data/test243 create mode 100644 deps/curl/tests/data/test244 create mode 100644 deps/curl/tests/data/test245 create mode 100644 deps/curl/tests/data/test246 create mode 100644 deps/curl/tests/data/test247 create mode 100644 deps/curl/tests/data/test248 create mode 100644 deps/curl/tests/data/test249 create mode 100644 deps/curl/tests/data/test25 create mode 100644 deps/curl/tests/data/test250 create mode 100644 deps/curl/tests/data/test2500 create mode 100644 deps/curl/tests/data/test2501 create mode 100644 deps/curl/tests/data/test2502 create mode 100644 deps/curl/tests/data/test2503 create mode 100644 deps/curl/tests/data/test251 create mode 100644 deps/curl/tests/data/test252 create mode 100644 deps/curl/tests/data/test253 create mode 100644 deps/curl/tests/data/test254 create mode 100644 deps/curl/tests/data/test255 create mode 100644 deps/curl/tests/data/test256 create mode 100644 deps/curl/tests/data/test257 create mode 100644 deps/curl/tests/data/test258 create mode 100644 deps/curl/tests/data/test259 create mode 100644 deps/curl/tests/data/test26 create mode 100644 deps/curl/tests/data/test260 create mode 100644 deps/curl/tests/data/test2600 create mode 100644 deps/curl/tests/data/test2601 create mode 100644 deps/curl/tests/data/test2602 create mode 100644 deps/curl/tests/data/test2603 create mode 100644 deps/curl/tests/data/test261 create mode 100644 deps/curl/tests/data/test262 create mode 100644 deps/curl/tests/data/test263 create mode 100644 deps/curl/tests/data/test264 create mode 100644 deps/curl/tests/data/test265 create mode 100644 deps/curl/tests/data/test266 create mode 100644 deps/curl/tests/data/test267 create mode 100644 deps/curl/tests/data/test268 create mode 100644 deps/curl/tests/data/test269 create mode 100644 deps/curl/tests/data/test27 create mode 100644 deps/curl/tests/data/test270 create mode 100644 deps/curl/tests/data/test271 create mode 100644 deps/curl/tests/data/test272 create mode 100644 deps/curl/tests/data/test273 create mode 100644 deps/curl/tests/data/test274 create mode 100644 deps/curl/tests/data/test275 create mode 100644 deps/curl/tests/data/test276 create mode 100644 deps/curl/tests/data/test277 create mode 100644 deps/curl/tests/data/test278 create mode 100644 deps/curl/tests/data/test279 create mode 100644 deps/curl/tests/data/test28 create mode 100644 deps/curl/tests/data/test280 create mode 100644 deps/curl/tests/data/test281 create mode 100644 deps/curl/tests/data/test282 create mode 100644 deps/curl/tests/data/test283 create mode 100644 deps/curl/tests/data/test284 create mode 100644 deps/curl/tests/data/test285 create mode 100644 deps/curl/tests/data/test286 create mode 100644 deps/curl/tests/data/test287 create mode 100644 deps/curl/tests/data/test288 create mode 100644 deps/curl/tests/data/test289 create mode 100644 deps/curl/tests/data/test29 create mode 100644 deps/curl/tests/data/test290 create mode 100644 deps/curl/tests/data/test291 create mode 100644 deps/curl/tests/data/test292 create mode 100644 deps/curl/tests/data/test293 create mode 100644 deps/curl/tests/data/test294 create mode 100644 deps/curl/tests/data/test295 create mode 100644 deps/curl/tests/data/test296 create mode 100644 deps/curl/tests/data/test297 create mode 100644 deps/curl/tests/data/test298 create mode 100644 deps/curl/tests/data/test299 create mode 100644 deps/curl/tests/data/test3 create mode 100644 deps/curl/tests/data/test30 create mode 100644 deps/curl/tests/data/test300 create mode 100644 deps/curl/tests/data/test3000 create mode 100644 deps/curl/tests/data/test3001 create mode 100644 deps/curl/tests/data/test3002 create mode 100644 deps/curl/tests/data/test3003 create mode 100644 deps/curl/tests/data/test3004 create mode 100644 deps/curl/tests/data/test3005 create mode 100644 deps/curl/tests/data/test3006 create mode 100644 deps/curl/tests/data/test3007 create mode 100644 deps/curl/tests/data/test3008 create mode 100644 deps/curl/tests/data/test3009 create mode 100644 deps/curl/tests/data/test301 create mode 100644 deps/curl/tests/data/test3010 create mode 100644 deps/curl/tests/data/test3011 create mode 100644 deps/curl/tests/data/test3012 create mode 100644 deps/curl/tests/data/test3013 create mode 100644 deps/curl/tests/data/test3014 create mode 100644 deps/curl/tests/data/test3015 create mode 100644 deps/curl/tests/data/test3016 create mode 100644 deps/curl/tests/data/test3017 create mode 100644 deps/curl/tests/data/test3018 create mode 100644 deps/curl/tests/data/test3019 create mode 100644 deps/curl/tests/data/test302 create mode 100644 deps/curl/tests/data/test3020 create mode 100644 deps/curl/tests/data/test3021 create mode 100644 deps/curl/tests/data/test3022 create mode 100644 deps/curl/tests/data/test3023 create mode 100644 deps/curl/tests/data/test3024 create mode 100644 deps/curl/tests/data/test3025 create mode 100644 deps/curl/tests/data/test3026 create mode 100644 deps/curl/tests/data/test3027 create mode 100644 deps/curl/tests/data/test3028 create mode 100644 deps/curl/tests/data/test3029 create mode 100644 deps/curl/tests/data/test303 create mode 100644 deps/curl/tests/data/test3030 create mode 100644 deps/curl/tests/data/test304 create mode 100644 deps/curl/tests/data/test305 create mode 100644 deps/curl/tests/data/test306 create mode 100644 deps/curl/tests/data/test307 create mode 100644 deps/curl/tests/data/test308 create mode 100644 deps/curl/tests/data/test309 create mode 100644 deps/curl/tests/data/test31 create mode 100644 deps/curl/tests/data/test310 create mode 100644 deps/curl/tests/data/test3100 create mode 100644 deps/curl/tests/data/test3101 create mode 100644 deps/curl/tests/data/test3102 create mode 100644 deps/curl/tests/data/test3103 create mode 100644 deps/curl/tests/data/test311 create mode 100644 deps/curl/tests/data/test312 create mode 100644 deps/curl/tests/data/test313 create mode 100644 deps/curl/tests/data/test314 create mode 100644 deps/curl/tests/data/test315 create mode 100644 deps/curl/tests/data/test316 create mode 100644 deps/curl/tests/data/test317 create mode 100644 deps/curl/tests/data/test318 create mode 100644 deps/curl/tests/data/test319 create mode 100644 deps/curl/tests/data/test32 create mode 100644 deps/curl/tests/data/test320 create mode 100644 deps/curl/tests/data/test3200 create mode 100644 deps/curl/tests/data/test3201 create mode 100644 deps/curl/tests/data/test3202 create mode 100644 deps/curl/tests/data/test321 create mode 100644 deps/curl/tests/data/test322 create mode 100644 deps/curl/tests/data/test323 create mode 100644 deps/curl/tests/data/test324 create mode 100644 deps/curl/tests/data/test325 create mode 100644 deps/curl/tests/data/test326 create mode 100644 deps/curl/tests/data/test327 create mode 100644 deps/curl/tests/data/test328 create mode 100644 deps/curl/tests/data/test329 create mode 100644 deps/curl/tests/data/test33 create mode 100644 deps/curl/tests/data/test330 create mode 100644 deps/curl/tests/data/test331 create mode 100644 deps/curl/tests/data/test332 create mode 100644 deps/curl/tests/data/test333 create mode 100644 deps/curl/tests/data/test334 create mode 100644 deps/curl/tests/data/test335 create mode 100644 deps/curl/tests/data/test336 create mode 100644 deps/curl/tests/data/test337 create mode 100644 deps/curl/tests/data/test338 create mode 100644 deps/curl/tests/data/test339 create mode 100644 deps/curl/tests/data/test34 create mode 100644 deps/curl/tests/data/test340 create mode 100644 deps/curl/tests/data/test341 create mode 100644 deps/curl/tests/data/test342 create mode 100644 deps/curl/tests/data/test343 create mode 100644 deps/curl/tests/data/test344 create mode 100644 deps/curl/tests/data/test345 create mode 100644 deps/curl/tests/data/test346 create mode 100644 deps/curl/tests/data/test347 create mode 100644 deps/curl/tests/data/test348 create mode 100644 deps/curl/tests/data/test349 create mode 100644 deps/curl/tests/data/test35 create mode 100644 deps/curl/tests/data/test350 create mode 100644 deps/curl/tests/data/test351 create mode 100644 deps/curl/tests/data/test352 create mode 100644 deps/curl/tests/data/test353 create mode 100644 deps/curl/tests/data/test354 create mode 100644 deps/curl/tests/data/test355 create mode 100644 deps/curl/tests/data/test356 create mode 100644 deps/curl/tests/data/test357 create mode 100644 deps/curl/tests/data/test358 create mode 100644 deps/curl/tests/data/test359 create mode 100644 deps/curl/tests/data/test36 create mode 100644 deps/curl/tests/data/test360 create mode 100644 deps/curl/tests/data/test361 create mode 100644 deps/curl/tests/data/test362 create mode 100644 deps/curl/tests/data/test363 create mode 100644 deps/curl/tests/data/test364 create mode 100644 deps/curl/tests/data/test365 create mode 100644 deps/curl/tests/data/test366 create mode 100644 deps/curl/tests/data/test367 create mode 100644 deps/curl/tests/data/test368 create mode 100644 deps/curl/tests/data/test369 create mode 100644 deps/curl/tests/data/test37 create mode 100644 deps/curl/tests/data/test370 create mode 100644 deps/curl/tests/data/test371 create mode 100644 deps/curl/tests/data/test372 create mode 100644 deps/curl/tests/data/test373 create mode 100644 deps/curl/tests/data/test374 create mode 100644 deps/curl/tests/data/test375 create mode 100644 deps/curl/tests/data/test376 create mode 100644 deps/curl/tests/data/test378 create mode 100644 deps/curl/tests/data/test379 create mode 100644 deps/curl/tests/data/test38 create mode 100644 deps/curl/tests/data/test380 create mode 100644 deps/curl/tests/data/test381 create mode 100644 deps/curl/tests/data/test383 create mode 100644 deps/curl/tests/data/test384 create mode 100644 deps/curl/tests/data/test385 create mode 100644 deps/curl/tests/data/test386 create mode 100644 deps/curl/tests/data/test387 create mode 100644 deps/curl/tests/data/test388 create mode 100644 deps/curl/tests/data/test389 create mode 100644 deps/curl/tests/data/test39 create mode 100644 deps/curl/tests/data/test390 create mode 100644 deps/curl/tests/data/test391 create mode 100644 deps/curl/tests/data/test392 create mode 100644 deps/curl/tests/data/test393 create mode 100644 deps/curl/tests/data/test394 create mode 100644 deps/curl/tests/data/test395 create mode 100644 deps/curl/tests/data/test396 create mode 100644 deps/curl/tests/data/test397 create mode 100644 deps/curl/tests/data/test398 create mode 100644 deps/curl/tests/data/test399 create mode 100644 deps/curl/tests/data/test4 create mode 100644 deps/curl/tests/data/test40 create mode 100644 deps/curl/tests/data/test400 create mode 100644 deps/curl/tests/data/test401 create mode 100644 deps/curl/tests/data/test402 create mode 100644 deps/curl/tests/data/test403 create mode 100644 deps/curl/tests/data/test404 create mode 100644 deps/curl/tests/data/test405 create mode 100644 deps/curl/tests/data/test406 create mode 100644 deps/curl/tests/data/test407 create mode 100644 deps/curl/tests/data/test408 create mode 100644 deps/curl/tests/data/test409 create mode 100644 deps/curl/tests/data/test41 create mode 100644 deps/curl/tests/data/test410 create mode 100644 deps/curl/tests/data/test411 create mode 100644 deps/curl/tests/data/test412 create mode 100644 deps/curl/tests/data/test413 create mode 100644 deps/curl/tests/data/test414 create mode 100644 deps/curl/tests/data/test415 create mode 100644 deps/curl/tests/data/test416 create mode 100644 deps/curl/tests/data/test417 create mode 100644 deps/curl/tests/data/test418 create mode 100644 deps/curl/tests/data/test419 create mode 100644 deps/curl/tests/data/test42 create mode 100644 deps/curl/tests/data/test420 create mode 100644 deps/curl/tests/data/test421 create mode 100644 deps/curl/tests/data/test422 create mode 100644 deps/curl/tests/data/test423 create mode 100644 deps/curl/tests/data/test424 create mode 100644 deps/curl/tests/data/test425 create mode 100644 deps/curl/tests/data/test426 create mode 100644 deps/curl/tests/data/test427 create mode 100644 deps/curl/tests/data/test428 create mode 100644 deps/curl/tests/data/test429 create mode 100644 deps/curl/tests/data/test43 create mode 100644 deps/curl/tests/data/test430 create mode 100644 deps/curl/tests/data/test431 create mode 100644 deps/curl/tests/data/test432 create mode 100644 deps/curl/tests/data/test433 create mode 100644 deps/curl/tests/data/test434 create mode 100644 deps/curl/tests/data/test435 create mode 100644 deps/curl/tests/data/test436 create mode 100644 deps/curl/tests/data/test437 create mode 100644 deps/curl/tests/data/test438 create mode 100644 deps/curl/tests/data/test439 create mode 100644 deps/curl/tests/data/test44 create mode 100644 deps/curl/tests/data/test440 create mode 100644 deps/curl/tests/data/test441 create mode 100644 deps/curl/tests/data/test442 create mode 100644 deps/curl/tests/data/test443 create mode 100644 deps/curl/tests/data/test444 create mode 100644 deps/curl/tests/data/test445 create mode 100644 deps/curl/tests/data/test446 create mode 100644 deps/curl/tests/data/test447 create mode 100644 deps/curl/tests/data/test448 create mode 100644 deps/curl/tests/data/test449 create mode 100644 deps/curl/tests/data/test45 create mode 100644 deps/curl/tests/data/test450 create mode 100644 deps/curl/tests/data/test451 create mode 100644 deps/curl/tests/data/test452 create mode 100644 deps/curl/tests/data/test453 create mode 100644 deps/curl/tests/data/test454 create mode 100644 deps/curl/tests/data/test455 create mode 100644 deps/curl/tests/data/test456 create mode 100644 deps/curl/tests/data/test457 create mode 100644 deps/curl/tests/data/test458 create mode 100644 deps/curl/tests/data/test459 create mode 100644 deps/curl/tests/data/test46 create mode 100644 deps/curl/tests/data/test47 create mode 100644 deps/curl/tests/data/test48 create mode 100644 deps/curl/tests/data/test49 create mode 100644 deps/curl/tests/data/test490 create mode 100644 deps/curl/tests/data/test491 create mode 100644 deps/curl/tests/data/test492 create mode 100644 deps/curl/tests/data/test493 create mode 100644 deps/curl/tests/data/test494 create mode 100644 deps/curl/tests/data/test495 create mode 100644 deps/curl/tests/data/test496 create mode 100644 deps/curl/tests/data/test497 create mode 100644 deps/curl/tests/data/test498 create mode 100644 deps/curl/tests/data/test5 create mode 100644 deps/curl/tests/data/test50 create mode 100644 deps/curl/tests/data/test500 create mode 100644 deps/curl/tests/data/test501 create mode 100644 deps/curl/tests/data/test502 create mode 100644 deps/curl/tests/data/test503 create mode 100644 deps/curl/tests/data/test504 create mode 100644 deps/curl/tests/data/test505 create mode 100644 deps/curl/tests/data/test506 create mode 100644 deps/curl/tests/data/test507 create mode 100644 deps/curl/tests/data/test508 create mode 100644 deps/curl/tests/data/test509 create mode 100644 deps/curl/tests/data/test51 create mode 100644 deps/curl/tests/data/test510 create mode 100644 deps/curl/tests/data/test511 create mode 100644 deps/curl/tests/data/test512 create mode 100644 deps/curl/tests/data/test513 create mode 100644 deps/curl/tests/data/test514 create mode 100644 deps/curl/tests/data/test515 create mode 100644 deps/curl/tests/data/test516 create mode 100644 deps/curl/tests/data/test517 create mode 100644 deps/curl/tests/data/test518 create mode 100644 deps/curl/tests/data/test519 create mode 100644 deps/curl/tests/data/test52 create mode 100644 deps/curl/tests/data/test520 create mode 100644 deps/curl/tests/data/test521 create mode 100644 deps/curl/tests/data/test522 create mode 100644 deps/curl/tests/data/test523 create mode 100644 deps/curl/tests/data/test524 create mode 100644 deps/curl/tests/data/test525 create mode 100644 deps/curl/tests/data/test526 create mode 100644 deps/curl/tests/data/test527 create mode 100644 deps/curl/tests/data/test528 create mode 100644 deps/curl/tests/data/test529 create mode 100644 deps/curl/tests/data/test53 create mode 100644 deps/curl/tests/data/test530 create mode 100644 deps/curl/tests/data/test531 create mode 100644 deps/curl/tests/data/test532 create mode 100644 deps/curl/tests/data/test533 create mode 100644 deps/curl/tests/data/test534 create mode 100644 deps/curl/tests/data/test535 create mode 100644 deps/curl/tests/data/test537 create mode 100644 deps/curl/tests/data/test538 create mode 100644 deps/curl/tests/data/test539 create mode 100644 deps/curl/tests/data/test54 create mode 100644 deps/curl/tests/data/test540 create mode 100644 deps/curl/tests/data/test541 create mode 100644 deps/curl/tests/data/test542 create mode 100644 deps/curl/tests/data/test543 create mode 100644 deps/curl/tests/data/test544 create mode 100644 deps/curl/tests/data/test545 create mode 100644 deps/curl/tests/data/test546 create mode 100644 deps/curl/tests/data/test547 create mode 100644 deps/curl/tests/data/test548 create mode 100644 deps/curl/tests/data/test549 create mode 100644 deps/curl/tests/data/test55 create mode 100644 deps/curl/tests/data/test550 create mode 100644 deps/curl/tests/data/test551 create mode 100644 deps/curl/tests/data/test552 create mode 100644 deps/curl/tests/data/test553 create mode 100644 deps/curl/tests/data/test554 create mode 100644 deps/curl/tests/data/test555 create mode 100644 deps/curl/tests/data/test556 create mode 100644 deps/curl/tests/data/test557 create mode 100644 deps/curl/tests/data/test558 create mode 100644 deps/curl/tests/data/test559 create mode 100644 deps/curl/tests/data/test56 create mode 100644 deps/curl/tests/data/test560 create mode 100644 deps/curl/tests/data/test561 create mode 100644 deps/curl/tests/data/test562 create mode 100644 deps/curl/tests/data/test563 create mode 100644 deps/curl/tests/data/test564 create mode 100644 deps/curl/tests/data/test565 create mode 100644 deps/curl/tests/data/test566 create mode 100644 deps/curl/tests/data/test567 create mode 100644 deps/curl/tests/data/test568 create mode 100644 deps/curl/tests/data/test569 create mode 100644 deps/curl/tests/data/test57 create mode 100644 deps/curl/tests/data/test570 create mode 100644 deps/curl/tests/data/test571 create mode 100644 deps/curl/tests/data/test572 create mode 100644 deps/curl/tests/data/test573 create mode 100644 deps/curl/tests/data/test574 create mode 100644 deps/curl/tests/data/test575 create mode 100644 deps/curl/tests/data/test576 create mode 100644 deps/curl/tests/data/test577 create mode 100644 deps/curl/tests/data/test578 create mode 100644 deps/curl/tests/data/test579 create mode 100644 deps/curl/tests/data/test58 create mode 100644 deps/curl/tests/data/test580 create mode 100644 deps/curl/tests/data/test581 create mode 100644 deps/curl/tests/data/test582 create mode 100644 deps/curl/tests/data/test583 create mode 100644 deps/curl/tests/data/test584 create mode 100644 deps/curl/tests/data/test585 create mode 100644 deps/curl/tests/data/test586 create mode 100644 deps/curl/tests/data/test587 create mode 100644 deps/curl/tests/data/test588 create mode 100644 deps/curl/tests/data/test589 create mode 100644 deps/curl/tests/data/test59 create mode 100644 deps/curl/tests/data/test590 create mode 100644 deps/curl/tests/data/test591 create mode 100644 deps/curl/tests/data/test592 create mode 100644 deps/curl/tests/data/test593 create mode 100644 deps/curl/tests/data/test594 create mode 100644 deps/curl/tests/data/test595 create mode 100644 deps/curl/tests/data/test596 create mode 100644 deps/curl/tests/data/test597 create mode 100644 deps/curl/tests/data/test598 create mode 100644 deps/curl/tests/data/test599 create mode 100644 deps/curl/tests/data/test6 create mode 100644 deps/curl/tests/data/test60 create mode 100644 deps/curl/tests/data/test600 create mode 100644 deps/curl/tests/data/test601 create mode 100644 deps/curl/tests/data/test602 create mode 100644 deps/curl/tests/data/test603 create mode 100644 deps/curl/tests/data/test604 create mode 100644 deps/curl/tests/data/test605 create mode 100644 deps/curl/tests/data/test606 create mode 100644 deps/curl/tests/data/test607 create mode 100644 deps/curl/tests/data/test608 create mode 100644 deps/curl/tests/data/test609 create mode 100644 deps/curl/tests/data/test61 create mode 100644 deps/curl/tests/data/test610 create mode 100644 deps/curl/tests/data/test611 create mode 100644 deps/curl/tests/data/test612 create mode 100644 deps/curl/tests/data/test613 create mode 100644 deps/curl/tests/data/test614 create mode 100644 deps/curl/tests/data/test615 create mode 100644 deps/curl/tests/data/test616 create mode 100644 deps/curl/tests/data/test617 create mode 100644 deps/curl/tests/data/test618 create mode 100644 deps/curl/tests/data/test619 create mode 100644 deps/curl/tests/data/test62 create mode 100644 deps/curl/tests/data/test620 create mode 100644 deps/curl/tests/data/test621 create mode 100644 deps/curl/tests/data/test622 create mode 100644 deps/curl/tests/data/test623 create mode 100644 deps/curl/tests/data/test624 create mode 100644 deps/curl/tests/data/test625 create mode 100644 deps/curl/tests/data/test626 create mode 100644 deps/curl/tests/data/test627 create mode 100644 deps/curl/tests/data/test628 create mode 100644 deps/curl/tests/data/test629 create mode 100644 deps/curl/tests/data/test63 create mode 100644 deps/curl/tests/data/test630 create mode 100644 deps/curl/tests/data/test631 create mode 100644 deps/curl/tests/data/test632 create mode 100644 deps/curl/tests/data/test633 create mode 100644 deps/curl/tests/data/test634 create mode 100644 deps/curl/tests/data/test635 create mode 100644 deps/curl/tests/data/test636 create mode 100644 deps/curl/tests/data/test637 create mode 100644 deps/curl/tests/data/test638 create mode 100644 deps/curl/tests/data/test639 create mode 100644 deps/curl/tests/data/test64 create mode 100644 deps/curl/tests/data/test640 create mode 100644 deps/curl/tests/data/test641 create mode 100644 deps/curl/tests/data/test642 create mode 100644 deps/curl/tests/data/test643 create mode 100644 deps/curl/tests/data/test644 create mode 100644 deps/curl/tests/data/test645 create mode 100644 deps/curl/tests/data/test646 create mode 100644 deps/curl/tests/data/test647 create mode 100644 deps/curl/tests/data/test648 create mode 100644 deps/curl/tests/data/test649 create mode 100644 deps/curl/tests/data/test65 create mode 100644 deps/curl/tests/data/test650 create mode 100644 deps/curl/tests/data/test651 create mode 100644 deps/curl/tests/data/test652 create mode 100644 deps/curl/tests/data/test653 create mode 100644 deps/curl/tests/data/test654 create mode 100644 deps/curl/tests/data/test655 create mode 100644 deps/curl/tests/data/test656 create mode 100644 deps/curl/tests/data/test658 create mode 100644 deps/curl/tests/data/test659 create mode 100644 deps/curl/tests/data/test66 create mode 100644 deps/curl/tests/data/test660 create mode 100644 deps/curl/tests/data/test661 create mode 100644 deps/curl/tests/data/test662 create mode 100644 deps/curl/tests/data/test663 create mode 100644 deps/curl/tests/data/test664 create mode 100644 deps/curl/tests/data/test665 create mode 100644 deps/curl/tests/data/test666 create mode 100644 deps/curl/tests/data/test667 create mode 100644 deps/curl/tests/data/test668 create mode 100644 deps/curl/tests/data/test669 create mode 100644 deps/curl/tests/data/test67 create mode 100644 deps/curl/tests/data/test670 create mode 100644 deps/curl/tests/data/test671 create mode 100644 deps/curl/tests/data/test672 create mode 100644 deps/curl/tests/data/test673 create mode 100644 deps/curl/tests/data/test674 create mode 100644 deps/curl/tests/data/test675 create mode 100644 deps/curl/tests/data/test676 create mode 100644 deps/curl/tests/data/test677 create mode 100644 deps/curl/tests/data/test678 create mode 100644 deps/curl/tests/data/test679 create mode 100644 deps/curl/tests/data/test68 create mode 100644 deps/curl/tests/data/test680 create mode 100644 deps/curl/tests/data/test681 create mode 100644 deps/curl/tests/data/test682 create mode 100644 deps/curl/tests/data/test683 create mode 100644 deps/curl/tests/data/test684 create mode 100644 deps/curl/tests/data/test685 create mode 100644 deps/curl/tests/data/test686 create mode 100644 deps/curl/tests/data/test687 create mode 100644 deps/curl/tests/data/test688 create mode 100644 deps/curl/tests/data/test69 create mode 100644 deps/curl/tests/data/test7 create mode 100644 deps/curl/tests/data/test70 create mode 100644 deps/curl/tests/data/test700 create mode 100644 deps/curl/tests/data/test701 create mode 100644 deps/curl/tests/data/test702 create mode 100644 deps/curl/tests/data/test703 create mode 100644 deps/curl/tests/data/test704 create mode 100644 deps/curl/tests/data/test705 create mode 100644 deps/curl/tests/data/test706 create mode 100644 deps/curl/tests/data/test707 create mode 100644 deps/curl/tests/data/test708 create mode 100644 deps/curl/tests/data/test709 create mode 100644 deps/curl/tests/data/test71 create mode 100644 deps/curl/tests/data/test710 create mode 100644 deps/curl/tests/data/test711 create mode 100644 deps/curl/tests/data/test712 create mode 100644 deps/curl/tests/data/test713 create mode 100644 deps/curl/tests/data/test714 create mode 100644 deps/curl/tests/data/test715 create mode 100644 deps/curl/tests/data/test716 create mode 100644 deps/curl/tests/data/test717 create mode 100644 deps/curl/tests/data/test718 create mode 100644 deps/curl/tests/data/test719 create mode 100644 deps/curl/tests/data/test72 create mode 100644 deps/curl/tests/data/test720 create mode 100644 deps/curl/tests/data/test721 create mode 100644 deps/curl/tests/data/test722 create mode 100644 deps/curl/tests/data/test723 create mode 100644 deps/curl/tests/data/test724 create mode 100644 deps/curl/tests/data/test725 create mode 100644 deps/curl/tests/data/test726 create mode 100644 deps/curl/tests/data/test727 create mode 100644 deps/curl/tests/data/test728 create mode 100644 deps/curl/tests/data/test729 create mode 100644 deps/curl/tests/data/test73 create mode 100644 deps/curl/tests/data/test730 create mode 100644 deps/curl/tests/data/test731 create mode 100644 deps/curl/tests/data/test732 create mode 100644 deps/curl/tests/data/test733 create mode 100644 deps/curl/tests/data/test734 create mode 100644 deps/curl/tests/data/test735 create mode 100644 deps/curl/tests/data/test736 create mode 100644 deps/curl/tests/data/test737 create mode 100644 deps/curl/tests/data/test738 create mode 100644 deps/curl/tests/data/test739 create mode 100644 deps/curl/tests/data/test74 create mode 100644 deps/curl/tests/data/test740 create mode 100644 deps/curl/tests/data/test741 create mode 100644 deps/curl/tests/data/test75 create mode 100644 deps/curl/tests/data/test76 create mode 100644 deps/curl/tests/data/test77 create mode 100644 deps/curl/tests/data/test78 create mode 100644 deps/curl/tests/data/test79 create mode 100644 deps/curl/tests/data/test799 create mode 100644 deps/curl/tests/data/test8 create mode 100644 deps/curl/tests/data/test80 create mode 100644 deps/curl/tests/data/test800 create mode 100644 deps/curl/tests/data/test801 create mode 100644 deps/curl/tests/data/test802 create mode 100644 deps/curl/tests/data/test803 create mode 100644 deps/curl/tests/data/test804 create mode 100644 deps/curl/tests/data/test805 create mode 100644 deps/curl/tests/data/test806 create mode 100644 deps/curl/tests/data/test807 create mode 100644 deps/curl/tests/data/test808 create mode 100644 deps/curl/tests/data/test809 create mode 100644 deps/curl/tests/data/test81 create mode 100644 deps/curl/tests/data/test810 create mode 100644 deps/curl/tests/data/test811 create mode 100644 deps/curl/tests/data/test812 create mode 100644 deps/curl/tests/data/test813 create mode 100644 deps/curl/tests/data/test814 create mode 100644 deps/curl/tests/data/test815 create mode 100644 deps/curl/tests/data/test816 create mode 100644 deps/curl/tests/data/test817 create mode 100644 deps/curl/tests/data/test818 create mode 100644 deps/curl/tests/data/test819 create mode 100644 deps/curl/tests/data/test82 create mode 100644 deps/curl/tests/data/test820 create mode 100644 deps/curl/tests/data/test821 create mode 100644 deps/curl/tests/data/test822 create mode 100644 deps/curl/tests/data/test823 create mode 100644 deps/curl/tests/data/test824 create mode 100644 deps/curl/tests/data/test825 create mode 100644 deps/curl/tests/data/test826 create mode 100644 deps/curl/tests/data/test827 create mode 100644 deps/curl/tests/data/test828 create mode 100644 deps/curl/tests/data/test829 create mode 100644 deps/curl/tests/data/test83 create mode 100644 deps/curl/tests/data/test830 create mode 100644 deps/curl/tests/data/test831 create mode 100644 deps/curl/tests/data/test832 create mode 100644 deps/curl/tests/data/test833 create mode 100644 deps/curl/tests/data/test834 create mode 100644 deps/curl/tests/data/test835 create mode 100644 deps/curl/tests/data/test836 create mode 100644 deps/curl/tests/data/test837 create mode 100644 deps/curl/tests/data/test838 create mode 100644 deps/curl/tests/data/test839 create mode 100644 deps/curl/tests/data/test84 create mode 100644 deps/curl/tests/data/test840 create mode 100644 deps/curl/tests/data/test841 create mode 100644 deps/curl/tests/data/test842 create mode 100644 deps/curl/tests/data/test843 create mode 100644 deps/curl/tests/data/test844 create mode 100644 deps/curl/tests/data/test845 create mode 100644 deps/curl/tests/data/test846 create mode 100644 deps/curl/tests/data/test847 create mode 100644 deps/curl/tests/data/test848 create mode 100644 deps/curl/tests/data/test849 create mode 100644 deps/curl/tests/data/test85 create mode 100644 deps/curl/tests/data/test850 create mode 100644 deps/curl/tests/data/test851 create mode 100644 deps/curl/tests/data/test852 create mode 100644 deps/curl/tests/data/test853 create mode 100644 deps/curl/tests/data/test854 create mode 100644 deps/curl/tests/data/test855 create mode 100644 deps/curl/tests/data/test856 create mode 100644 deps/curl/tests/data/test857 create mode 100644 deps/curl/tests/data/test858 create mode 100644 deps/curl/tests/data/test859 create mode 100644 deps/curl/tests/data/test86 create mode 100644 deps/curl/tests/data/test860 create mode 100644 deps/curl/tests/data/test861 create mode 100644 deps/curl/tests/data/test862 create mode 100644 deps/curl/tests/data/test863 create mode 100644 deps/curl/tests/data/test864 create mode 100644 deps/curl/tests/data/test865 create mode 100644 deps/curl/tests/data/test866 create mode 100644 deps/curl/tests/data/test867 create mode 100644 deps/curl/tests/data/test868 create mode 100644 deps/curl/tests/data/test869 create mode 100644 deps/curl/tests/data/test87 create mode 100644 deps/curl/tests/data/test870 create mode 100644 deps/curl/tests/data/test871 create mode 100644 deps/curl/tests/data/test872 create mode 100644 deps/curl/tests/data/test873 create mode 100644 deps/curl/tests/data/test874 create mode 100644 deps/curl/tests/data/test875 create mode 100644 deps/curl/tests/data/test876 create mode 100644 deps/curl/tests/data/test877 create mode 100644 deps/curl/tests/data/test878 create mode 100644 deps/curl/tests/data/test879 create mode 100644 deps/curl/tests/data/test88 create mode 100644 deps/curl/tests/data/test880 create mode 100644 deps/curl/tests/data/test881 create mode 100644 deps/curl/tests/data/test882 create mode 100644 deps/curl/tests/data/test883 create mode 100644 deps/curl/tests/data/test884 create mode 100644 deps/curl/tests/data/test885 create mode 100644 deps/curl/tests/data/test886 create mode 100644 deps/curl/tests/data/test887 create mode 100644 deps/curl/tests/data/test888 create mode 100644 deps/curl/tests/data/test889 create mode 100644 deps/curl/tests/data/test89 create mode 100644 deps/curl/tests/data/test890 create mode 100644 deps/curl/tests/data/test891 create mode 100644 deps/curl/tests/data/test892 create mode 100644 deps/curl/tests/data/test893 create mode 100644 deps/curl/tests/data/test894 create mode 100644 deps/curl/tests/data/test895 create mode 100644 deps/curl/tests/data/test896 create mode 100644 deps/curl/tests/data/test897 create mode 100644 deps/curl/tests/data/test898 create mode 100644 deps/curl/tests/data/test899 create mode 100644 deps/curl/tests/data/test9 create mode 100644 deps/curl/tests/data/test90 create mode 100644 deps/curl/tests/data/test900 create mode 100644 deps/curl/tests/data/test901 create mode 100644 deps/curl/tests/data/test902 create mode 100644 deps/curl/tests/data/test903 create mode 100644 deps/curl/tests/data/test904 create mode 100644 deps/curl/tests/data/test905 create mode 100644 deps/curl/tests/data/test906 create mode 100644 deps/curl/tests/data/test907 create mode 100644 deps/curl/tests/data/test908 create mode 100644 deps/curl/tests/data/test909 create mode 100644 deps/curl/tests/data/test91 create mode 100644 deps/curl/tests/data/test910 create mode 100644 deps/curl/tests/data/test911 create mode 100644 deps/curl/tests/data/test912 create mode 100644 deps/curl/tests/data/test913 create mode 100644 deps/curl/tests/data/test914 create mode 100644 deps/curl/tests/data/test915 create mode 100644 deps/curl/tests/data/test916 create mode 100644 deps/curl/tests/data/test917 create mode 100644 deps/curl/tests/data/test918 create mode 100644 deps/curl/tests/data/test919 create mode 100644 deps/curl/tests/data/test92 create mode 100644 deps/curl/tests/data/test920 create mode 100644 deps/curl/tests/data/test921 create mode 100644 deps/curl/tests/data/test922 create mode 100644 deps/curl/tests/data/test923 create mode 100644 deps/curl/tests/data/test924 create mode 100644 deps/curl/tests/data/test925 create mode 100644 deps/curl/tests/data/test926 create mode 100644 deps/curl/tests/data/test927 create mode 100644 deps/curl/tests/data/test928 create mode 100644 deps/curl/tests/data/test929 create mode 100644 deps/curl/tests/data/test93 create mode 100644 deps/curl/tests/data/test930 create mode 100644 deps/curl/tests/data/test931 create mode 100644 deps/curl/tests/data/test932 create mode 100644 deps/curl/tests/data/test933 create mode 100644 deps/curl/tests/data/test934 create mode 100644 deps/curl/tests/data/test935 create mode 100644 deps/curl/tests/data/test936 create mode 100644 deps/curl/tests/data/test937 create mode 100644 deps/curl/tests/data/test938 create mode 100644 deps/curl/tests/data/test939 create mode 100644 deps/curl/tests/data/test94 create mode 100644 deps/curl/tests/data/test940 create mode 100644 deps/curl/tests/data/test941 create mode 100644 deps/curl/tests/data/test942 create mode 100644 deps/curl/tests/data/test943 create mode 100644 deps/curl/tests/data/test944 create mode 100644 deps/curl/tests/data/test945 create mode 100644 deps/curl/tests/data/test946 create mode 100644 deps/curl/tests/data/test947 create mode 100644 deps/curl/tests/data/test948 create mode 100644 deps/curl/tests/data/test949 create mode 100644 deps/curl/tests/data/test95 create mode 100644 deps/curl/tests/data/test950 create mode 100644 deps/curl/tests/data/test951 create mode 100644 deps/curl/tests/data/test952 create mode 100644 deps/curl/tests/data/test953 create mode 100644 deps/curl/tests/data/test954 create mode 100644 deps/curl/tests/data/test955 create mode 100644 deps/curl/tests/data/test956 create mode 100644 deps/curl/tests/data/test957 create mode 100644 deps/curl/tests/data/test958 create mode 100644 deps/curl/tests/data/test959 create mode 100644 deps/curl/tests/data/test96 create mode 100644 deps/curl/tests/data/test960 create mode 100644 deps/curl/tests/data/test961 create mode 100644 deps/curl/tests/data/test962 create mode 100644 deps/curl/tests/data/test963 create mode 100644 deps/curl/tests/data/test964 create mode 100644 deps/curl/tests/data/test965 create mode 100644 deps/curl/tests/data/test966 create mode 100644 deps/curl/tests/data/test967 create mode 100644 deps/curl/tests/data/test968 create mode 100644 deps/curl/tests/data/test969 create mode 100644 deps/curl/tests/data/test97 create mode 100644 deps/curl/tests/data/test970 create mode 100644 deps/curl/tests/data/test971 create mode 100644 deps/curl/tests/data/test972 create mode 100644 deps/curl/tests/data/test973 create mode 100644 deps/curl/tests/data/test974 create mode 100644 deps/curl/tests/data/test975 create mode 100644 deps/curl/tests/data/test976 create mode 100644 deps/curl/tests/data/test977 create mode 100644 deps/curl/tests/data/test978 create mode 100644 deps/curl/tests/data/test979 create mode 100644 deps/curl/tests/data/test98 create mode 100644 deps/curl/tests/data/test980 create mode 100644 deps/curl/tests/data/test981 create mode 100644 deps/curl/tests/data/test982 create mode 100644 deps/curl/tests/data/test983 create mode 100644 deps/curl/tests/data/test984 create mode 100644 deps/curl/tests/data/test985 create mode 100644 deps/curl/tests/data/test986 create mode 100644 deps/curl/tests/data/test987 create mode 100644 deps/curl/tests/data/test988 create mode 100644 deps/curl/tests/data/test989 create mode 100644 deps/curl/tests/data/test99 create mode 100644 deps/curl/tests/data/test990 create mode 100644 deps/curl/tests/data/test991 create mode 100644 deps/curl/tests/devtest.pl create mode 100644 deps/curl/tests/dictserver.py create mode 100644 deps/curl/tests/directories.pm create mode 100644 deps/curl/tests/disable-scan.pl create mode 100644 deps/curl/tests/error-codes.pl create mode 100644 deps/curl/tests/errorcodes.pl create mode 100644 deps/curl/tests/extern-scan.pl create mode 100644 deps/curl/tests/ftpserver.pl create mode 100644 deps/curl/tests/getpart.pm create mode 100644 deps/curl/tests/globalconfig.pm create mode 100644 deps/curl/tests/http-server.pl create mode 100644 deps/curl/tests/http/.gitignore create mode 100644 deps/curl/tests/http/Makefile.am create mode 100644 deps/curl/tests/http/README.md create mode 100644 deps/curl/tests/http/clients/.gitignore create mode 100644 deps/curl/tests/http/clients/Makefile.am create mode 100644 deps/curl/tests/http/clients/Makefile.inc create mode 100644 deps/curl/tests/http/clients/h2-download.c create mode 100644 deps/curl/tests/http/clients/h2-pausing.c create mode 100644 deps/curl/tests/http/clients/h2-serverpush.c create mode 100644 deps/curl/tests/http/clients/h2-upgrade-extreme.c create mode 100644 deps/curl/tests/http/clients/tls-session-reuse.c create mode 100644 deps/curl/tests/http/clients/ws-data.c create mode 100644 deps/curl/tests/http/clients/ws-pingpong.c create mode 100644 deps/curl/tests/http/config.ini.in create mode 100644 deps/curl/tests/http/conftest.py create mode 100644 deps/curl/tests/http/requirements.txt create mode 100644 deps/curl/tests/http/scorecard.py create mode 100644 deps/curl/tests/http/test_01_basic.py create mode 100644 deps/curl/tests/http/test_02_download.py create mode 100644 deps/curl/tests/http/test_03_goaway.py create mode 100644 deps/curl/tests/http/test_04_stuttered.py create mode 100644 deps/curl/tests/http/test_05_errors.py create mode 100644 deps/curl/tests/http/test_06_eyeballs.py create mode 100644 deps/curl/tests/http/test_07_upload.py create mode 100644 deps/curl/tests/http/test_08_caddy.py create mode 100644 deps/curl/tests/http/test_09_push.py create mode 100644 deps/curl/tests/http/test_10_proxy.py create mode 100644 deps/curl/tests/http/test_11_unix.py create mode 100644 deps/curl/tests/http/test_12_reuse.py create mode 100644 deps/curl/tests/http/test_13_proxy_auth.py create mode 100644 deps/curl/tests/http/test_14_auth.py create mode 100644 deps/curl/tests/http/test_15_tracing.py create mode 100644 deps/curl/tests/http/test_20_websockets.py create mode 100644 deps/curl/tests/http/testenv/__init__.py create mode 100644 deps/curl/tests/http/testenv/caddy.py create mode 100644 deps/curl/tests/http/testenv/certs.py create mode 100644 deps/curl/tests/http/testenv/client.py create mode 100644 deps/curl/tests/http/testenv/curl.py create mode 100644 deps/curl/tests/http/testenv/env.py create mode 100644 deps/curl/tests/http/testenv/httpd.py create mode 100644 deps/curl/tests/http/testenv/mod_curltest/.gitignore create mode 100644 deps/curl/tests/http/testenv/mod_curltest/mod_curltest.c create mode 100644 deps/curl/tests/http/testenv/nghttpx.py create mode 100644 deps/curl/tests/http/testenv/ports.py create mode 100644 deps/curl/tests/http/testenv/ws_echo_server.py create mode 100644 deps/curl/tests/http2-server.pl create mode 100644 deps/curl/tests/http3-server.pl create mode 100644 deps/curl/tests/libtest/.checksrc create mode 100644 deps/curl/tests/libtest/.gitignore create mode 100644 deps/curl/tests/libtest/CMakeLists.txt create mode 100644 deps/curl/tests/libtest/Makefile.am create mode 100644 deps/curl/tests/libtest/Makefile.inc create mode 100644 deps/curl/tests/libtest/chkhostname.c create mode 100644 deps/curl/tests/libtest/first.c create mode 100644 deps/curl/tests/libtest/lib1156.c create mode 100644 deps/curl/tests/libtest/lib1301.c create mode 100644 deps/curl/tests/libtest/lib1500.c create mode 100644 deps/curl/tests/libtest/lib1501.c create mode 100644 deps/curl/tests/libtest/lib1502.c create mode 100644 deps/curl/tests/libtest/lib1506.c create mode 100644 deps/curl/tests/libtest/lib1507.c create mode 100644 deps/curl/tests/libtest/lib1508.c create mode 100644 deps/curl/tests/libtest/lib1509.c create mode 100644 deps/curl/tests/libtest/lib1510.c create mode 100644 deps/curl/tests/libtest/lib1511.c create mode 100644 deps/curl/tests/libtest/lib1512.c create mode 100644 deps/curl/tests/libtest/lib1513.c create mode 100644 deps/curl/tests/libtest/lib1514.c create mode 100644 deps/curl/tests/libtest/lib1515.c create mode 100644 deps/curl/tests/libtest/lib1517.c create mode 100644 deps/curl/tests/libtest/lib1518.c create mode 100644 deps/curl/tests/libtest/lib1520.c create mode 100644 deps/curl/tests/libtest/lib1522.c create mode 100644 deps/curl/tests/libtest/lib1523.c create mode 100644 deps/curl/tests/libtest/lib1525.c create mode 100644 deps/curl/tests/libtest/lib1526.c create mode 100644 deps/curl/tests/libtest/lib1527.c create mode 100644 deps/curl/tests/libtest/lib1528.c create mode 100644 deps/curl/tests/libtest/lib1529.c create mode 100644 deps/curl/tests/libtest/lib1530.c create mode 100644 deps/curl/tests/libtest/lib1531.c create mode 100644 deps/curl/tests/libtest/lib1532.c create mode 100644 deps/curl/tests/libtest/lib1533.c create mode 100644 deps/curl/tests/libtest/lib1534.c create mode 100644 deps/curl/tests/libtest/lib1535.c create mode 100644 deps/curl/tests/libtest/lib1536.c create mode 100644 deps/curl/tests/libtest/lib1537.c create mode 100644 deps/curl/tests/libtest/lib1538.c create mode 100644 deps/curl/tests/libtest/lib1540.c create mode 100644 deps/curl/tests/libtest/lib1541.c create mode 100644 deps/curl/tests/libtest/lib1542.c create mode 100644 deps/curl/tests/libtest/lib1545.c create mode 100644 deps/curl/tests/libtest/lib1550.c create mode 100644 deps/curl/tests/libtest/lib1551.c create mode 100644 deps/curl/tests/libtest/lib1552.c create mode 100644 deps/curl/tests/libtest/lib1553.c create mode 100644 deps/curl/tests/libtest/lib1554.c create mode 100644 deps/curl/tests/libtest/lib1555.c create mode 100644 deps/curl/tests/libtest/lib1556.c create mode 100644 deps/curl/tests/libtest/lib1557.c create mode 100644 deps/curl/tests/libtest/lib1558.c create mode 100644 deps/curl/tests/libtest/lib1559.c create mode 100644 deps/curl/tests/libtest/lib1560.c create mode 100644 deps/curl/tests/libtest/lib1564.c create mode 100644 deps/curl/tests/libtest/lib1565.c create mode 100644 deps/curl/tests/libtest/lib1567.c create mode 100644 deps/curl/tests/libtest/lib1568.c create mode 100644 deps/curl/tests/libtest/lib1569.c create mode 100644 deps/curl/tests/libtest/lib1591.c create mode 100644 deps/curl/tests/libtest/lib1592.c create mode 100644 deps/curl/tests/libtest/lib1593.c create mode 100644 deps/curl/tests/libtest/lib1594.c create mode 100644 deps/curl/tests/libtest/lib1597.c create mode 100644 deps/curl/tests/libtest/lib1662.c create mode 100644 deps/curl/tests/libtest/lib1900.c create mode 100644 deps/curl/tests/libtest/lib1903.c create mode 100644 deps/curl/tests/libtest/lib1905.c create mode 100644 deps/curl/tests/libtest/lib1906.c create mode 100644 deps/curl/tests/libtest/lib1907.c create mode 100644 deps/curl/tests/libtest/lib1908.c create mode 100644 deps/curl/tests/libtest/lib1910.c create mode 100644 deps/curl/tests/libtest/lib1911.c create mode 100644 deps/curl/tests/libtest/lib1912.c create mode 100644 deps/curl/tests/libtest/lib1913.c create mode 100644 deps/curl/tests/libtest/lib1915.c create mode 100644 deps/curl/tests/libtest/lib1916.c create mode 100644 deps/curl/tests/libtest/lib1918.c create mode 100644 deps/curl/tests/libtest/lib1919.c create mode 100644 deps/curl/tests/libtest/lib1933.c create mode 100644 deps/curl/tests/libtest/lib1934.c create mode 100644 deps/curl/tests/libtest/lib1935.c create mode 100644 deps/curl/tests/libtest/lib1936.c create mode 100644 deps/curl/tests/libtest/lib1937.c create mode 100644 deps/curl/tests/libtest/lib1938.c create mode 100644 deps/curl/tests/libtest/lib1939.c create mode 100644 deps/curl/tests/libtest/lib1940.c create mode 100644 deps/curl/tests/libtest/lib1945.c create mode 100644 deps/curl/tests/libtest/lib1947.c create mode 100644 deps/curl/tests/libtest/lib1948.c create mode 100644 deps/curl/tests/libtest/lib1955.c create mode 100644 deps/curl/tests/libtest/lib1956.c create mode 100644 deps/curl/tests/libtest/lib1957.c create mode 100644 deps/curl/tests/libtest/lib1958.c create mode 100644 deps/curl/tests/libtest/lib1959.c create mode 100644 deps/curl/tests/libtest/lib1960.c create mode 100644 deps/curl/tests/libtest/lib1964.c create mode 100644 deps/curl/tests/libtest/lib1970.c create mode 100644 deps/curl/tests/libtest/lib1971.c create mode 100644 deps/curl/tests/libtest/lib1972.c create mode 100644 deps/curl/tests/libtest/lib1973.c create mode 100644 deps/curl/tests/libtest/lib1974.c create mode 100644 deps/curl/tests/libtest/lib1975.c create mode 100644 deps/curl/tests/libtest/lib2301.c create mode 100644 deps/curl/tests/libtest/lib2302.c create mode 100644 deps/curl/tests/libtest/lib2304.c create mode 100644 deps/curl/tests/libtest/lib2305.c create mode 100644 deps/curl/tests/libtest/lib2306.c create mode 100644 deps/curl/tests/libtest/lib2402.c create mode 100644 deps/curl/tests/libtest/lib2404.c create mode 100644 deps/curl/tests/libtest/lib2502.c create mode 100644 deps/curl/tests/libtest/lib3010.c create mode 100644 deps/curl/tests/libtest/lib3025.c create mode 100644 deps/curl/tests/libtest/lib3026.c create mode 100644 deps/curl/tests/libtest/lib3027.c create mode 100644 deps/curl/tests/libtest/lib3100.c create mode 100644 deps/curl/tests/libtest/lib3101.c create mode 100644 deps/curl/tests/libtest/lib3102.c create mode 100644 deps/curl/tests/libtest/lib3103.c create mode 100644 deps/curl/tests/libtest/lib500.c create mode 100644 deps/curl/tests/libtest/lib501.c create mode 100644 deps/curl/tests/libtest/lib502.c create mode 100644 deps/curl/tests/libtest/lib503.c create mode 100644 deps/curl/tests/libtest/lib504.c create mode 100644 deps/curl/tests/libtest/lib505.c create mode 100644 deps/curl/tests/libtest/lib506.c create mode 100644 deps/curl/tests/libtest/lib507.c create mode 100644 deps/curl/tests/libtest/lib508.c create mode 100644 deps/curl/tests/libtest/lib509.c create mode 100644 deps/curl/tests/libtest/lib510.c create mode 100644 deps/curl/tests/libtest/lib511.c create mode 100644 deps/curl/tests/libtest/lib512.c create mode 100644 deps/curl/tests/libtest/lib513.c create mode 100644 deps/curl/tests/libtest/lib514.c create mode 100644 deps/curl/tests/libtest/lib515.c create mode 100644 deps/curl/tests/libtest/lib516.c create mode 100644 deps/curl/tests/libtest/lib517.c create mode 100644 deps/curl/tests/libtest/lib518.c create mode 100644 deps/curl/tests/libtest/lib519.c create mode 100644 deps/curl/tests/libtest/lib520.c create mode 100644 deps/curl/tests/libtest/lib521.c create mode 100644 deps/curl/tests/libtest/lib523.c create mode 100644 deps/curl/tests/libtest/lib524.c create mode 100644 deps/curl/tests/libtest/lib525.c create mode 100644 deps/curl/tests/libtest/lib526.c create mode 100644 deps/curl/tests/libtest/lib530.c create mode 100644 deps/curl/tests/libtest/lib533.c create mode 100644 deps/curl/tests/libtest/lib537.c create mode 100644 deps/curl/tests/libtest/lib539.c create mode 100644 deps/curl/tests/libtest/lib540.c create mode 100644 deps/curl/tests/libtest/lib541.c create mode 100644 deps/curl/tests/libtest/lib542.c create mode 100644 deps/curl/tests/libtest/lib543.c create mode 100644 deps/curl/tests/libtest/lib544.c create mode 100644 deps/curl/tests/libtest/lib547.c create mode 100644 deps/curl/tests/libtest/lib549.c create mode 100644 deps/curl/tests/libtest/lib552.c create mode 100644 deps/curl/tests/libtest/lib553.c create mode 100644 deps/curl/tests/libtest/lib554.c create mode 100644 deps/curl/tests/libtest/lib555.c create mode 100644 deps/curl/tests/libtest/lib556.c create mode 100644 deps/curl/tests/libtest/lib557.c create mode 100644 deps/curl/tests/libtest/lib558.c create mode 100644 deps/curl/tests/libtest/lib559.c create mode 100644 deps/curl/tests/libtest/lib560.c create mode 100644 deps/curl/tests/libtest/lib562.c create mode 100644 deps/curl/tests/libtest/lib564.c create mode 100644 deps/curl/tests/libtest/lib566.c create mode 100644 deps/curl/tests/libtest/lib567.c create mode 100644 deps/curl/tests/libtest/lib568.c create mode 100644 deps/curl/tests/libtest/lib569.c create mode 100644 deps/curl/tests/libtest/lib570.c create mode 100644 deps/curl/tests/libtest/lib571.c create mode 100644 deps/curl/tests/libtest/lib572.c create mode 100644 deps/curl/tests/libtest/lib573.c create mode 100644 deps/curl/tests/libtest/lib574.c create mode 100644 deps/curl/tests/libtest/lib575.c create mode 100644 deps/curl/tests/libtest/lib576.c create mode 100644 deps/curl/tests/libtest/lib578.c create mode 100644 deps/curl/tests/libtest/lib579.c create mode 100644 deps/curl/tests/libtest/lib582.c create mode 100644 deps/curl/tests/libtest/lib583.c create mode 100644 deps/curl/tests/libtest/lib586.c create mode 100644 deps/curl/tests/libtest/lib589.c create mode 100644 deps/curl/tests/libtest/lib590.c create mode 100644 deps/curl/tests/libtest/lib591.c create mode 100644 deps/curl/tests/libtest/lib597.c create mode 100644 deps/curl/tests/libtest/lib598.c create mode 100644 deps/curl/tests/libtest/lib599.c create mode 100644 deps/curl/tests/libtest/lib643.c create mode 100644 deps/curl/tests/libtest/lib650.c create mode 100644 deps/curl/tests/libtest/lib651.c create mode 100644 deps/curl/tests/libtest/lib652.c create mode 100644 deps/curl/tests/libtest/lib653.c create mode 100644 deps/curl/tests/libtest/lib654.c create mode 100644 deps/curl/tests/libtest/lib655.c create mode 100644 deps/curl/tests/libtest/lib658.c create mode 100644 deps/curl/tests/libtest/lib659.c create mode 100644 deps/curl/tests/libtest/lib661.c create mode 100644 deps/curl/tests/libtest/lib666.c create mode 100644 deps/curl/tests/libtest/lib667.c create mode 100644 deps/curl/tests/libtest/lib668.c create mode 100644 deps/curl/tests/libtest/lib670.c create mode 100644 deps/curl/tests/libtest/lib674.c create mode 100644 deps/curl/tests/libtest/lib676.c create mode 100644 deps/curl/tests/libtest/lib677.c create mode 100644 deps/curl/tests/libtest/lib678.c create mode 100644 deps/curl/tests/libtest/libauthretry.c create mode 100644 deps/curl/tests/libtest/libntlmconnect.c create mode 100644 deps/curl/tests/libtest/libprereq.c create mode 100644 deps/curl/tests/libtest/mk-lib1521.pl create mode 100644 deps/curl/tests/libtest/notexists.pl create mode 100644 deps/curl/tests/libtest/sethostname.c create mode 100644 deps/curl/tests/libtest/stub_gssapi.c create mode 100644 deps/curl/tests/libtest/stub_gssapi.h create mode 100644 deps/curl/tests/libtest/test.h create mode 100644 deps/curl/tests/libtest/test1013.pl create mode 100644 deps/curl/tests/libtest/test1022.pl create mode 100644 deps/curl/tests/libtest/test307.pl create mode 100644 deps/curl/tests/libtest/test610.pl create mode 100644 deps/curl/tests/libtest/test613.pl create mode 100644 deps/curl/tests/libtest/testtrace.c create mode 100644 deps/curl/tests/libtest/testtrace.h create mode 100644 deps/curl/tests/libtest/testutil.c create mode 100644 deps/curl/tests/libtest/testutil.h create mode 100644 deps/curl/tests/manpage-scan.pl create mode 100644 deps/curl/tests/manpage-syntax.pl create mode 100644 deps/curl/tests/markdown-uppercase.pl create mode 100644 deps/curl/tests/mem-include-scan.pl create mode 100644 deps/curl/tests/memanalyze.pl create mode 100644 deps/curl/tests/negtelnetserver.py create mode 100644 deps/curl/tests/nghttpx.conf create mode 100644 deps/curl/tests/nroff-scan.pl create mode 100644 deps/curl/tests/option-check.pl create mode 100644 deps/curl/tests/options-scan.pl create mode 100644 deps/curl/tests/pathhelp.pm create mode 100644 deps/curl/tests/processhelp.pm create mode 100644 deps/curl/tests/requirements.txt create mode 100644 deps/curl/tests/rtspserver.pl create mode 100644 deps/curl/tests/runner.pm create mode 100644 deps/curl/tests/runtests.1 create mode 100644 deps/curl/tests/runtests.pl create mode 100644 deps/curl/tests/secureserver.pl create mode 100644 deps/curl/tests/server/.gitignore create mode 100644 deps/curl/tests/server/CMakeLists.txt create mode 100644 deps/curl/tests/server/Makefile.am create mode 100644 deps/curl/tests/server/Makefile.inc create mode 100644 deps/curl/tests/server/base64.pl create mode 100644 deps/curl/tests/server/disabled.c create mode 100644 deps/curl/tests/server/fake_ntlm.c create mode 100644 deps/curl/tests/server/getpart.c create mode 100644 deps/curl/tests/server/getpart.h create mode 100644 deps/curl/tests/server/mqttd.c create mode 100644 deps/curl/tests/server/resolve.c create mode 100644 deps/curl/tests/server/rtspd.c create mode 100644 deps/curl/tests/server/server_setup.h create mode 100644 deps/curl/tests/server/server_sockaddr.h create mode 100644 deps/curl/tests/server/sockfilt.c create mode 100644 deps/curl/tests/server/socksd.c create mode 100644 deps/curl/tests/server/sws.c create mode 100644 deps/curl/tests/server/testpart.c create mode 100644 deps/curl/tests/server/tftp.h create mode 100644 deps/curl/tests/server/tftpd.c create mode 100644 deps/curl/tests/server/util.c create mode 100644 deps/curl/tests/server/util.h create mode 100644 deps/curl/tests/serverhelp.pm create mode 100644 deps/curl/tests/servers.pm create mode 100644 deps/curl/tests/smbserver.py create mode 100644 deps/curl/tests/sshhelp.pm create mode 100644 deps/curl/tests/sshserver.pl create mode 100644 deps/curl/tests/stunnel.pem create mode 100644 deps/curl/tests/symbol-scan.pl create mode 100644 deps/curl/tests/testcurl.1 create mode 100644 deps/curl/tests/testcurl.pl create mode 100644 deps/curl/tests/testutil.pm create mode 100644 deps/curl/tests/tftpserver.pl create mode 100644 deps/curl/tests/unit/.gitignore create mode 100644 deps/curl/tests/unit/CMakeLists.txt create mode 100644 deps/curl/tests/unit/Makefile.am create mode 100644 deps/curl/tests/unit/Makefile.inc create mode 100644 deps/curl/tests/unit/README.md create mode 100644 deps/curl/tests/unit/curlcheck.h create mode 100644 deps/curl/tests/unit/unit1300.c create mode 100644 deps/curl/tests/unit/unit1302.c create mode 100644 deps/curl/tests/unit/unit1303.c create mode 100644 deps/curl/tests/unit/unit1304.c create mode 100644 deps/curl/tests/unit/unit1305.c create mode 100644 deps/curl/tests/unit/unit1307.c create mode 100644 deps/curl/tests/unit/unit1308.c create mode 100644 deps/curl/tests/unit/unit1309.c create mode 100644 deps/curl/tests/unit/unit1323.c create mode 100644 deps/curl/tests/unit/unit1330.c create mode 100644 deps/curl/tests/unit/unit1394.c create mode 100644 deps/curl/tests/unit/unit1395.c create mode 100644 deps/curl/tests/unit/unit1396.c create mode 100644 deps/curl/tests/unit/unit1397.c create mode 100644 deps/curl/tests/unit/unit1398.c create mode 100644 deps/curl/tests/unit/unit1399.c create mode 100644 deps/curl/tests/unit/unit1600.c create mode 100644 deps/curl/tests/unit/unit1601.c create mode 100644 deps/curl/tests/unit/unit1602.c create mode 100644 deps/curl/tests/unit/unit1603.c create mode 100644 deps/curl/tests/unit/unit1604.c create mode 100644 deps/curl/tests/unit/unit1605.c create mode 100644 deps/curl/tests/unit/unit1606.c create mode 100644 deps/curl/tests/unit/unit1607.c create mode 100644 deps/curl/tests/unit/unit1608.c create mode 100644 deps/curl/tests/unit/unit1609.c create mode 100644 deps/curl/tests/unit/unit1610.c create mode 100644 deps/curl/tests/unit/unit1611.c create mode 100644 deps/curl/tests/unit/unit1612.c create mode 100644 deps/curl/tests/unit/unit1614.c create mode 100644 deps/curl/tests/unit/unit1620.c create mode 100644 deps/curl/tests/unit/unit1621.c create mode 100644 deps/curl/tests/unit/unit1650.c create mode 100644 deps/curl/tests/unit/unit1651.c create mode 100644 deps/curl/tests/unit/unit1652.c create mode 100644 deps/curl/tests/unit/unit1653.c create mode 100644 deps/curl/tests/unit/unit1654.c create mode 100644 deps/curl/tests/unit/unit1655.c create mode 100644 deps/curl/tests/unit/unit1660.c create mode 100644 deps/curl/tests/unit/unit1661.c create mode 100644 deps/curl/tests/unit/unit2600.c create mode 100644 deps/curl/tests/unit/unit2601.c create mode 100644 deps/curl/tests/unit/unit2602.c create mode 100644 deps/curl/tests/unit/unit2603.c create mode 100644 deps/curl/tests/unit/unit3200.c create mode 100644 deps/curl/tests/util.py create mode 100644 deps/curl/tests/valgrind.pm create mode 100644 deps/curl/tests/valgrind.supp create mode 100644 deps/curl/tests/version-scan.pl create mode 100644 deps/curl/winbuild/.gitignore create mode 100644 deps/curl/winbuild/Makefile.vc create mode 100644 deps/curl/winbuild/MakefileBuild.vc create mode 100644 deps/curl/winbuild/README.md create mode 100644 deps/curl/winbuild/gen_resp_file.bat create mode 100644 deps/curl/winbuild/makedebug.cmd delete mode 160000 deps/libtomcrypt create mode 100644 deps/libtomcrypt/.ci/build.sh create mode 100644 deps/libtomcrypt/.ci/check_source.sh create mode 100644 deps/libtomcrypt/.ci/clang-tidy.sh create mode 100644 deps/libtomcrypt/.ci/coverage.sh create mode 100644 deps/libtomcrypt/.ci/coverage_more.sh create mode 100644 deps/libtomcrypt/.ci/meta_builds.sh create mode 100644 deps/libtomcrypt/.ci/printinfo.sh create mode 100644 deps/libtomcrypt/.ci/run.sh create mode 100644 deps/libtomcrypt/.ci/testbuild.sh create mode 100644 deps/libtomcrypt/.ci/valgrind.sh create mode 100644 deps/libtomcrypt/.clang-format create mode 100644 deps/libtomcrypt/.gitattributes create mode 100644 deps/libtomcrypt/.github/ISSUE_TEMPLATE.md create mode 100644 deps/libtomcrypt/.github/PULL_REQUEST_TEMPLATE.md create mode 100644 deps/libtomcrypt/.github/workflows/main.yml create mode 100644 deps/libtomcrypt/.gitignore create mode 100644 deps/libtomcrypt/CMakeLists.txt create mode 100644 deps/libtomcrypt/LICENSE create mode 100644 deps/libtomcrypt/README.md create mode 100644 deps/libtomcrypt/appveyor.yml create mode 100644 deps/libtomcrypt/changes create mode 100644 deps/libtomcrypt/coverity.sh create mode 100644 deps/libtomcrypt/demos/CMakeLists.txt create mode 100644 deps/libtomcrypt/demos/aesgcm.c create mode 100644 deps/libtomcrypt/demos/constants.c create mode 100644 deps/libtomcrypt/demos/demo_dynamic.py create mode 100644 deps/libtomcrypt/demos/gcm-file/gcm_file.c create mode 100644 deps/libtomcrypt/demos/gcm-file/gcm_filehandle.c create mode 100644 deps/libtomcrypt/demos/hashsum.c create mode 100644 deps/libtomcrypt/demos/ltcrypt.c create mode 100644 deps/libtomcrypt/demos/openssl-enc.c create mode 100644 deps/libtomcrypt/demos/sizes.c create mode 100644 deps/libtomcrypt/demos/small.c create mode 100644 deps/libtomcrypt/demos/timing.c create mode 100644 deps/libtomcrypt/demos/tv_gen.c create mode 100644 deps/libtomcrypt/doc/Doxyfile create mode 100644 deps/libtomcrypt/doc/crypt.tex create mode 100644 deps/libtomcrypt/doc/libtomsm.png create mode 100644 deps/libtomcrypt/doc/makefile create mode 100644 deps/libtomcrypt/helper.pl create mode 100644 deps/libtomcrypt/hooks/pre-commit create mode 100644 deps/libtomcrypt/libtomcrypt.pc.in create mode 100644 deps/libtomcrypt/libtomcrypt_VS2008.sln create mode 100644 deps/libtomcrypt/libtomcrypt_VS2008.vcproj create mode 100644 deps/libtomcrypt/makefile create mode 100644 deps/libtomcrypt/makefile.mingw create mode 100644 deps/libtomcrypt/makefile.msvc create mode 100644 deps/libtomcrypt/makefile.shared create mode 100644 deps/libtomcrypt/makefile.unix create mode 100644 deps/libtomcrypt/makefile_include.mk create mode 100644 deps/libtomcrypt/notes/etc/NoekeonVects.java create mode 100644 deps/libtomcrypt/notes/etc/saferp_optimizer.c create mode 100644 deps/libtomcrypt/notes/etc/whirlgen.c create mode 100644 deps/libtomcrypt/notes/etc/whirltest.c create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/makefile create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/oaep-int.txt create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/oaep-vect.c create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/oaep-vect.txt create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/pkcs1v15crypt-vectors.c create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/pkcs1v15crypt-vectors.txt create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/pkcs1v15sign-vectors.c create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/pkcs1v15sign-vectors.txt create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/pss-int.txt create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/pss-vect.c create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/pss-vect.txt create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/readme.txt create mode 100644 deps/libtomcrypt/notes/rsa-testvectors/rt.py create mode 100644 deps/libtomcrypt/notes/tech0001.txt create mode 100644 deps/libtomcrypt/notes/tech0002.txt create mode 100644 deps/libtomcrypt/notes/tech0003.txt create mode 100644 deps/libtomcrypt/notes/tech0004.txt create mode 100644 deps/libtomcrypt/notes/tech0005.txt create mode 100644 deps/libtomcrypt/notes/tech0006.txt create mode 100644 deps/libtomcrypt/notes/tech0007.txt create mode 100644 deps/libtomcrypt/sources.cmake create mode 100644 deps/libtomcrypt/src/ciphers/aes/aes.c create mode 100644 deps/libtomcrypt/src/ciphers/aes/aes_desc.c create mode 100644 deps/libtomcrypt/src/ciphers/aes/aes_tab.c create mode 100644 deps/libtomcrypt/src/ciphers/aes/aesni.c create mode 100644 deps/libtomcrypt/src/ciphers/anubis.c create mode 100644 deps/libtomcrypt/src/ciphers/blowfish.c create mode 100644 deps/libtomcrypt/src/ciphers/camellia.c create mode 100644 deps/libtomcrypt/src/ciphers/cast5.c create mode 100644 deps/libtomcrypt/src/ciphers/des.c create mode 100644 deps/libtomcrypt/src/ciphers/idea.c create mode 100644 deps/libtomcrypt/src/ciphers/kasumi.c create mode 100644 deps/libtomcrypt/src/ciphers/khazad.c create mode 100644 deps/libtomcrypt/src/ciphers/kseed.c create mode 100644 deps/libtomcrypt/src/ciphers/multi2.c create mode 100644 deps/libtomcrypt/src/ciphers/noekeon.c create mode 100644 deps/libtomcrypt/src/ciphers/rc2.c create mode 100644 deps/libtomcrypt/src/ciphers/rc5.c create mode 100644 deps/libtomcrypt/src/ciphers/rc6.c create mode 100644 deps/libtomcrypt/src/ciphers/safer/safer.c create mode 100644 deps/libtomcrypt/src/ciphers/safer/safer_tab.c create mode 100644 deps/libtomcrypt/src/ciphers/safer/saferp.c create mode 100644 deps/libtomcrypt/src/ciphers/serpent.c create mode 100644 deps/libtomcrypt/src/ciphers/skipjack.c create mode 100644 deps/libtomcrypt/src/ciphers/tea.c create mode 100644 deps/libtomcrypt/src/ciphers/twofish/twofish.c create mode 100644 deps/libtomcrypt/src/ciphers/twofish/twofish_tab.c create mode 100644 deps/libtomcrypt/src/ciphers/xtea.c create mode 100644 deps/libtomcrypt/src/encauth/ccm/ccm_add_aad.c create mode 100644 deps/libtomcrypt/src/encauth/ccm/ccm_add_nonce.c create mode 100644 deps/libtomcrypt/src/encauth/ccm/ccm_done.c create mode 100644 deps/libtomcrypt/src/encauth/ccm/ccm_init.c create mode 100644 deps/libtomcrypt/src/encauth/ccm/ccm_memory.c create mode 100644 deps/libtomcrypt/src/encauth/ccm/ccm_process.c create mode 100644 deps/libtomcrypt/src/encauth/ccm/ccm_reset.c create mode 100644 deps/libtomcrypt/src/encauth/ccm/ccm_test.c create mode 100644 deps/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_add_aad.c create mode 100644 deps/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_decrypt.c create mode 100644 deps/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_done.c create mode 100644 deps/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_encrypt.c create mode 100644 deps/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_init.c create mode 100644 deps/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_memory.c create mode 100644 deps/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_setiv.c create mode 100644 deps/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_setiv_rfc7905.c create mode 100644 deps/libtomcrypt/src/encauth/chachapoly/chacha20poly1305_test.c create mode 100644 deps/libtomcrypt/src/encauth/eax/eax_addheader.c create mode 100644 deps/libtomcrypt/src/encauth/eax/eax_decrypt.c create mode 100644 deps/libtomcrypt/src/encauth/eax/eax_decrypt_verify_memory.c create mode 100644 deps/libtomcrypt/src/encauth/eax/eax_done.c create mode 100644 deps/libtomcrypt/src/encauth/eax/eax_encrypt.c create mode 100644 deps/libtomcrypt/src/encauth/eax/eax_encrypt_authenticate_memory.c create mode 100644 deps/libtomcrypt/src/encauth/eax/eax_init.c create mode 100644 deps/libtomcrypt/src/encauth/eax/eax_test.c create mode 100644 deps/libtomcrypt/src/encauth/gcm/gcm_add_aad.c create mode 100644 deps/libtomcrypt/src/encauth/gcm/gcm_add_iv.c create mode 100644 deps/libtomcrypt/src/encauth/gcm/gcm_done.c create mode 100644 deps/libtomcrypt/src/encauth/gcm/gcm_gf_mult.c create mode 100644 deps/libtomcrypt/src/encauth/gcm/gcm_init.c create mode 100644 deps/libtomcrypt/src/encauth/gcm/gcm_memory.c create mode 100644 deps/libtomcrypt/src/encauth/gcm/gcm_mult_h.c create mode 100644 deps/libtomcrypt/src/encauth/gcm/gcm_process.c create mode 100644 deps/libtomcrypt/src/encauth/gcm/gcm_reset.c create mode 100644 deps/libtomcrypt/src/encauth/gcm/gcm_test.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/ocb_decrypt.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/ocb_decrypt_verify_memory.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/ocb_done_decrypt.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/ocb_done_encrypt.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/ocb_encrypt.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/ocb_encrypt_authenticate_memory.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/ocb_init.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/ocb_ntz.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/ocb_shift_xor.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/ocb_test.c create mode 100644 deps/libtomcrypt/src/encauth/ocb/s_ocb_done.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_add_aad.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_decrypt.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_decrypt_last.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_decrypt_verify_memory.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_done.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_encrypt.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_encrypt_authenticate_memory.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_encrypt_last.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_init.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_int_ntz.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_int_xor_blocks.c create mode 100644 deps/libtomcrypt/src/encauth/ocb3/ocb3_test.c create mode 100644 deps/libtomcrypt/src/hashes/blake2b.c create mode 100644 deps/libtomcrypt/src/hashes/blake2s.c create mode 100644 deps/libtomcrypt/src/hashes/chc/chc.c create mode 100644 deps/libtomcrypt/src/hashes/helper/hash_file.c create mode 100644 deps/libtomcrypt/src/hashes/helper/hash_filehandle.c create mode 100644 deps/libtomcrypt/src/hashes/helper/hash_memory.c create mode 100644 deps/libtomcrypt/src/hashes/helper/hash_memory_multi.c create mode 100644 deps/libtomcrypt/src/hashes/md2.c create mode 100644 deps/libtomcrypt/src/hashes/md4.c create mode 100644 deps/libtomcrypt/src/hashes/md5.c create mode 100644 deps/libtomcrypt/src/hashes/rmd128.c create mode 100644 deps/libtomcrypt/src/hashes/rmd160.c create mode 100644 deps/libtomcrypt/src/hashes/rmd256.c create mode 100644 deps/libtomcrypt/src/hashes/rmd320.c create mode 100644 deps/libtomcrypt/src/hashes/sha1.c create mode 100644 deps/libtomcrypt/src/hashes/sha2/sha224.c create mode 100644 deps/libtomcrypt/src/hashes/sha2/sha256.c create mode 100644 deps/libtomcrypt/src/hashes/sha2/sha384.c create mode 100644 deps/libtomcrypt/src/hashes/sha2/sha512.c create mode 100644 deps/libtomcrypt/src/hashes/sha2/sha512_224.c create mode 100644 deps/libtomcrypt/src/hashes/sha2/sha512_256.c create mode 100644 deps/libtomcrypt/src/hashes/sha3.c create mode 100644 deps/libtomcrypt/src/hashes/sha3_test.c create mode 100644 deps/libtomcrypt/src/hashes/tiger.c create mode 100644 deps/libtomcrypt/src/hashes/whirl/whirl.c create mode 100644 deps/libtomcrypt/src/hashes/whirl/whirltab.c create mode 100644 deps/libtomcrypt/src/headers/tomcrypt.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_argchk.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_cfg.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_cipher.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_custom.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_hash.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_mac.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_macros.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_math.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_misc.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_pk.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_pkcs.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_private.h create mode 100644 deps/libtomcrypt/src/headers/tomcrypt_prng.h create mode 100644 deps/libtomcrypt/src/mac/blake2/blake2bmac.c create mode 100644 deps/libtomcrypt/src/mac/blake2/blake2bmac_file.c create mode 100644 deps/libtomcrypt/src/mac/blake2/blake2bmac_memory.c create mode 100644 deps/libtomcrypt/src/mac/blake2/blake2bmac_memory_multi.c create mode 100644 deps/libtomcrypt/src/mac/blake2/blake2bmac_test.c create mode 100644 deps/libtomcrypt/src/mac/blake2/blake2smac.c create mode 100644 deps/libtomcrypt/src/mac/blake2/blake2smac_file.c create mode 100644 deps/libtomcrypt/src/mac/blake2/blake2smac_memory.c create mode 100644 deps/libtomcrypt/src/mac/blake2/blake2smac_memory_multi.c create mode 100644 deps/libtomcrypt/src/mac/blake2/blake2smac_test.c create mode 100644 deps/libtomcrypt/src/mac/f9/f9_done.c create mode 100644 deps/libtomcrypt/src/mac/f9/f9_file.c create mode 100644 deps/libtomcrypt/src/mac/f9/f9_init.c create mode 100644 deps/libtomcrypt/src/mac/f9/f9_memory.c create mode 100644 deps/libtomcrypt/src/mac/f9/f9_memory_multi.c create mode 100644 deps/libtomcrypt/src/mac/f9/f9_process.c create mode 100644 deps/libtomcrypt/src/mac/f9/f9_test.c create mode 100644 deps/libtomcrypt/src/mac/hmac/hmac_done.c create mode 100644 deps/libtomcrypt/src/mac/hmac/hmac_file.c create mode 100644 deps/libtomcrypt/src/mac/hmac/hmac_init.c create mode 100644 deps/libtomcrypt/src/mac/hmac/hmac_memory.c create mode 100644 deps/libtomcrypt/src/mac/hmac/hmac_memory_multi.c create mode 100644 deps/libtomcrypt/src/mac/hmac/hmac_process.c create mode 100644 deps/libtomcrypt/src/mac/hmac/hmac_test.c create mode 100644 deps/libtomcrypt/src/mac/omac/omac_done.c create mode 100644 deps/libtomcrypt/src/mac/omac/omac_file.c create mode 100644 deps/libtomcrypt/src/mac/omac/omac_init.c create mode 100644 deps/libtomcrypt/src/mac/omac/omac_memory.c create mode 100644 deps/libtomcrypt/src/mac/omac/omac_memory_multi.c create mode 100644 deps/libtomcrypt/src/mac/omac/omac_process.c create mode 100644 deps/libtomcrypt/src/mac/omac/omac_test.c create mode 100644 deps/libtomcrypt/src/mac/pelican/pelican.c create mode 100644 deps/libtomcrypt/src/mac/pelican/pelican_memory.c create mode 100644 deps/libtomcrypt/src/mac/pelican/pelican_test.c create mode 100644 deps/libtomcrypt/src/mac/pmac/pmac_done.c create mode 100644 deps/libtomcrypt/src/mac/pmac/pmac_file.c create mode 100644 deps/libtomcrypt/src/mac/pmac/pmac_init.c create mode 100644 deps/libtomcrypt/src/mac/pmac/pmac_memory.c create mode 100644 deps/libtomcrypt/src/mac/pmac/pmac_memory_multi.c create mode 100644 deps/libtomcrypt/src/mac/pmac/pmac_ntz.c create mode 100644 deps/libtomcrypt/src/mac/pmac/pmac_process.c create mode 100644 deps/libtomcrypt/src/mac/pmac/pmac_shift_xor.c create mode 100644 deps/libtomcrypt/src/mac/pmac/pmac_test.c create mode 100644 deps/libtomcrypt/src/mac/poly1305/poly1305.c create mode 100644 deps/libtomcrypt/src/mac/poly1305/poly1305_file.c create mode 100644 deps/libtomcrypt/src/mac/poly1305/poly1305_memory.c create mode 100644 deps/libtomcrypt/src/mac/poly1305/poly1305_memory_multi.c create mode 100644 deps/libtomcrypt/src/mac/poly1305/poly1305_test.c create mode 100644 deps/libtomcrypt/src/mac/xcbc/xcbc_done.c create mode 100644 deps/libtomcrypt/src/mac/xcbc/xcbc_file.c create mode 100644 deps/libtomcrypt/src/mac/xcbc/xcbc_init.c create mode 100644 deps/libtomcrypt/src/mac/xcbc/xcbc_memory.c create mode 100644 deps/libtomcrypt/src/mac/xcbc/xcbc_memory_multi.c create mode 100644 deps/libtomcrypt/src/mac/xcbc/xcbc_process.c create mode 100644 deps/libtomcrypt/src/mac/xcbc/xcbc_test.c create mode 100644 deps/libtomcrypt/src/math/fp/ltc_ecc_fp_mulmod.c create mode 100644 deps/libtomcrypt/src/math/gmp_desc.c create mode 100644 deps/libtomcrypt/src/math/ltm_desc.c create mode 100644 deps/libtomcrypt/src/math/multi.c create mode 100644 deps/libtomcrypt/src/math/radix_to_bin.c create mode 100644 deps/libtomcrypt/src/math/rand_bn.c create mode 100644 deps/libtomcrypt/src/math/rand_prime.c create mode 100644 deps/libtomcrypt/src/math/tfm_desc.c create mode 100644 deps/libtomcrypt/src/misc/adler32.c create mode 100644 deps/libtomcrypt/src/misc/base16/base16_decode.c create mode 100644 deps/libtomcrypt/src/misc/base16/base16_encode.c create mode 100644 deps/libtomcrypt/src/misc/base32/base32_decode.c create mode 100644 deps/libtomcrypt/src/misc/base32/base32_encode.c create mode 100644 deps/libtomcrypt/src/misc/base64/base64_decode.c create mode 100644 deps/libtomcrypt/src/misc/base64/base64_encode.c create mode 100644 deps/libtomcrypt/src/misc/bcrypt/bcrypt.c create mode 100644 deps/libtomcrypt/src/misc/burn_stack.c create mode 100644 deps/libtomcrypt/src/misc/compare_testvector.c create mode 100644 deps/libtomcrypt/src/misc/copy_or_zeromem.c create mode 100644 deps/libtomcrypt/src/misc/crc32.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_argchk.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_cipher_descriptor.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_cipher_is_valid.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_constants.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_find_cipher.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_find_cipher_any.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_find_cipher_id.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_find_hash.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_find_hash_any.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_find_hash_id.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_find_hash_oid.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_find_prng.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_fsa.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_hash_descriptor.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_hash_is_valid.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_inits.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_ltc_mp_descriptor.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_prng_descriptor.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_prng_is_valid.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_prng_rng_descriptor.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_register_all_ciphers.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_register_all_hashes.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_register_all_prngs.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_register_cipher.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_register_hash.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_register_prng.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_sizes.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_unregister_cipher.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_unregister_hash.c create mode 100644 deps/libtomcrypt/src/misc/crypt/crypt_unregister_prng.c create mode 100644 deps/libtomcrypt/src/misc/error_to_string.c create mode 100644 deps/libtomcrypt/src/misc/hkdf/hkdf.c create mode 100644 deps/libtomcrypt/src/misc/hkdf/hkdf_test.c create mode 100644 deps/libtomcrypt/src/misc/mem_neq.c create mode 100644 deps/libtomcrypt/src/misc/padding/padding_depad.c create mode 100644 deps/libtomcrypt/src/misc/padding/padding_pad.c create mode 100644 deps/libtomcrypt/src/misc/pbes/pbes.c create mode 100644 deps/libtomcrypt/src/misc/pbes/pbes1.c create mode 100644 deps/libtomcrypt/src/misc/pbes/pbes2.c create mode 100644 deps/libtomcrypt/src/misc/pkcs12/pkcs12_kdf.c create mode 100644 deps/libtomcrypt/src/misc/pkcs12/pkcs12_utf8_to_utf16.c create mode 100644 deps/libtomcrypt/src/misc/pkcs5/pkcs_5_1.c create mode 100644 deps/libtomcrypt/src/misc/pkcs5/pkcs_5_2.c create mode 100644 deps/libtomcrypt/src/misc/pkcs5/pkcs_5_test.c create mode 100644 deps/libtomcrypt/src/misc/ssh/ssh_decode_sequence_multi.c create mode 100644 deps/libtomcrypt/src/misc/ssh/ssh_encode_sequence_multi.c create mode 100644 deps/libtomcrypt/src/misc/zeromem.c create mode 100644 deps/libtomcrypt/src/modes/cbc/cbc_decrypt.c create mode 100644 deps/libtomcrypt/src/modes/cbc/cbc_done.c create mode 100644 deps/libtomcrypt/src/modes/cbc/cbc_encrypt.c create mode 100644 deps/libtomcrypt/src/modes/cbc/cbc_getiv.c create mode 100644 deps/libtomcrypt/src/modes/cbc/cbc_setiv.c create mode 100644 deps/libtomcrypt/src/modes/cbc/cbc_start.c create mode 100644 deps/libtomcrypt/src/modes/cfb/cfb_decrypt.c create mode 100644 deps/libtomcrypt/src/modes/cfb/cfb_done.c create mode 100644 deps/libtomcrypt/src/modes/cfb/cfb_encrypt.c create mode 100644 deps/libtomcrypt/src/modes/cfb/cfb_getiv.c create mode 100644 deps/libtomcrypt/src/modes/cfb/cfb_setiv.c create mode 100644 deps/libtomcrypt/src/modes/cfb/cfb_start.c create mode 100644 deps/libtomcrypt/src/modes/ctr/ctr_decrypt.c create mode 100644 deps/libtomcrypt/src/modes/ctr/ctr_done.c create mode 100644 deps/libtomcrypt/src/modes/ctr/ctr_encrypt.c create mode 100644 deps/libtomcrypt/src/modes/ctr/ctr_getiv.c create mode 100644 deps/libtomcrypt/src/modes/ctr/ctr_setiv.c create mode 100644 deps/libtomcrypt/src/modes/ctr/ctr_start.c create mode 100644 deps/libtomcrypt/src/modes/ctr/ctr_test.c create mode 100644 deps/libtomcrypt/src/modes/ecb/ecb_decrypt.c create mode 100644 deps/libtomcrypt/src/modes/ecb/ecb_done.c create mode 100644 deps/libtomcrypt/src/modes/ecb/ecb_encrypt.c create mode 100644 deps/libtomcrypt/src/modes/ecb/ecb_start.c create mode 100644 deps/libtomcrypt/src/modes/f8/f8_decrypt.c create mode 100644 deps/libtomcrypt/src/modes/f8/f8_done.c create mode 100644 deps/libtomcrypt/src/modes/f8/f8_encrypt.c create mode 100644 deps/libtomcrypt/src/modes/f8/f8_getiv.c create mode 100644 deps/libtomcrypt/src/modes/f8/f8_setiv.c create mode 100644 deps/libtomcrypt/src/modes/f8/f8_start.c create mode 100644 deps/libtomcrypt/src/modes/f8/f8_test_mode.c create mode 100644 deps/libtomcrypt/src/modes/lrw/lrw_decrypt.c create mode 100644 deps/libtomcrypt/src/modes/lrw/lrw_done.c create mode 100644 deps/libtomcrypt/src/modes/lrw/lrw_encrypt.c create mode 100644 deps/libtomcrypt/src/modes/lrw/lrw_getiv.c create mode 100644 deps/libtomcrypt/src/modes/lrw/lrw_process.c create mode 100644 deps/libtomcrypt/src/modes/lrw/lrw_setiv.c create mode 100644 deps/libtomcrypt/src/modes/lrw/lrw_start.c create mode 100644 deps/libtomcrypt/src/modes/lrw/lrw_test.c create mode 100644 deps/libtomcrypt/src/modes/ofb/ofb_decrypt.c create mode 100644 deps/libtomcrypt/src/modes/ofb/ofb_done.c create mode 100644 deps/libtomcrypt/src/modes/ofb/ofb_encrypt.c create mode 100644 deps/libtomcrypt/src/modes/ofb/ofb_getiv.c create mode 100644 deps/libtomcrypt/src/modes/ofb/ofb_setiv.c create mode 100644 deps/libtomcrypt/src/modes/ofb/ofb_start.c create mode 100644 deps/libtomcrypt/src/modes/xts/xts_decrypt.c create mode 100644 deps/libtomcrypt/src/modes/xts/xts_done.c create mode 100644 deps/libtomcrypt/src/modes/xts/xts_encrypt.c create mode 100644 deps/libtomcrypt/src/modes/xts/xts_init.c create mode 100644 deps/libtomcrypt/src/modes/xts/xts_mult_x.c create mode 100644 deps/libtomcrypt/src/modes/xts/xts_test.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/bit/der_decode_bit_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/bit/der_decode_raw_bit_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/bit/der_encode_bit_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/bit/der_encode_raw_bit_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/bit/der_length_bit_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/boolean/der_decode_boolean.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/boolean/der_encode_boolean.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/boolean/der_length_boolean.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/choice/der_decode_choice.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/custom_type/der_decode_custom_type.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/custom_type/der_encode_custom_type.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/custom_type/der_length_custom_type.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/general/der_asn1_maps.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/general/der_decode_asn1_identifier.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/general/der_decode_asn1_length.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/general/der_encode_asn1_identifier.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/general/der_encode_asn1_length.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/general/der_length_asn1_identifier.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/general/der_length_asn1_length.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/generalizedtime/der_decode_generalizedtime.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/generalizedtime/der_encode_generalizedtime.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/generalizedtime/der_length_generalizedtime.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/ia5/der_decode_ia5_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/ia5/der_encode_ia5_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/ia5/der_length_ia5_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/integer/der_decode_integer.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/integer/der_encode_integer.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/integer/der_length_integer.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/object_identifier/der_decode_object_identifier.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/object_identifier/der_encode_object_identifier.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/object_identifier/der_length_object_identifier.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/octet/der_decode_octet_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/octet/der_encode_octet_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/octet/der_length_octet_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/printable_string/der_decode_printable_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/printable_string/der_encode_printable_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/printable_string/der_length_printable_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_ex.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_flexi.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/sequence/der_decode_sequence_multi.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/sequence/der_encode_sequence_ex.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/sequence/der_encode_sequence_multi.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/sequence/der_length_sequence.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/sequence/der_sequence_free.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/sequence/der_sequence_shrink.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/set/der_encode_set.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/set/der_encode_setof.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/short_integer/der_decode_short_integer.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/short_integer/der_encode_short_integer.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/short_integer/der_length_short_integer.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/teletex_string/der_decode_teletex_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/teletex_string/der_length_teletex_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/utctime/der_decode_utctime.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/utctime/der_encode_utctime.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/utctime/der_length_utctime.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/utf8/der_decode_utf8_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/utf8/der_encode_utf8_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/der/utf8/der_length_utf8_string.c create mode 100644 deps/libtomcrypt/src/pk/asn1/oid/pk_get_oid.c create mode 100644 deps/libtomcrypt/src/pk/asn1/oid/pk_oid_cmp.c create mode 100644 deps/libtomcrypt/src/pk/asn1/oid/pk_oid_str.c create mode 100644 deps/libtomcrypt/src/pk/asn1/pkcs8/pkcs8_decode_flexi.c create mode 100644 deps/libtomcrypt/src/pk/asn1/x509/x509_decode_public_key_from_certificate.c create mode 100644 deps/libtomcrypt/src/pk/asn1/x509/x509_decode_subject_public_key_info.c create mode 100644 deps/libtomcrypt/src/pk/asn1/x509/x509_encode_subject_public_key_info.c create mode 100644 deps/libtomcrypt/src/pk/dh/dh.c create mode 100644 deps/libtomcrypt/src/pk/dh/dh_check_pubkey.c create mode 100644 deps/libtomcrypt/src/pk/dh/dh_export.c create mode 100644 deps/libtomcrypt/src/pk/dh/dh_export_key.c create mode 100644 deps/libtomcrypt/src/pk/dh/dh_free.c create mode 100644 deps/libtomcrypt/src/pk/dh/dh_generate_key.c create mode 100644 deps/libtomcrypt/src/pk/dh/dh_import.c create mode 100644 deps/libtomcrypt/src/pk/dh/dh_set.c create mode 100644 deps/libtomcrypt/src/pk/dh/dh_set_pg_dhparam.c create mode 100644 deps/libtomcrypt/src/pk/dh/dh_shared_secret.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_decrypt_key.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_encrypt_key.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_export.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_free.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_generate_key.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_generate_pqg.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_import.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_make_key.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_set.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_set_pqg_dsaparam.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_shared_secret.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_sign_hash.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_verify_hash.c create mode 100644 deps/libtomcrypt/src/pk/dsa/dsa_verify_key.c create mode 100644 deps/libtomcrypt/src/pk/ec25519/ec25519_crypto_ctx.c create mode 100644 deps/libtomcrypt/src/pk/ec25519/ec25519_export.c create mode 100644 deps/libtomcrypt/src/pk/ec25519/ec25519_import_pkcs8.c create mode 100644 deps/libtomcrypt/src/pk/ec25519/tweetnacl.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_ansi_x963_export.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_ansi_x963_import.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_decrypt_key.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_encrypt_key.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_export.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_export_openssl.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_find_curve.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_free.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_get_key.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_get_oid_str.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_get_size.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_import.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_import_openssl.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_import_pkcs8.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_import_x509.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_make_key.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_recover_key.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_set_curve.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_set_curve_internal.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_set_key.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_shared_secret.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_sign_hash.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_sizes.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_ssh_ecdsa_encode_name.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ecc_verify_hash.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_export_point.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_import_point.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_is_point.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_is_point_at_infinity.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_map.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_mul2add.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_mulmod_timing.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_points.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_projective_add_point.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_projective_dbl_point.c create mode 100644 deps/libtomcrypt/src/pk/ecc/ltc_ecc_verify_key.c create mode 100644 deps/libtomcrypt/src/pk/ed25519/ed25519_export.c create mode 100644 deps/libtomcrypt/src/pk/ed25519/ed25519_import.c create mode 100644 deps/libtomcrypt/src/pk/ed25519/ed25519_import_pkcs8.c create mode 100644 deps/libtomcrypt/src/pk/ed25519/ed25519_import_raw.c create mode 100644 deps/libtomcrypt/src/pk/ed25519/ed25519_import_x509.c create mode 100644 deps/libtomcrypt/src/pk/ed25519/ed25519_make_key.c create mode 100644 deps/libtomcrypt/src/pk/ed25519/ed25519_sign.c create mode 100644 deps/libtomcrypt/src/pk/ed25519/ed25519_verify.c create mode 100644 deps/libtomcrypt/src/pk/pkcs1/pkcs_1_i2osp.c create mode 100644 deps/libtomcrypt/src/pk/pkcs1/pkcs_1_mgf1.c create mode 100644 deps/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_decode.c create mode 100644 deps/libtomcrypt/src/pk/pkcs1/pkcs_1_oaep_encode.c create mode 100644 deps/libtomcrypt/src/pk/pkcs1/pkcs_1_os2ip.c create mode 100644 deps/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_decode.c create mode 100644 deps/libtomcrypt/src/pk/pkcs1/pkcs_1_pss_encode.c create mode 100644 deps/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_decode.c create mode 100644 deps/libtomcrypt/src/pk/pkcs1/pkcs_1_v1_5_encode.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_decrypt_key.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_encrypt_key.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_export.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_exptmod.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_get_size.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_import.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_import_pkcs8.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_import_x509.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_key.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_make_key.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_set.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_sign_hash.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_sign_saltlen_get.c create mode 100644 deps/libtomcrypt/src/pk/rsa/rsa_verify_hash.c create mode 100644 deps/libtomcrypt/src/pk/x25519/x25519_export.c create mode 100644 deps/libtomcrypt/src/pk/x25519/x25519_import.c create mode 100644 deps/libtomcrypt/src/pk/x25519/x25519_import_pkcs8.c create mode 100644 deps/libtomcrypt/src/pk/x25519/x25519_import_raw.c create mode 100644 deps/libtomcrypt/src/pk/x25519/x25519_import_x509.c create mode 100644 deps/libtomcrypt/src/pk/x25519/x25519_make_key.c create mode 100644 deps/libtomcrypt/src/pk/x25519/x25519_shared_secret.c create mode 100644 deps/libtomcrypt/src/prngs/chacha20.c create mode 100644 deps/libtomcrypt/src/prngs/fortuna.c create mode 100644 deps/libtomcrypt/src/prngs/rc4.c create mode 100644 deps/libtomcrypt/src/prngs/rng_get_bytes.c create mode 100644 deps/libtomcrypt/src/prngs/rng_make_prng.c create mode 100644 deps/libtomcrypt/src/prngs/sober128.c create mode 100644 deps/libtomcrypt/src/prngs/sprng.c create mode 100644 deps/libtomcrypt/src/prngs/yarrow.c create mode 100644 deps/libtomcrypt/src/stream/chacha/chacha_crypt.c create mode 100644 deps/libtomcrypt/src/stream/chacha/chacha_done.c create mode 100644 deps/libtomcrypt/src/stream/chacha/chacha_ivctr32.c create mode 100644 deps/libtomcrypt/src/stream/chacha/chacha_ivctr64.c create mode 100644 deps/libtomcrypt/src/stream/chacha/chacha_keystream.c create mode 100644 deps/libtomcrypt/src/stream/chacha/chacha_memory.c create mode 100644 deps/libtomcrypt/src/stream/chacha/chacha_setup.c create mode 100644 deps/libtomcrypt/src/stream/chacha/chacha_test.c create mode 100644 deps/libtomcrypt/src/stream/rabbit/rabbit.c create mode 100644 deps/libtomcrypt/src/stream/rabbit/rabbit_memory.c create mode 100644 deps/libtomcrypt/src/stream/rc4/rc4_stream.c create mode 100644 deps/libtomcrypt/src/stream/rc4/rc4_stream_memory.c create mode 100644 deps/libtomcrypt/src/stream/rc4/rc4_test.c create mode 100644 deps/libtomcrypt/src/stream/salsa20/salsa20_crypt.c create mode 100644 deps/libtomcrypt/src/stream/salsa20/salsa20_done.c create mode 100644 deps/libtomcrypt/src/stream/salsa20/salsa20_ivctr64.c create mode 100644 deps/libtomcrypt/src/stream/salsa20/salsa20_keystream.c create mode 100644 deps/libtomcrypt/src/stream/salsa20/salsa20_memory.c create mode 100644 deps/libtomcrypt/src/stream/salsa20/salsa20_setup.c create mode 100644 deps/libtomcrypt/src/stream/salsa20/salsa20_test.c create mode 100644 deps/libtomcrypt/src/stream/salsa20/xsalsa20_memory.c create mode 100644 deps/libtomcrypt/src/stream/salsa20/xsalsa20_setup.c create mode 100644 deps/libtomcrypt/src/stream/salsa20/xsalsa20_test.c create mode 100644 deps/libtomcrypt/src/stream/sober128/sober128_stream.c create mode 100644 deps/libtomcrypt/src/stream/sober128/sober128_stream_memory.c create mode 100644 deps/libtomcrypt/src/stream/sober128/sober128_test.c create mode 100644 deps/libtomcrypt/src/stream/sober128/sober128tab.c create mode 100644 deps/libtomcrypt/src/stream/sosemanuk/sosemanuk.c create mode 100644 deps/libtomcrypt/src/stream/sosemanuk/sosemanuk_memory.c create mode 100644 deps/libtomcrypt/src/stream/sosemanuk/sosemanuk_test.c create mode 100644 deps/libtomcrypt/testme.sh create mode 100644 deps/libtomcrypt/tests/CMakeLists.txt create mode 100644 deps/libtomcrypt/tests/asn1/0x00.crt create mode 100644 deps/libtomcrypt/tests/asn1/0x80.crt create mode 100644 deps/libtomcrypt/tests/asn1/0xff.crt create mode 100644 deps/libtomcrypt/tests/asn1/illegal_padding1.crt create mode 100644 deps/libtomcrypt/tests/asn1/illegal_padding2.crt create mode 100644 deps/libtomcrypt/tests/asn1/illegal_padding3.crt create mode 100644 deps/libtomcrypt/tests/asn1/oid_overflow_test.der create mode 100644 deps/libtomcrypt/tests/asn1/oid_size_test.der create mode 100644 deps/libtomcrypt/tests/asn1/private.der create mode 100644 deps/libtomcrypt/tests/asn1/root-ca.der create mode 100644 deps/libtomcrypt/tests/asn1/type0x08.crt create mode 100644 deps/libtomcrypt/tests/base16_test.c create mode 100644 deps/libtomcrypt/tests/base32_test.c create mode 100644 deps/libtomcrypt/tests/base64_test.c create mode 100644 deps/libtomcrypt/tests/bcrypt_test.c create mode 100644 deps/libtomcrypt/tests/cipher_hash_test.c create mode 100644 deps/libtomcrypt/tests/common.c create mode 100644 deps/libtomcrypt/tests/common.h create mode 100644 deps/libtomcrypt/tests/der_test.c create mode 100644 deps/libtomcrypt/tests/dh_test.c create mode 100644 deps/libtomcrypt/tests/dsa_test.c create mode 100644 deps/libtomcrypt/tests/ecc_test.c create mode 100644 deps/libtomcrypt/tests/ed25519_test.c create mode 100644 deps/libtomcrypt/tests/file_test.c create mode 100644 deps/libtomcrypt/tests/mac_test.c create mode 100644 deps/libtomcrypt/tests/misc_test.c create mode 100644 deps/libtomcrypt/tests/modes_test.c create mode 100644 deps/libtomcrypt/tests/mpi_test.c create mode 100644 deps/libtomcrypt/tests/multi_test.c create mode 100644 deps/libtomcrypt/tests/no_null_termination_check_test.c create mode 100644 deps/libtomcrypt/tests/no_prng.c create mode 100644 deps/libtomcrypt/tests/padding_test.c create mode 100644 deps/libtomcrypt/tests/pkcs_1_eme_test.c create mode 100644 deps/libtomcrypt/tests/pkcs_1_emsa_test.c create mode 100644 deps/libtomcrypt/tests/pkcs_1_oaep_test.c create mode 100644 deps/libtomcrypt/tests/pkcs_1_pss_test.c create mode 100644 deps/libtomcrypt/tests/pkcs_1_test.c create mode 100644 deps/libtomcrypt/tests/prng_test.c create mode 100644 deps/libtomcrypt/tests/rotate_test.c create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/README.txt create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbe_md2_des.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbe_md2_rc2_64.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbe_md5_des.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbe_md5_rc2_64.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbe_sha1_3des.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbe_sha1_des.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbe_sha1_rc2_64.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_des_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_des_ede3_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_rc2_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha224_des_ede3_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha256_des_ede3_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha384_des_ede3_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_224_aes256_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_256_aes256_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_256_rc2_40_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_256_rc2_64_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes128_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes192_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_aes256_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_des_ede3_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_rc2_40_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa-pkcs8/key_pkcs8_pbkdf2_sha512_rc2_64_cbc.der create mode 100644 deps/libtomcrypt/tests/rsa/rsa_size_1024_bits.der create mode 100644 deps/libtomcrypt/tests/rsa/rsa_size_16384_bits.der create mode 100644 deps/libtomcrypt/tests/rsa/rsa_size_1999_bits.der create mode 100644 deps/libtomcrypt/tests/rsa/rsa_size_2048_bits.der create mode 100644 deps/libtomcrypt/tests/rsa/rsa_size_4096_bits.der create mode 100644 deps/libtomcrypt/tests/rsa/rsa_size_512_bits.der create mode 100644 deps/libtomcrypt/tests/rsa/rsa_size_8192_bits.der create mode 100644 deps/libtomcrypt/tests/rsa_test.c create mode 100644 deps/libtomcrypt/tests/sources.cmake create mode 100644 deps/libtomcrypt/tests/ssh_test.c create mode 100644 deps/libtomcrypt/tests/store_test.c create mode 100644 deps/libtomcrypt/tests/test.c create mode 100644 deps/libtomcrypt/tests/test.der create mode 100644 deps/libtomcrypt/tests/test.key create mode 100644 deps/libtomcrypt/tests/test_dsa.key create mode 100644 deps/libtomcrypt/tests/tomcrypt_test.h create mode 100644 deps/libtomcrypt/tests/x25519_test.c create mode 100644 deps/libtomcrypt/updatemakes.sh delete mode 160000 deps/libtommath create mode 100644 deps/libtommath/.gitattributes create mode 100644 deps/libtommath/.github/workflows/deploy.yml create mode 100644 deps/libtommath/.github/workflows/main.yml create mode 100644 deps/libtommath/.gitignore create mode 100644 deps/libtommath/CMakeLists.txt create mode 100644 deps/libtommath/LICENSE create mode 100644 deps/libtommath/Package.swift create mode 100644 deps/libtommath/README.md create mode 100644 deps/libtommath/appveyor.yml create mode 100644 deps/libtommath/astylerc create mode 100644 deps/libtommath/changes.txt create mode 100644 deps/libtommath/demo/CMakeLists.txt create mode 100644 deps/libtommath/demo/mtest_opponent.c create mode 100644 deps/libtommath/demo/s_mp_rand_jenkins.c create mode 100644 deps/libtommath/demo/shared.c create mode 100644 deps/libtommath/demo/shared.h create mode 100644 deps/libtommath/demo/test.c create mode 100644 deps/libtommath/demo/timing.c create mode 100644 deps/libtommath/demo/tommath_tests.swift create mode 100644 deps/libtommath/doc/.latexindent.yaml create mode 100644 deps/libtommath/doc/bn.tex create mode 100644 deps/libtommath/doc/makefile create mode 100644 deps/libtommath/doc/tommath.3 create mode 100644 deps/libtommath/etc/2kprime.1 create mode 100644 deps/libtommath/etc/2kprime.c create mode 100644 deps/libtommath/etc/drprime.c create mode 100644 deps/libtommath/etc/drprimes.28 create mode 100644 deps/libtommath/etc/drprimes.txt create mode 100644 deps/libtommath/etc/makefile create mode 100644 deps/libtommath/etc/makefile.icc create mode 100644 deps/libtommath/etc/makefile.msvc create mode 100644 deps/libtommath/etc/mersenne.c create mode 100644 deps/libtommath/etc/mont.c create mode 100644 deps/libtommath/etc/pprime.c create mode 100644 deps/libtommath/etc/prime.1024 create mode 100644 deps/libtommath/etc/prime.512 create mode 100644 deps/libtommath/etc/timer.asm create mode 100644 deps/libtommath/etc/tune.c create mode 100644 deps/libtommath/etc/tune_it.sh create mode 100644 deps/libtommath/helper.pl create mode 100644 deps/libtommath/libtommath.pc.in create mode 100644 deps/libtommath/libtommath_VS2008.sln create mode 100644 deps/libtommath/libtommath_VS2008.vcproj create mode 100644 deps/libtommath/logs/Makefile create mode 100644 deps/libtommath/logs/README create mode 100644 deps/libtommath/logs/before_after.dem create mode 100644 deps/libtommath/logs/before_after.html create mode 100644 deps/libtommath/logs/graphs.dem create mode 100644 deps/libtommath/logs/index.html create mode 100644 deps/libtommath/makefile create mode 100644 deps/libtommath/makefile.mingw create mode 100644 deps/libtommath/makefile.msvc create mode 100644 deps/libtommath/makefile.shared create mode 100644 deps/libtommath/makefile.unix create mode 100644 deps/libtommath/makefile_include.mk create mode 100644 deps/libtommath/modulemap/module.modulemap create mode 100644 deps/libtommath/mp_2expt.c create mode 100644 deps/libtommath/mp_abs.c create mode 100644 deps/libtommath/mp_add.c create mode 100644 deps/libtommath/mp_add_d.c create mode 100644 deps/libtommath/mp_addmod.c create mode 100644 deps/libtommath/mp_and.c create mode 100644 deps/libtommath/mp_clamp.c create mode 100644 deps/libtommath/mp_clear.c create mode 100644 deps/libtommath/mp_clear_multi.c create mode 100644 deps/libtommath/mp_cmp.c create mode 100644 deps/libtommath/mp_cmp_d.c create mode 100644 deps/libtommath/mp_cmp_mag.c create mode 100644 deps/libtommath/mp_cnt_lsb.c create mode 100644 deps/libtommath/mp_complement.c create mode 100644 deps/libtommath/mp_copy.c create mode 100644 deps/libtommath/mp_count_bits.c create mode 100644 deps/libtommath/mp_cutoffs.c create mode 100644 deps/libtommath/mp_div.c create mode 100644 deps/libtommath/mp_div_2.c create mode 100644 deps/libtommath/mp_div_2d.c create mode 100644 deps/libtommath/mp_div_d.c create mode 100644 deps/libtommath/mp_dr_is_modulus.c create mode 100644 deps/libtommath/mp_dr_reduce.c create mode 100644 deps/libtommath/mp_dr_setup.c create mode 100644 deps/libtommath/mp_error_to_string.c create mode 100644 deps/libtommath/mp_exch.c create mode 100644 deps/libtommath/mp_expt_n.c create mode 100644 deps/libtommath/mp_exptmod.c create mode 100644 deps/libtommath/mp_exteuclid.c create mode 100644 deps/libtommath/mp_fread.c create mode 100644 deps/libtommath/mp_from_sbin.c create mode 100644 deps/libtommath/mp_from_ubin.c create mode 100644 deps/libtommath/mp_fwrite.c create mode 100644 deps/libtommath/mp_gcd.c create mode 100644 deps/libtommath/mp_get_double.c create mode 100644 deps/libtommath/mp_get_i32.c create mode 100644 deps/libtommath/mp_get_i64.c create mode 100644 deps/libtommath/mp_get_l.c create mode 100644 deps/libtommath/mp_get_mag_u32.c create mode 100644 deps/libtommath/mp_get_mag_u64.c create mode 100644 deps/libtommath/mp_get_mag_ul.c create mode 100644 deps/libtommath/mp_grow.c create mode 100644 deps/libtommath/mp_hash.c create mode 100644 deps/libtommath/mp_init.c create mode 100644 deps/libtommath/mp_init_copy.c create mode 100644 deps/libtommath/mp_init_i32.c create mode 100644 deps/libtommath/mp_init_i64.c create mode 100644 deps/libtommath/mp_init_l.c create mode 100644 deps/libtommath/mp_init_multi.c create mode 100644 deps/libtommath/mp_init_set.c create mode 100644 deps/libtommath/mp_init_size.c create mode 100644 deps/libtommath/mp_init_u32.c create mode 100644 deps/libtommath/mp_init_u64.c create mode 100644 deps/libtommath/mp_init_ul.c create mode 100644 deps/libtommath/mp_invmod.c create mode 100644 deps/libtommath/mp_is_square.c create mode 100644 deps/libtommath/mp_kronecker.c create mode 100644 deps/libtommath/mp_lcm.c create mode 100644 deps/libtommath/mp_log.c create mode 100644 deps/libtommath/mp_log_n.c create mode 100644 deps/libtommath/mp_lshd.c create mode 100644 deps/libtommath/mp_mod.c create mode 100644 deps/libtommath/mp_mod_2d.c create mode 100644 deps/libtommath/mp_montgomery_calc_normalization.c create mode 100644 deps/libtommath/mp_montgomery_reduce.c create mode 100644 deps/libtommath/mp_montgomery_setup.c create mode 100644 deps/libtommath/mp_mul.c create mode 100644 deps/libtommath/mp_mul_2.c create mode 100644 deps/libtommath/mp_mul_2d.c create mode 100644 deps/libtommath/mp_mul_d.c create mode 100644 deps/libtommath/mp_mulmod.c create mode 100644 deps/libtommath/mp_neg.c create mode 100644 deps/libtommath/mp_or.c create mode 100644 deps/libtommath/mp_pack.c create mode 100644 deps/libtommath/mp_pack_count.c create mode 100644 deps/libtommath/mp_prime_fermat.c create mode 100644 deps/libtommath/mp_prime_frobenius_underwood.c create mode 100644 deps/libtommath/mp_prime_is_prime.c create mode 100644 deps/libtommath/mp_prime_miller_rabin.c create mode 100644 deps/libtommath/mp_prime_next_prime.c create mode 100644 deps/libtommath/mp_prime_rabin_miller_trials.c create mode 100644 deps/libtommath/mp_prime_rand.c create mode 100644 deps/libtommath/mp_prime_strong_lucas_selfridge.c create mode 100644 deps/libtommath/mp_radix_size.c create mode 100644 deps/libtommath/mp_radix_size_overestimate.c create mode 100644 deps/libtommath/mp_rand.c create mode 100644 deps/libtommath/mp_rand_source.c create mode 100644 deps/libtommath/mp_read_radix.c create mode 100644 deps/libtommath/mp_reduce.c create mode 100644 deps/libtommath/mp_reduce_2k.c create mode 100644 deps/libtommath/mp_reduce_2k_l.c create mode 100644 deps/libtommath/mp_reduce_2k_setup.c create mode 100644 deps/libtommath/mp_reduce_2k_setup_l.c create mode 100644 deps/libtommath/mp_reduce_is_2k.c create mode 100644 deps/libtommath/mp_reduce_is_2k_l.c create mode 100644 deps/libtommath/mp_reduce_setup.c create mode 100644 deps/libtommath/mp_root_n.c create mode 100644 deps/libtommath/mp_rshd.c create mode 100644 deps/libtommath/mp_sbin_size.c create mode 100644 deps/libtommath/mp_set.c create mode 100644 deps/libtommath/mp_set_double.c create mode 100644 deps/libtommath/mp_set_i32.c create mode 100644 deps/libtommath/mp_set_i64.c create mode 100644 deps/libtommath/mp_set_l.c create mode 100644 deps/libtommath/mp_set_u32.c create mode 100644 deps/libtommath/mp_set_u64.c create mode 100644 deps/libtommath/mp_set_ul.c create mode 100644 deps/libtommath/mp_shrink.c create mode 100644 deps/libtommath/mp_signed_rsh.c create mode 100644 deps/libtommath/mp_sqrmod.c create mode 100644 deps/libtommath/mp_sqrt.c create mode 100644 deps/libtommath/mp_sqrtmod_prime.c create mode 100644 deps/libtommath/mp_sub.c create mode 100644 deps/libtommath/mp_sub_d.c create mode 100644 deps/libtommath/mp_submod.c create mode 100644 deps/libtommath/mp_to_radix.c create mode 100644 deps/libtommath/mp_to_sbin.c create mode 100644 deps/libtommath/mp_to_ubin.c create mode 100644 deps/libtommath/mp_ubin_size.c create mode 100644 deps/libtommath/mp_unpack.c create mode 100644 deps/libtommath/mp_xor.c create mode 100644 deps/libtommath/mp_zero.c create mode 100644 deps/libtommath/s_mp_add.c create mode 100644 deps/libtommath/s_mp_copy_digs.c create mode 100644 deps/libtommath/s_mp_div_3.c create mode 100644 deps/libtommath/s_mp_div_recursive.c create mode 100644 deps/libtommath/s_mp_div_school.c create mode 100644 deps/libtommath/s_mp_div_small.c create mode 100644 deps/libtommath/s_mp_exptmod.c create mode 100644 deps/libtommath/s_mp_exptmod_fast.c create mode 100644 deps/libtommath/s_mp_fp_log.c create mode 100644 deps/libtommath/s_mp_fp_log_d.c create mode 100644 deps/libtommath/s_mp_get_bit.c create mode 100644 deps/libtommath/s_mp_invmod.c create mode 100644 deps/libtommath/s_mp_invmod_odd.c create mode 100644 deps/libtommath/s_mp_log_2expt.c create mode 100644 deps/libtommath/s_mp_montgomery_reduce_comba.c create mode 100644 deps/libtommath/s_mp_mul.c create mode 100644 deps/libtommath/s_mp_mul_balance.c create mode 100644 deps/libtommath/s_mp_mul_comba.c create mode 100644 deps/libtommath/s_mp_mul_high.c create mode 100644 deps/libtommath/s_mp_mul_high_comba.c create mode 100644 deps/libtommath/s_mp_mul_karatsuba.c create mode 100644 deps/libtommath/s_mp_mul_toom.c create mode 100644 deps/libtommath/s_mp_prime_is_divisible.c create mode 100644 deps/libtommath/s_mp_prime_tab.c create mode 100644 deps/libtommath/s_mp_radix_map.c create mode 100644 deps/libtommath/s_mp_radix_size_overestimate.c create mode 100644 deps/libtommath/s_mp_rand_platform.c create mode 100644 deps/libtommath/s_mp_sqr.c create mode 100644 deps/libtommath/s_mp_sqr_comba.c create mode 100644 deps/libtommath/s_mp_sqr_karatsuba.c create mode 100644 deps/libtommath/s_mp_sqr_toom.c create mode 100644 deps/libtommath/s_mp_sub.c create mode 100644 deps/libtommath/s_mp_zero_buf.c create mode 100644 deps/libtommath/s_mp_zero_digs.c create mode 100644 deps/libtommath/sources.cmake create mode 100644 deps/libtommath/testme.sh create mode 100644 deps/libtommath/tommath.def create mode 100644 deps/libtommath/tommath.h create mode 100644 deps/libtommath/tommath_c89.h create mode 100644 deps/libtommath/tommath_class.h create mode 100644 deps/libtommath/tommath_cutoffs.h create mode 100644 deps/libtommath/tommath_private.h create mode 100644 deps/libtommath/tommath_superclass.h delete mode 160000 deps/rapidjson create mode 100644 deps/rapidjson/.gitattributes create mode 100644 deps/rapidjson/.gitignore create mode 100644 deps/rapidjson/.gitmodules create mode 100644 deps/rapidjson/.travis.yml create mode 100644 deps/rapidjson/CHANGELOG.md create mode 100644 deps/rapidjson/CMakeLists.txt create mode 100644 deps/rapidjson/CMakeModules/FindGTestSrc.cmake create mode 100644 deps/rapidjson/RapidJSON.pc.in create mode 100644 deps/rapidjson/RapidJSONConfig.cmake.in create mode 100644 deps/rapidjson/RapidJSONConfigVersion.cmake.in create mode 100644 deps/rapidjson/appveyor.yml create mode 100644 deps/rapidjson/bin/data/abcde.txt create mode 100644 deps/rapidjson/bin/data/glossary.json create mode 100644 deps/rapidjson/bin/data/menu.json create mode 100644 deps/rapidjson/bin/data/readme.txt create mode 100644 deps/rapidjson/bin/data/sample.json create mode 100644 deps/rapidjson/bin/data/webapp.json create mode 100644 deps/rapidjson/bin/data/widget.json create mode 100644 deps/rapidjson/bin/encodings/utf16be.json create mode 100644 deps/rapidjson/bin/encodings/utf16bebom.json create mode 100644 deps/rapidjson/bin/encodings/utf16le.json create mode 100644 deps/rapidjson/bin/encodings/utf16lebom.json create mode 100644 deps/rapidjson/bin/encodings/utf32be.json create mode 100644 deps/rapidjson/bin/encodings/utf32bebom.json create mode 100644 deps/rapidjson/bin/encodings/utf32le.json create mode 100644 deps/rapidjson/bin/encodings/utf32lebom.json create mode 100644 deps/rapidjson/bin/encodings/utf8.json create mode 100644 deps/rapidjson/bin/encodings/utf8bom.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail1.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail10.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail11.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail12.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail13.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail14.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail15.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail16.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail17.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail18.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail19.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail2.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail20.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail21.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail22.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail23.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail24.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail25.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail26.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail27.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail28.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail29.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail3.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail30.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail31.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail32.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail33.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail4.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail5.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail6.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail7.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail8.json create mode 100644 deps/rapidjson/bin/jsonchecker/fail9.json create mode 100644 deps/rapidjson/bin/jsonchecker/pass1.json create mode 100644 deps/rapidjson/bin/jsonchecker/pass2.json create mode 100644 deps/rapidjson/bin/jsonchecker/pass3.json create mode 100644 deps/rapidjson/bin/jsonchecker/readme.txt create mode 100644 deps/rapidjson/bin/types/alotofkeys.json create mode 100644 deps/rapidjson/bin/types/booleans.json create mode 100644 deps/rapidjson/bin/types/floats.json create mode 100644 deps/rapidjson/bin/types/guids.json create mode 100644 deps/rapidjson/bin/types/integers.json create mode 100644 deps/rapidjson/bin/types/mixed.json create mode 100644 deps/rapidjson/bin/types/nulls.json create mode 100644 deps/rapidjson/bin/types/paragraphs.json create mode 100644 deps/rapidjson/bin/types/readme.txt create mode 100644 deps/rapidjson/bin/unittestschema/address.json create mode 100644 deps/rapidjson/bin/unittestschema/allOf_address.json create mode 100644 deps/rapidjson/bin/unittestschema/anyOf_address.json create mode 100644 deps/rapidjson/bin/unittestschema/idandref.json create mode 100644 deps/rapidjson/bin/unittestschema/oneOf_address.json create mode 100644 deps/rapidjson/contrib/natvis/LICENSE create mode 100644 deps/rapidjson/contrib/natvis/README.md create mode 100644 deps/rapidjson/contrib/natvis/rapidjson.natvis create mode 100644 deps/rapidjson/doc/CMakeLists.txt create mode 100644 deps/rapidjson/doc/Doxyfile.in create mode 100644 deps/rapidjson/doc/Doxyfile.zh-cn.in create mode 100644 deps/rapidjson/doc/diagram/architecture.dot create mode 100644 deps/rapidjson/doc/diagram/architecture.png create mode 100644 deps/rapidjson/doc/diagram/insituparsing.dot create mode 100644 deps/rapidjson/doc/diagram/insituparsing.png create mode 100644 deps/rapidjson/doc/diagram/iterative-parser-states-diagram.dot create mode 100644 deps/rapidjson/doc/diagram/iterative-parser-states-diagram.png create mode 100644 deps/rapidjson/doc/diagram/move1.dot create mode 100644 deps/rapidjson/doc/diagram/move1.png create mode 100644 deps/rapidjson/doc/diagram/move2.dot create mode 100644 deps/rapidjson/doc/diagram/move2.png create mode 100644 deps/rapidjson/doc/diagram/move3.dot create mode 100644 deps/rapidjson/doc/diagram/move3.png create mode 100644 deps/rapidjson/doc/diagram/normalparsing.dot create mode 100644 deps/rapidjson/doc/diagram/normalparsing.png create mode 100644 deps/rapidjson/doc/diagram/simpledom.dot create mode 100644 deps/rapidjson/doc/diagram/simpledom.png create mode 100644 deps/rapidjson/doc/diagram/tutorial.dot create mode 100644 deps/rapidjson/doc/diagram/tutorial.png create mode 100644 deps/rapidjson/doc/diagram/utilityclass.dot create mode 100644 deps/rapidjson/doc/diagram/utilityclass.png create mode 100644 deps/rapidjson/doc/dom.md create mode 100644 deps/rapidjson/doc/dom.zh-cn.md create mode 100644 deps/rapidjson/doc/encoding.md create mode 100644 deps/rapidjson/doc/encoding.zh-cn.md create mode 100644 deps/rapidjson/doc/faq.md create mode 100644 deps/rapidjson/doc/faq.zh-cn.md create mode 100644 deps/rapidjson/doc/features.md create mode 100644 deps/rapidjson/doc/features.zh-cn.md create mode 100644 deps/rapidjson/doc/internals.md create mode 100644 deps/rapidjson/doc/internals.zh-cn.md create mode 100644 deps/rapidjson/doc/logo/rapidjson.png create mode 100644 deps/rapidjson/doc/logo/rapidjson.svg create mode 100644 deps/rapidjson/doc/misc/DoxygenLayout.xml create mode 100644 deps/rapidjson/doc/misc/doxygenextra.css create mode 100644 deps/rapidjson/doc/misc/footer.html create mode 100644 deps/rapidjson/doc/misc/header.html create mode 100644 deps/rapidjson/doc/npm.md create mode 100644 deps/rapidjson/doc/performance.md create mode 100644 deps/rapidjson/doc/performance.zh-cn.md create mode 100644 deps/rapidjson/doc/pointer.md create mode 100644 deps/rapidjson/doc/pointer.zh-cn.md create mode 100644 deps/rapidjson/doc/sax.md create mode 100644 deps/rapidjson/doc/sax.zh-cn.md create mode 100644 deps/rapidjson/doc/schema.md create mode 100644 deps/rapidjson/doc/schema.zh-cn.md create mode 100644 deps/rapidjson/doc/stream.md create mode 100644 deps/rapidjson/doc/stream.zh-cn.md create mode 100644 deps/rapidjson/doc/tutorial.md create mode 100644 deps/rapidjson/doc/tutorial.zh-cn.md create mode 100644 deps/rapidjson/docker/debian/Dockerfile create mode 100644 deps/rapidjson/example/CMakeLists.txt create mode 100644 deps/rapidjson/example/archiver/archiver.cpp create mode 100644 deps/rapidjson/example/archiver/archiver.h create mode 100644 deps/rapidjson/example/archiver/archivertest.cpp create mode 100644 deps/rapidjson/example/capitalize/capitalize.cpp create mode 100644 deps/rapidjson/example/condense/condense.cpp create mode 100644 deps/rapidjson/example/filterkey/filterkey.cpp create mode 100644 deps/rapidjson/example/filterkeydom/filterkeydom.cpp create mode 100644 deps/rapidjson/example/jsonx/jsonx.cpp create mode 100644 deps/rapidjson/example/lookaheadparser/lookaheadparser.cpp create mode 100644 deps/rapidjson/example/messagereader/messagereader.cpp create mode 100644 deps/rapidjson/example/parsebyparts/parsebyparts.cpp create mode 100644 deps/rapidjson/example/pretty/pretty.cpp create mode 100644 deps/rapidjson/example/prettyauto/prettyauto.cpp create mode 100644 deps/rapidjson/example/schemavalidator/schemavalidator.cpp create mode 100644 deps/rapidjson/example/serialize/serialize.cpp create mode 100644 deps/rapidjson/example/simpledom/simpledom.cpp create mode 100644 deps/rapidjson/example/simplepullreader/simplepullreader.cpp create mode 100644 deps/rapidjson/example/simplereader/simplereader.cpp create mode 100644 deps/rapidjson/example/simplewriter/simplewriter.cpp create mode 100644 deps/rapidjson/example/sortkeys/sortkeys.cpp create mode 100644 deps/rapidjson/example/traverseaspointer.cpp create mode 100644 deps/rapidjson/example/tutorial/tutorial.cpp create mode 100644 deps/rapidjson/include/rapidjson/allocators.h create mode 100644 deps/rapidjson/include/rapidjson/cursorstreamwrapper.h create mode 100644 deps/rapidjson/include/rapidjson/document.h create mode 100644 deps/rapidjson/include/rapidjson/encodedstream.h create mode 100644 deps/rapidjson/include/rapidjson/encodings.h create mode 100644 deps/rapidjson/include/rapidjson/error/en.h create mode 100644 deps/rapidjson/include/rapidjson/error/error.h create mode 100644 deps/rapidjson/include/rapidjson/filereadstream.h create mode 100644 deps/rapidjson/include/rapidjson/filewritestream.h create mode 100644 deps/rapidjson/include/rapidjson/fwd.h create mode 100644 deps/rapidjson/include/rapidjson/internal/biginteger.h create mode 100644 deps/rapidjson/include/rapidjson/internal/clzll.h create mode 100644 deps/rapidjson/include/rapidjson/internal/diyfp.h create mode 100644 deps/rapidjson/include/rapidjson/internal/dtoa.h create mode 100644 deps/rapidjson/include/rapidjson/internal/ieee754.h create mode 100644 deps/rapidjson/include/rapidjson/internal/itoa.h create mode 100644 deps/rapidjson/include/rapidjson/internal/meta.h create mode 100644 deps/rapidjson/include/rapidjson/internal/pow10.h create mode 100644 deps/rapidjson/include/rapidjson/internal/regex.h create mode 100644 deps/rapidjson/include/rapidjson/internal/stack.h create mode 100644 deps/rapidjson/include/rapidjson/internal/strfunc.h create mode 100644 deps/rapidjson/include/rapidjson/internal/strtod.h create mode 100644 deps/rapidjson/include/rapidjson/internal/swap.h create mode 100644 deps/rapidjson/include/rapidjson/istreamwrapper.h create mode 100644 deps/rapidjson/include/rapidjson/memorybuffer.h create mode 100644 deps/rapidjson/include/rapidjson/memorystream.h create mode 100644 deps/rapidjson/include/rapidjson/msinttypes/inttypes.h create mode 100644 deps/rapidjson/include/rapidjson/msinttypes/stdint.h create mode 100644 deps/rapidjson/include/rapidjson/ostreamwrapper.h create mode 100644 deps/rapidjson/include/rapidjson/pointer.h create mode 100644 deps/rapidjson/include/rapidjson/prettywriter.h create mode 100644 deps/rapidjson/include/rapidjson/rapidjson.h create mode 100644 deps/rapidjson/include/rapidjson/reader.h create mode 100644 deps/rapidjson/include/rapidjson/schema.h create mode 100644 deps/rapidjson/include/rapidjson/stream.h create mode 100644 deps/rapidjson/include/rapidjson/stringbuffer.h create mode 100644 deps/rapidjson/include/rapidjson/uri.h create mode 100644 deps/rapidjson/include/rapidjson/writer.h create mode 100644 deps/rapidjson/include_dirs.js create mode 100644 deps/rapidjson/library.json create mode 100644 deps/rapidjson/license.txt create mode 100644 deps/rapidjson/package.json create mode 100644 deps/rapidjson/rapidjson.autopkg create mode 100644 deps/rapidjson/readme.md create mode 100644 deps/rapidjson/readme.zh-cn.md create mode 100644 deps/rapidjson/test/CMakeLists.txt create mode 100644 deps/rapidjson/test/perftest/CMakeLists.txt create mode 100644 deps/rapidjson/test/perftest/misctest.cpp create mode 100644 deps/rapidjson/test/perftest/perftest.cpp create mode 100644 deps/rapidjson/test/perftest/perftest.h create mode 100644 deps/rapidjson/test/perftest/platformtest.cpp create mode 100644 deps/rapidjson/test/perftest/rapidjsontest.cpp create mode 100644 deps/rapidjson/test/perftest/schematest.cpp create mode 100644 deps/rapidjson/test/unittest/CMakeLists.txt create mode 100644 deps/rapidjson/test/unittest/allocatorstest.cpp create mode 100644 deps/rapidjson/test/unittest/bigintegertest.cpp create mode 100644 deps/rapidjson/test/unittest/clzlltest.cpp create mode 100644 deps/rapidjson/test/unittest/cursorstreamwrappertest.cpp create mode 100644 deps/rapidjson/test/unittest/documenttest.cpp create mode 100644 deps/rapidjson/test/unittest/dtoatest.cpp create mode 100644 deps/rapidjson/test/unittest/encodedstreamtest.cpp create mode 100644 deps/rapidjson/test/unittest/encodingstest.cpp create mode 100644 deps/rapidjson/test/unittest/filestreamtest.cpp create mode 100644 deps/rapidjson/test/unittest/fwdtest.cpp create mode 100644 deps/rapidjson/test/unittest/istreamwrappertest.cpp create mode 100644 deps/rapidjson/test/unittest/itoatest.cpp create mode 100644 deps/rapidjson/test/unittest/jsoncheckertest.cpp create mode 100644 deps/rapidjson/test/unittest/namespacetest.cpp create mode 100644 deps/rapidjson/test/unittest/ostreamwrappertest.cpp create mode 100644 deps/rapidjson/test/unittest/platformtest.cpp create mode 100644 deps/rapidjson/test/unittest/pointertest.cpp create mode 100644 deps/rapidjson/test/unittest/prettywritertest.cpp create mode 100644 deps/rapidjson/test/unittest/readertest.cpp create mode 100644 deps/rapidjson/test/unittest/regextest.cpp create mode 100644 deps/rapidjson/test/unittest/schematest.cpp create mode 100644 deps/rapidjson/test/unittest/simdtest.cpp create mode 100644 deps/rapidjson/test/unittest/strfunctest.cpp create mode 100644 deps/rapidjson/test/unittest/stringbuffertest.cpp create mode 100644 deps/rapidjson/test/unittest/strtodtest.cpp create mode 100644 deps/rapidjson/test/unittest/unittest.cpp create mode 100644 deps/rapidjson/test/unittest/unittest.h create mode 100644 deps/rapidjson/test/unittest/uritest.cpp create mode 100644 deps/rapidjson/test/unittest/valuetest.cpp create mode 100644 deps/rapidjson/test/unittest/writertest.cpp create mode 100644 deps/rapidjson/test/valgrind.supp create mode 100644 deps/rapidjson/thirdparty/gtest/.gitignore create mode 100644 deps/rapidjson/thirdparty/gtest/.travis.yml create mode 100644 deps/rapidjson/thirdparty/gtest/BUILD.bazel create mode 100644 deps/rapidjson/thirdparty/gtest/CMakeLists.txt create mode 100644 deps/rapidjson/thirdparty/gtest/CONTRIBUTING.md create mode 100644 deps/rapidjson/thirdparty/gtest/LICENSE create mode 100644 deps/rapidjson/thirdparty/gtest/Makefile.am create mode 100644 deps/rapidjson/thirdparty/gtest/README.md create mode 100644 deps/rapidjson/thirdparty/gtest/WORKSPACE create mode 100644 deps/rapidjson/thirdparty/gtest/appveyor.yml create mode 100644 deps/rapidjson/thirdparty/gtest/ci/build-linux-autotools.sh create mode 100644 deps/rapidjson/thirdparty/gtest/ci/build-linux-bazel.sh create mode 100644 deps/rapidjson/thirdparty/gtest/ci/env-linux.sh create mode 100644 deps/rapidjson/thirdparty/gtest/ci/env-osx.sh create mode 100644 deps/rapidjson/thirdparty/gtest/ci/get-nprocessors.sh create mode 100644 deps/rapidjson/thirdparty/gtest/ci/install-linux.sh create mode 100644 deps/rapidjson/thirdparty/gtest/ci/install-osx.sh create mode 100644 deps/rapidjson/thirdparty/gtest/ci/log-config.sh create mode 100644 deps/rapidjson/thirdparty/gtest/ci/travis.sh create mode 100644 deps/rapidjson/thirdparty/gtest/configure.ac create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/CHANGES create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/CMakeLists.txt create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/CONTRIBUTORS create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/LICENSE create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/Makefile.am create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/README.md create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/cmake/gmock.pc.in create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/cmake/gmock_main.pc.in create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/configure.ac create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/docs/CheatSheet.md create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/docs/CookBook.md create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/docs/DesignDoc.md create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/docs/Documentation.md create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/docs/ForDummies.md create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/docs/FrequentlyAskedQuestions.md create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/docs/KnownIssues.md create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-actions.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-cardinalities.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-actions.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-actions.h.pump create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-function-mockers.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-function-mockers.h.pump create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-matchers.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-matchers.h.pump create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-nice-strict.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-generated-nice-strict.h.pump create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-matchers.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-more-actions.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-more-matchers.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock-spec-builders.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/gmock.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/custom/gmock-generated-actions.h.pump create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/custom/gmock-matchers.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/custom/gmock-port.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-generated-internal-utils.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-generated-internal-utils.h.pump create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-internal-utils.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/include/gmock/internal/gmock-port.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2005/gmock.sln create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2005/gmock.vcproj create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2005/gmock_config.vsprops create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2005/gmock_main.vcproj create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2005/gmock_test.vcproj create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock.sln create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock_config.props create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock_main.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2010/gmock_test.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock.sln create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock_config.props create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock_main.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/msvc/2015/gmock_test.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/fuse_gmock_files.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/LICENSE create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/README create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/README.cppclean create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/__init__.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/ast.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/gmock_class.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/gmock_class_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/keywords.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/tokenize.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/cpp/utils.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/generator/gmock_gen.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/gmock-config.in create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/gmock_doctor.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/upload.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/scripts/upload_gmock.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/src/gmock-all.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/src/gmock-cardinalities.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/src/gmock-internal-utils.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/src/gmock-matchers.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/src/gmock-spec-builders.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/src/gmock.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/src/gmock_main.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/BUILD.bazel create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-actions_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-cardinalities_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-actions_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-function-mockers_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-internal-utils_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-generated-matchers_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-internal-utils_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-matchers_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-more-actions_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-nice-strict_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-port_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock-spec-builders_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_all_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_ex_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_leak_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_leak_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_link2_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_link_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_link_test.h create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_output_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_output_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_output_test_golden.txt create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_stress_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googlemock/test/gmock_test_utils.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/CHANGES create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/CMakeLists.txt create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/CONTRIBUTORS create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/LICENSE create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/Makefile.am create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/README.md create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/cmake/gtest.pc.in create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/cmake/gtest_main.pc.in create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/cmake/internal_utils.cmake create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/codegear/gtest.cbproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/codegear/gtest.groupproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/codegear/gtest_all.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/codegear/gtest_link.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/codegear/gtest_main.cbproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/codegear/gtest_unittest.cbproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/configure.ac create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/docs/Pkgconfig.md create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/docs/PumpManual.md create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/docs/XcodeGuide.md create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/docs/advanced.md create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/docs/faq.md create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/docs/primer.md create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/docs/samples.md create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-death-test.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-message.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-param-test.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-param-test.h.pump create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-printers.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-spi.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-test-part.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest-typed-test.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest_pred_impl.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/gtest_prod.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/custom/gtest-port.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/custom/gtest-printers.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/custom/gtest.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-death-test-internal.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-filepath.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-internal.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-linked_ptr.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-param-util-generated.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-param-util-generated.h.pump create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-param-util.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-port-arch.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-port.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-string.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-tuple.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-tuple.h.pump create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-type-util.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/include/gtest/internal/gtest-type-util.h.pump create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/m4/acx_pthread.m4 create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/m4/gtest.m4 create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest-md.sln create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest-md.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest-md.vcxproj.filters create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest.sln create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest.vcxproj.filters create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_main-md.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_main-md.vcxproj.filters create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_main.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_main.vcxproj.filters create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_prod_test-md.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_prod_test-md.vcxproj.filters create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_prod_test.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_prod_test.vcxproj.filters create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_unittest-md.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_unittest-md.vcxproj.filters create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_unittest.vcxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/msvc/2010/gtest_unittest.vcxproj.filters create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/prime_tables.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample1.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample1.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample10_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample1_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample2.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample2.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample2_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample3-inl.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample3_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample4.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample4.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample4_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample5_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample6_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample7_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample8_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/samples/sample9_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/scripts/common.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/scripts/fuse_gtest_files.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/scripts/gen_gtest_pred_impl.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/scripts/gtest-config.in create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/scripts/pump.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/scripts/release_docs.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/scripts/upload.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/scripts/upload_gtest.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/src/gtest-all.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/src/gtest-death-test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/src/gtest-filepath.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/src/gtest-internal-inl.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/src/gtest-port.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/src/gtest-printers.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/src/gtest-test-part.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/src/gtest-typed-test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/src/gtest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/src/gtest_main.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/BUILD.bazel create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-death-test_ex_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-death-test_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-filepath_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-linked_ptr_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-listener_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-message_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-options_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-param-test2_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-param-test_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-param-test_test.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-port_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-printers_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-test-part_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-tuple_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-typed-test2_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-typed-test_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-typed-test_test.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest-unittest-api_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_all_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_assert_by_exception_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_break_on_failure_unittest.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_break_on_failure_unittest_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_catch_exceptions_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_catch_exceptions_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_color_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_color_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_env_var_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_env_var_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_environment_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_filter_unittest.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_filter_unittest_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_help_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_help_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_json_outfiles_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_json_output_unittest.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_json_test_utils.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_list_tests_unittest.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_list_tests_unittest_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_main_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_no_test_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_output_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_output_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_output_test_golden_lin.txt create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_pred_impl_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_premature_exit_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_prod_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_repeat_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_shuffle_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_shuffle_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_sole_header_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_stress_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_test_utils.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_testbridge_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_testbridge_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_throw_on_failure_ex_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_throw_on_failure_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_throw_on_failure_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_uninitialized_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_uninitialized_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_unittest.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_outfile1_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_outfile2_test_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_outfiles_test.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_output_unittest.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_output_unittest_.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/gtest_xml_test_utils.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/production.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/test/production.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Config/DebugProject.xcconfig create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Config/FrameworkTarget.xcconfig create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Config/General.xcconfig create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Config/ReleaseProject.xcconfig create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Config/StaticLibraryTarget.xcconfig create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Config/TestTarget.xcconfig create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Resources/Info.plist create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/Info.plist create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/WidgetFramework.xcodeproj/project.pbxproj create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/runtests.sh create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/widget.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/widget.h create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Samples/FrameworkSample/widget_test.cc create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Scripts/runtests.sh create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/Scripts/versiongenerate.py create mode 100644 deps/rapidjson/thirdparty/gtest/googletest/xcode/gtest.xcodeproj/project.pbxproj create mode 100644 deps/rapidjson/travis-doxygen.sh delete mode 160000 deps/zlib create mode 100644 deps/zlib/.github/workflows/cmake.yml create mode 100644 deps/zlib/.github/workflows/configure.yml create mode 100644 deps/zlib/.github/workflows/fuzz.yml create mode 100644 deps/zlib/.gitignore create mode 100644 deps/zlib/CMakeLists.txt create mode 100644 deps/zlib/ChangeLog create mode 100644 deps/zlib/FAQ create mode 100644 deps/zlib/INDEX create mode 100644 deps/zlib/LICENSE create mode 100644 deps/zlib/Makefile create mode 100644 deps/zlib/Makefile.in create mode 100644 deps/zlib/README create mode 100644 deps/zlib/adler32.c create mode 100644 deps/zlib/amiga/Makefile.pup create mode 100644 deps/zlib/amiga/Makefile.sas create mode 100644 deps/zlib/compress.c create mode 100644 deps/zlib/configure create mode 100644 deps/zlib/contrib/README.contrib create mode 100644 deps/zlib/contrib/ada/buffer_demo.adb create mode 100644 deps/zlib/contrib/ada/mtest.adb create mode 100644 deps/zlib/contrib/ada/read.adb create mode 100644 deps/zlib/contrib/ada/readme.txt create mode 100644 deps/zlib/contrib/ada/test.adb create mode 100644 deps/zlib/contrib/ada/zlib-streams.adb create mode 100644 deps/zlib/contrib/ada/zlib-streams.ads create mode 100644 deps/zlib/contrib/ada/zlib-thin.adb create mode 100644 deps/zlib/contrib/ada/zlib-thin.ads create mode 100644 deps/zlib/contrib/ada/zlib.adb create mode 100644 deps/zlib/contrib/ada/zlib.ads create mode 100644 deps/zlib/contrib/ada/zlib.gpr create mode 100644 deps/zlib/contrib/blast/Makefile create mode 100644 deps/zlib/contrib/blast/README create mode 100644 deps/zlib/contrib/blast/blast.c create mode 100644 deps/zlib/contrib/blast/blast.h create mode 100644 deps/zlib/contrib/blast/test.pk create mode 100644 deps/zlib/contrib/blast/test.txt create mode 100644 deps/zlib/contrib/delphi/ZLib.pas create mode 100644 deps/zlib/contrib/delphi/ZLibConst.pas create mode 100644 deps/zlib/contrib/delphi/readme.txt create mode 100644 deps/zlib/contrib/delphi/zlibd32.mak create mode 100644 deps/zlib/contrib/dotzlib/DotZLib.build create mode 100644 deps/zlib/contrib/dotzlib/DotZLib.chm create mode 100644 deps/zlib/contrib/dotzlib/DotZLib.sln create mode 100644 deps/zlib/contrib/dotzlib/DotZLib/AssemblyInfo.cs create mode 100644 deps/zlib/contrib/dotzlib/DotZLib/ChecksumImpl.cs create mode 100644 deps/zlib/contrib/dotzlib/DotZLib/CircularBuffer.cs create mode 100644 deps/zlib/contrib/dotzlib/DotZLib/CodecBase.cs create mode 100644 deps/zlib/contrib/dotzlib/DotZLib/Deflater.cs create mode 100644 deps/zlib/contrib/dotzlib/DotZLib/DotZLib.cs create mode 100644 deps/zlib/contrib/dotzlib/DotZLib/DotZLib.csproj create mode 100644 deps/zlib/contrib/dotzlib/DotZLib/GZipStream.cs create mode 100644 deps/zlib/contrib/dotzlib/DotZLib/Inflater.cs create mode 100644 deps/zlib/contrib/dotzlib/DotZLib/UnitTests.cs create mode 100644 deps/zlib/contrib/dotzlib/LICENSE_1_0.txt create mode 100644 deps/zlib/contrib/dotzlib/readme.txt create mode 100644 deps/zlib/contrib/gcc_gvmat64/gvmat64.S create mode 100644 deps/zlib/contrib/infback9/README create mode 100644 deps/zlib/contrib/infback9/infback9.c create mode 100644 deps/zlib/contrib/infback9/infback9.h create mode 100644 deps/zlib/contrib/infback9/inffix9.h create mode 100644 deps/zlib/contrib/infback9/inflate9.h create mode 100644 deps/zlib/contrib/infback9/inftree9.c create mode 100644 deps/zlib/contrib/infback9/inftree9.h create mode 100644 deps/zlib/contrib/iostream/test.cpp create mode 100644 deps/zlib/contrib/iostream/zfstream.cpp create mode 100644 deps/zlib/contrib/iostream/zfstream.h create mode 100644 deps/zlib/contrib/iostream2/zstream.h create mode 100644 deps/zlib/contrib/iostream2/zstream_test.cpp create mode 100644 deps/zlib/contrib/iostream3/README create mode 100644 deps/zlib/contrib/iostream3/TODO create mode 100644 deps/zlib/contrib/iostream3/test.cc create mode 100644 deps/zlib/contrib/iostream3/zfstream.cc create mode 100644 deps/zlib/contrib/iostream3/zfstream.h create mode 100644 deps/zlib/contrib/minizip/Makefile create mode 100644 deps/zlib/contrib/minizip/Makefile.am create mode 100644 deps/zlib/contrib/minizip/MiniZip64_Changes.txt create mode 100644 deps/zlib/contrib/minizip/MiniZip64_info.txt create mode 100644 deps/zlib/contrib/minizip/configure.ac create mode 100644 deps/zlib/contrib/minizip/crypt.h create mode 100644 deps/zlib/contrib/minizip/ioapi.c create mode 100644 deps/zlib/contrib/minizip/ioapi.h create mode 100644 deps/zlib/contrib/minizip/iowin32.c create mode 100644 deps/zlib/contrib/minizip/iowin32.h create mode 100644 deps/zlib/contrib/minizip/make_vms.com create mode 100644 deps/zlib/contrib/minizip/miniunz.c create mode 100644 deps/zlib/contrib/minizip/miniunzip.1 create mode 100644 deps/zlib/contrib/minizip/minizip.1 create mode 100644 deps/zlib/contrib/minizip/minizip.c create mode 100644 deps/zlib/contrib/minizip/minizip.pc.in create mode 100644 deps/zlib/contrib/minizip/mztools.c create mode 100644 deps/zlib/contrib/minizip/mztools.h create mode 100644 deps/zlib/contrib/minizip/unzip.c create mode 100644 deps/zlib/contrib/minizip/unzip.h create mode 100644 deps/zlib/contrib/minizip/zip.c create mode 100644 deps/zlib/contrib/minizip/zip.h create mode 100644 deps/zlib/contrib/nuget/nuget.csproj create mode 100644 deps/zlib/contrib/nuget/nuget.sln create mode 100644 deps/zlib/contrib/pascal/example.pas create mode 100644 deps/zlib/contrib/pascal/readme.txt create mode 100644 deps/zlib/contrib/pascal/zlibd32.mak create mode 100644 deps/zlib/contrib/pascal/zlibpas.pas create mode 100644 deps/zlib/contrib/puff/Makefile create mode 100644 deps/zlib/contrib/puff/README create mode 100644 deps/zlib/contrib/puff/puff.c create mode 100644 deps/zlib/contrib/puff/puff.h create mode 100644 deps/zlib/contrib/puff/pufftest.c create mode 100644 deps/zlib/contrib/puff/zeros.raw create mode 100644 deps/zlib/contrib/testzlib/testzlib.c create mode 100644 deps/zlib/contrib/testzlib/testzlib.txt create mode 100644 deps/zlib/contrib/untgz/Makefile create mode 100644 deps/zlib/contrib/untgz/Makefile.msc create mode 100644 deps/zlib/contrib/untgz/untgz.c create mode 100644 deps/zlib/contrib/vstudio/readme.txt create mode 100644 deps/zlib/contrib/vstudio/vc10/miniunz.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc10/miniunz.vcxproj.filters create mode 100644 deps/zlib/contrib/vstudio/vc10/minizip.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc10/minizip.vcxproj.filters create mode 100644 deps/zlib/contrib/vstudio/vc10/testzlib.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc10/testzlib.vcxproj.filters create mode 100644 deps/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc10/testzlibdll.vcxproj.filters create mode 100644 deps/zlib/contrib/vstudio/vc10/zlib.rc create mode 100644 deps/zlib/contrib/vstudio/vc10/zlibstat.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc10/zlibstat.vcxproj.filters create mode 100644 deps/zlib/contrib/vstudio/vc10/zlibvc.def create mode 100644 deps/zlib/contrib/vstudio/vc10/zlibvc.sln create mode 100644 deps/zlib/contrib/vstudio/vc10/zlibvc.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc10/zlibvc.vcxproj.filters create mode 100644 deps/zlib/contrib/vstudio/vc11/miniunz.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc11/minizip.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc11/testzlib.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc11/testzlibdll.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc11/zlib.rc create mode 100644 deps/zlib/contrib/vstudio/vc11/zlibstat.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc11/zlibvc.def create mode 100644 deps/zlib/contrib/vstudio/vc11/zlibvc.sln create mode 100644 deps/zlib/contrib/vstudio/vc11/zlibvc.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc12/miniunz.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc12/minizip.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc12/testzlib.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc12/testzlibdll.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc12/zlib.rc create mode 100644 deps/zlib/contrib/vstudio/vc12/zlibstat.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc12/zlibvc.def create mode 100644 deps/zlib/contrib/vstudio/vc12/zlibvc.sln create mode 100644 deps/zlib/contrib/vstudio/vc12/zlibvc.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc14/miniunz.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc14/minizip.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc14/testzlib.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc14/testzlibdll.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc14/zlib.rc create mode 100644 deps/zlib/contrib/vstudio/vc14/zlibstat.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc14/zlibvc.def create mode 100644 deps/zlib/contrib/vstudio/vc14/zlibvc.sln create mode 100644 deps/zlib/contrib/vstudio/vc14/zlibvc.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc17/miniunz.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc17/minizip.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc17/testzlib.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc17/testzlibdll.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc17/zlib.rc create mode 100644 deps/zlib/contrib/vstudio/vc17/zlibstat.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc17/zlibvc.def create mode 100644 deps/zlib/contrib/vstudio/vc17/zlibvc.sln create mode 100644 deps/zlib/contrib/vstudio/vc17/zlibvc.vcxproj create mode 100644 deps/zlib/contrib/vstudio/vc9/miniunz.vcproj create mode 100644 deps/zlib/contrib/vstudio/vc9/minizip.vcproj create mode 100644 deps/zlib/contrib/vstudio/vc9/testzlib.vcproj create mode 100644 deps/zlib/contrib/vstudio/vc9/testzlibdll.vcproj create mode 100644 deps/zlib/contrib/vstudio/vc9/zlib.rc create mode 100644 deps/zlib/contrib/vstudio/vc9/zlibstat.vcproj create mode 100644 deps/zlib/contrib/vstudio/vc9/zlibvc.def create mode 100644 deps/zlib/contrib/vstudio/vc9/zlibvc.sln create mode 100644 deps/zlib/contrib/vstudio/vc9/zlibvc.vcproj create mode 100644 deps/zlib/crc32.c create mode 100644 deps/zlib/crc32.h create mode 100644 deps/zlib/deflate.c create mode 100644 deps/zlib/deflate.h create mode 100644 deps/zlib/doc/algorithm.txt create mode 100644 deps/zlib/doc/crc-doc.1.0.pdf create mode 100644 deps/zlib/doc/rfc1950.txt create mode 100644 deps/zlib/doc/rfc1951.txt create mode 100644 deps/zlib/doc/rfc1952.txt create mode 100644 deps/zlib/doc/txtvsbin.txt create mode 100644 deps/zlib/examples/README.examples create mode 100644 deps/zlib/examples/enough.c create mode 100644 deps/zlib/examples/fitblk.c create mode 100644 deps/zlib/examples/gun.c create mode 100644 deps/zlib/examples/gzappend.c create mode 100644 deps/zlib/examples/gzjoin.c create mode 100644 deps/zlib/examples/gzlog.c create mode 100644 deps/zlib/examples/gzlog.h create mode 100644 deps/zlib/examples/gznorm.c create mode 100644 deps/zlib/examples/zlib_how.html create mode 100644 deps/zlib/examples/zpipe.c create mode 100644 deps/zlib/examples/zran.c create mode 100644 deps/zlib/examples/zran.h create mode 100644 deps/zlib/gzclose.c create mode 100644 deps/zlib/gzguts.h create mode 100644 deps/zlib/gzlib.c create mode 100644 deps/zlib/gzread.c create mode 100644 deps/zlib/gzwrite.c create mode 100644 deps/zlib/infback.c create mode 100644 deps/zlib/inffast.c create mode 100644 deps/zlib/inffast.h create mode 100644 deps/zlib/inffixed.h create mode 100644 deps/zlib/inflate.c create mode 100644 deps/zlib/inflate.h create mode 100644 deps/zlib/inftrees.c create mode 100644 deps/zlib/inftrees.h create mode 100644 deps/zlib/make_vms.com create mode 100644 deps/zlib/msdos/Makefile.bor create mode 100644 deps/zlib/msdos/Makefile.dj2 create mode 100644 deps/zlib/msdos/Makefile.emx create mode 100644 deps/zlib/msdos/Makefile.msc create mode 100644 deps/zlib/msdos/Makefile.tc create mode 100644 deps/zlib/nintendods/Makefile create mode 100644 deps/zlib/nintendods/README create mode 100644 deps/zlib/old/Makefile.emx create mode 100644 deps/zlib/old/Makefile.riscos create mode 100644 deps/zlib/old/README create mode 100644 deps/zlib/old/descrip.mms create mode 100644 deps/zlib/old/os2/Makefile.os2 create mode 100644 deps/zlib/old/os2/zlib.def create mode 100644 deps/zlib/old/visual-basic.txt create mode 100644 deps/zlib/os400/README400 create mode 100644 deps/zlib/os400/bndsrc create mode 100644 deps/zlib/os400/make.sh create mode 100644 deps/zlib/os400/zlib.inc create mode 100644 deps/zlib/qnx/package.qpg create mode 100644 deps/zlib/test/example.c create mode 100644 deps/zlib/test/infcover.c create mode 100644 deps/zlib/test/minigzip.c create mode 100644 deps/zlib/treebuild.xml create mode 100644 deps/zlib/trees.c create mode 100644 deps/zlib/trees.h create mode 100644 deps/zlib/uncompr.c create mode 100644 deps/zlib/watcom/watcom_f.mak create mode 100644 deps/zlib/watcom/watcom_l.mak create mode 100644 deps/zlib/win32/DLL_FAQ.txt create mode 100644 deps/zlib/win32/Makefile.bor create mode 100644 deps/zlib/win32/Makefile.gcc create mode 100644 deps/zlib/win32/Makefile.msc create mode 100644 deps/zlib/win32/README-WIN32.txt create mode 100644 deps/zlib/win32/VisualC.txt create mode 100644 deps/zlib/win32/zlib.def create mode 100644 deps/zlib/win32/zlib1.rc create mode 100644 deps/zlib/zconf.h create mode 100644 deps/zlib/zconf.h.cmakein create mode 100644 deps/zlib/zconf.h.in create mode 100644 deps/zlib/zlib.3 create mode 100644 deps/zlib/zlib.3.pdf create mode 100644 deps/zlib/zlib.h create mode 100644 deps/zlib/zlib.map create mode 100644 deps/zlib/zlib.pc.cmakein create mode 100644 deps/zlib/zlib.pc.in create mode 100644 deps/zlib/zutil.c create mode 100644 deps/zlib/zutil.h diff --git a/deps/GSL b/deps/GSL deleted file mode 160000 index 52212c2..0000000 --- a/deps/GSL +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 52212c2d7600c816ec9b0438d3fbd2a95c190c2f diff --git a/deps/GSL/.clang-format b/deps/GSL/.clang-format new file mode 100644 index 0000000..c12d3bf --- /dev/null +++ b/deps/GSL/.clang-format @@ -0,0 +1,34 @@ +ColumnLimit: 100 + +UseTab: Never +IndentWidth: 4 +AccessModifierOffset: -4 +NamespaceIndentation: Inner + +BreakBeforeBraces: Custom +BraceWrapping: + AfterNamespace: true + AfterEnum: true + AfterStruct: true + AfterClass: true + SplitEmptyFunction: false + AfterControlStatement: true + AfterFunction: true + AfterUnion: true + BeforeElse: true + + +AlwaysBreakTemplateDeclarations: true +BreakConstructorInitializersBeforeComma: true +ConstructorInitializerAllOnOneLineOrOnePerLine: true +AllowShortBlocksOnASingleLine: true +AllowShortFunctionsOnASingleLine: All +AllowShortIfStatementsOnASingleLine: true +AllowShortLoopsOnASingleLine: true + +PointerAlignment: Left +AlignConsecutiveAssignments: false +AlignTrailingComments: true + +SpaceAfterCStyleCast: true +CommentPragmas: '^ NO-FORMAT:' diff --git a/deps/GSL/.gitattributes b/deps/GSL/.gitattributes new file mode 100644 index 0000000..3455dc9 --- /dev/null +++ b/deps/GSL/.gitattributes @@ -0,0 +1 @@ +include/gsl/* linguist-language=C++ diff --git a/deps/GSL/.github/workflows/android.yml b/deps/GSL/.github/workflows/android.yml new file mode 100644 index 0000000..dd0b5a4 --- /dev/null +++ b/deps/GSL/.github/workflows/android.yml @@ -0,0 +1,50 @@ +name: CI_Android +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + Android: + runs-on: macos-latest + defaults: + run: + working-directory: build + steps: + - uses: actions/checkout@v2 + + - name: Create build directory + run: mkdir -p build + working-directory: . + + - name: Start emulator + run: | + echo "y" | $ANDROID_HOME/tools/bin/sdkmanager --install 'system-images;android-24;default;x86_64' + echo "no" | $ANDROID_HOME/tools/bin/avdmanager create avd -n xamarin_android_emulator -k 'system-images;android-24;default;x86_64' --force + $ANDROID_HOME/emulator/emulator -list-avds + echo "Starting emulator" + # Start emulator in background + nohup $ANDROID_HOME/emulator/emulator -avd xamarin_android_emulator -no-snapshot > /dev/null 2>&1 & + echo "Emulator starting" + + - name: Configure + run: cmake -Werror=dev -DCMAKE_TOOLCHAIN_FILE=$ANDROID_NDK_LATEST_HOME/build/cmake/android.toolchain.cmake -DANDROID_PLATFORM=16 -DANDROID_ABI=x86_64 -DCMAKE_BUILD_TYPE=Debug .. + + - name: Build + run: cmake --build . --parallel + + - name: Wait for emulator ready + run: | + $ANDROID_HOME/platform-tools/adb wait-for-device shell 'while [[ -z $(getprop sys.boot_completed | tr -d '\r') ]]; do sleep 10; done; input keyevent 82' + $ANDROID_HOME/platform-tools/adb devices + $ANDROID_HOME/platform-tools/adb shell getprop ro.product.cpu.abi + echo "Emulator started" + + - name: Deploy tests + run: | + adb push tests /data/local/tmp + adb shell find /data/local/tmp/tests -maxdepth 1 -exec chmod +x {} \\\; + + - name: Test + run: adb shell find /data/local/tmp/tests -name "*_tests" -maxdepth 1 -exec {} \\\; diff --git a/deps/GSL/.github/workflows/cmake_find_package.yml b/deps/GSL/.github/workflows/cmake_find_package.yml new file mode 100644 index 0000000..5155d9c --- /dev/null +++ b/deps/GSL/.github/workflows/cmake_find_package.yml @@ -0,0 +1,25 @@ +name: cmake_find_package +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + cmake-find-package: + name: Build ${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ ubuntu-latest, macos-latest ] + steps: + - uses: actions/checkout@v3 + - uses: lukka/get-cmake@latest + with: + cmakeVersion: 3.14.0 + - name: Configure GSL + run: cmake -S . -B build -G "Ninja" -D GSL_TEST=OFF -D CMAKE_INSTALL_PREFIX=${GITHUB_WORKSPACE}/build/install + - name: Install GSL + run: cmake --build build --target install + - name: Test GSL find_package support + run: cmake -S tests/ -B build/tests_find_package -G "Ninja" -D CMAKE_PREFIX_PATH=${GITHUB_WORKSPACE}/build/install -D CMAKE_BUILD_TYPE=Release diff --git a/deps/GSL/.github/workflows/ios.yml b/deps/GSL/.github/workflows/ios.yml new file mode 100644 index 0000000..d231b4c --- /dev/null +++ b/deps/GSL/.github/workflows/ios.yml @@ -0,0 +1,52 @@ +name: CI_iOS +on: + push: + branches: [ main ] + pull_request: + branches: [ main ] + +jobs: + iOS: + runs-on: macos-latest + defaults: + run: + working-directory: build + steps: + - uses: actions/checkout@v2 + + - name: Create build directory + run: mkdir -p build + working-directory: . + + - name: Configure + run: | + cmake \ + -Werror=dev \ + -GXcode \ + -DCMAKE_SYSTEM_NAME=iOS \ + "-DCMAKE_OSX_ARCHITECTURES=arm64;x86_64" \ + -DCMAKE_OSX_DEPLOYMENT_TARGET=9 \ + -DCMAKE_TRY_COMPILE_TARGET_TYPE=STATIC_LIBRARY \ + "-DMACOSX_BUNDLE_GUI_IDENTIFIER=GSL.\$(EXECUTABLE_NAME)" \ + -DMACOSX_BUNDLE_BUNDLE_VERSION=3.1.0 \ + -DMACOSX_BUNDLE_SHORT_VERSION_STRING=3.1.0 \ + .. + + - name: Build + run: cmake --build . --parallel `sysctl -n hw.ncpu` --config Release -- -sdk iphonesimulator + + - name: Start simulator + run: | + RUNTIME=`xcrun simctl list runtimes iOS -j|jq '.runtimes|last.identifier'` + UDID=`xcrun simctl list devices iPhone available -j|jq -r ".devices[$RUNTIME]|last.udid"` + xcrun simctl bootstatus $UDID -b + + - name: Test + run: | + for TEST in `find tests/Release-iphonesimulator -depth 1 -name "*.app"` + do + xcrun simctl install booted $TEST + TEST_ID=`plutil -convert json -o - $TEST/Info.plist|jq -r ".CFBundleIdentifier"` + xcrun simctl launch --console booted $TEST_ID + xcrun simctl uninstall booted $TEST_ID + done diff --git a/deps/GSL/.gitignore b/deps/GSL/.gitignore new file mode 100644 index 0000000..326971f --- /dev/null +++ b/deps/GSL/.gitignore @@ -0,0 +1,16 @@ +CMakeFiles +build +tests/CMakeFiles +tests/Debug +*.opensdf +*.sdf +tests/*tests.dir +*.vcxproj +*.vcxproj.filters +*.sln +*.tlog +Testing/Temporary/*.* +CMakeCache.txt +*.suo +.vs/ +.vscode/ diff --git a/deps/GSL/CMakeLists.txt b/deps/GSL/CMakeLists.txt new file mode 100644 index 0000000..71bb997 --- /dev/null +++ b/deps/GSL/CMakeLists.txt @@ -0,0 +1,48 @@ +cmake_minimum_required(VERSION 3.14...3.16) + +project(GSL VERSION 4.0.0 LANGUAGES CXX) + +add_library(GSL INTERFACE) +add_library(Microsoft.GSL::GSL ALIAS GSL) + +# https://cmake.org/cmake/help/latest/variable/PROJECT_IS_TOP_LEVEL.html +string(COMPARE EQUAL ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR} PROJECT_IS_TOP_LEVEL) + +option(GSL_INSTALL "Generate and install GSL target" ${PROJECT_IS_TOP_LEVEL}) +option(GSL_TEST "Build and perform GSL tests" ${PROJECT_IS_TOP_LEVEL}) + +# The implementation generally assumes a platform that implements C++14 support +target_compile_features(GSL INTERFACE "cxx_std_14") + +# Setup include directory +add_subdirectory(include) + +target_sources(GSL INTERFACE $) + +if (GSL_TEST) + enable_testing() + add_subdirectory(tests) +endif() + +if (GSL_INSTALL) + include(GNUInstallDirs) + include(CMakePackageConfigHelpers) + + install(DIRECTORY "${PROJECT_SOURCE_DIR}/include/gsl" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + + set(export_name "Microsoft.GSLConfig") + set(namespace "Microsoft.GSL::") + set(cmake_files_install_dir ${CMAKE_INSTALL_DATADIR}/cmake/Microsoft.GSL) + + install(TARGETS GSL EXPORT ${export_name} INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + install(EXPORT ${export_name} NAMESPACE ${namespace} DESTINATION ${cmake_files_install_dir}) + export(TARGETS GSL NAMESPACE ${namespace} FILE ${export_name}.cmake) + + set(gls_config_version "${CMAKE_CURRENT_BINARY_DIR}/Microsoft.GSLConfigVersion.cmake") + + write_basic_package_version_file(${gls_config_version} COMPATIBILITY SameMajorVersion ARCH_INDEPENDENT) + + install(FILES ${gls_config_version} DESTINATION ${cmake_files_install_dir}) + + install(FILES GSL.natvis DESTINATION ${cmake_files_install_dir}) +endif() diff --git a/deps/GSL/CMakeSettings.json b/deps/GSL/CMakeSettings.json new file mode 100644 index 0000000..2e1ad24 --- /dev/null +++ b/deps/GSL/CMakeSettings.json @@ -0,0 +1,18 @@ +{ + "configurations": [ + { + "name": "x64-Debug", + "generator": "Ninja", + "configurationType": "Debug", + "inheritEnvironments": [ + "msvc_x64_x64" + ], + "buildRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\build\\${name}", + "installRoot": "${env.USERPROFILE}\\CMakeBuilds\\${workspaceHash}\\install\\${name}", + "cmakeCommandArgs": "-DGSL_CXX_STANDARD=17", + "buildCommandArgs": "-v", + "ctestCommandArgs": "", + "codeAnalysisRuleset": "CppCoreCheckRules.ruleset" + } + ] +} \ No newline at end of file diff --git a/deps/GSL/CONTRIBUTING.md b/deps/GSL/CONTRIBUTING.md new file mode 100644 index 0000000..e28f534 --- /dev/null +++ b/deps/GSL/CONTRIBUTING.md @@ -0,0 +1,29 @@ +## Contributing to the Guidelines Support Library + +The Guidelines Support Library (GSL) contains functions and types that are suggested for use by the +[C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines). GSL design changes are made only as a result of modifications to the Guidelines. + +GSL is accepting contributions that improve or refine any of the types in this library as well as ports to other platforms. Changes should have an issue +tracking the suggestion that has been approved by the maintainers. Your pull request should include a link to the bug that you are fixing. If you've submitted +a PR, please post a comment in the associated issue to avoid duplication of effort. + +## Legal +You will need to complete a Contributor License Agreement (CLA). Briefly, this agreement testifies that you are granting us and the community permission to +use the submitted change according to the terms of the project's license, and that the work being submitted is under appropriate copyright. + +Please submit a Contributor License Agreement (CLA) before submitting a pull request. You may visit https://cla.microsoft.com to sign digitally. + +## Housekeeping +Your pull request should: + +* Include a description of what your change intends to do +* Be a child commit of a reasonably recent commit in the **main** branch + * Requests need not be a single commit, but should be a linear sequence of commits (i.e. no merge commits in your PR) +* It is desirable, but not necessary, for the tests to pass at each commit. Please see [README.md](./README.md) for instructions to build the test suite. +* Have clear commit messages + * e.g. "Fix issue", "Add tests for type", etc. +* Include appropriate tests + * Tests should include reasonable permutations of the target fix/change + * Include baseline changes with your change + * All changed code must have 100% code coverage +* To avoid line ending issues, set `autocrlf = input` and `whitespace = cr-at-eol` in your git configuration diff --git a/deps/GSL/GSL.natvis b/deps/GSL/GSL.natvis new file mode 100644 index 0000000..965888c --- /dev/null +++ b/deps/GSL/GSL.natvis @@ -0,0 +1,32 @@ + + + + + + {{ invoke = {invoke_}, action = {f_} }} + + invoke_ + f_ + + + + + + {{ extent = {storage_.size_} }} + + + storage_.size_ + storage_.data_ + + + + + + + + value = {*ptr_} + + diff --git a/deps/GSL/LICENSE b/deps/GSL/LICENSE new file mode 100644 index 0000000..aa58667 --- /dev/null +++ b/deps/GSL/LICENSE @@ -0,0 +1,21 @@ +Copyright (c) 2015 Microsoft Corporation. All rights reserved. + +This code is licensed under the MIT License (MIT). + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is furnished to do +so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/deps/GSL/README.md b/deps/GSL/README.md new file mode 100644 index 0000000..fe01aad --- /dev/null +++ b/deps/GSL/README.md @@ -0,0 +1,218 @@ +# GSL: Guidelines Support Library +[![Build Status](https://dev.azure.com/cppstat/GSL/_apis/build/status/microsoft.GSL?branchName=main)](https://dev.azure.com/cppstat/GSL/_build/latest?definitionId=1&branchName=main) + +The Guidelines Support Library (GSL) contains functions and types that are suggested for use by the +[C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines) maintained by the [Standard C++ Foundation](https://isocpp.org). +This repo contains Microsoft's implementation of GSL. + +The entire implementation is provided inline in the headers under the [gsl](./include/gsl) directory. The implementation generally assumes a platform that implements C++14 support. + +While some types have been broken out into their own headers (e.g. [gsl/span](./include/gsl/span)), +it is simplest to just include [gsl/gsl](./include/gsl/gsl) and gain access to the entire library. + +> NOTE: We encourage contributions that improve or refine any of the types in this library as well as ports to +other platforms. Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for more information about contributing. + +# Project Code of Conduct +This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +# Usage of Third Party Libraries +This project makes use of the [Google Test](https://github.com/google/googletest) testing library. Please see the [ThirdPartyNotices.txt](./ThirdPartyNotices.txt) file for details regarding the licensing of Google Test. + +# Supported features +## Microsoft GSL implements the following from the C++ Core Guidelines: + +Feature | Supported? | Description +-------------------------------------------------------------------------|:----------:|------------- +[**1. Views**][cg-views] | | +[owner](docs/headers.md#user-content-H-pointers-owner) | ☑ | An alias for a raw pointer +[not_null](docs/headers.md#user-content-H-pointers-not_null) | ☑ | Restricts a pointer/smart pointer to hold non-null values +[span](docs/headers.md#user-content-H-span-span) | ☑ | A view over a contiguous sequence of memory. Based on the standardized version of `std::span`, however `gsl::span` enforces bounds checking. +span_p | ☐ | Spans a range starting from a pointer to the first place for which the predicate is true +[basic_zstring](docs/headers.md#user-content-H-zstring) | ☑ | A pointer to a C-string (zero-terminated array) with a templated char type +[zstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `char` +[czstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `const char` +[wzstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `wchar_t` +[cwzstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `const wchar_t` +[u16zstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `char16_t` +[cu16zstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `const char16_t` +[u32zstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `char32_t` +[cu32zstring](docs/headers.md#user-content-H-zstring) | ☑ | An alias to `basic_zstring` with dynamic extent and a char type of `const char32_t` +[**2. Owners**][cg-owners] | | +[unique_ptr](docs/headers.md#user-content-H-pointers-unique_ptr) | ☑ | An alias to `std::unique_ptr` +[shared_ptr](docs/headers.md#user-content-H-pointers-shared_ptr) | ☑ | An alias to `std::shared_ptr` +stack_array | ☐ | A stack-allocated array +dyn_array | ☐ | A heap-allocated array +[**3. Assertions**][cg-assertions] | | +[Expects](docs/headers.md#user-content-H-assert-expects) | ☑ | A precondition assertion; on failure it terminates +[Ensures](docs/headers.md#user-content-H-assert-ensures) | ☑ | A postcondition assertion; on failure it terminates +[**4. Utilities**][cg-utilities] | | +move_owner | ☐ | A helper function that moves one `owner` to the other +[byte](docs/headers.md#user-content-H-byte-byte) | ☑ | Either an alias to `std::byte` or a byte type +[final_action](docs/headers.md#user-content-H-util-final_action) | ☑ | A RAII style class that invokes a functor on its destruction +[finally](docs/headers.md#user-content-H-util-finally) | ☑ | A helper function instantiating [final_action](docs/headers.md#user-content-H-util-final_action) +[GSL_SUPPRESS](docs/headers.md#user-content-H-assert-gsl_suppress) | ☑ | A macro that takes an argument and turns it into `[[gsl::suppress(x)]]` or `[[gsl::suppress("x")]]` +[[implicit]] | ☐ | A "marker" to put on single-argument constructors to explicitly make them non-explicit +[index](docs/headers.md#user-content-H-util-index) | ☑ | A type to use for all container and array indexing (currently an alias for `std::ptrdiff_t`) +joining_thread | ☐ | A RAII style version of `std::thread` that joins +[narrow](docs/headers.md#user-content-H-narrow-narrow) | ☑ | A checked version of `narrow_cast`; it can throw [narrowing_error](docs/headers.md#user-content-H-narrow-narrowing_error) +[narrow_cast](docs/headers.md#user-content-H-util-narrow_cast) | ☑ | A narrowing cast for values and a synonym for `static_cast` +[narrowing_error](docs/headers.md#user-content-H-narrow-narrowing_error) | ☑ | A custom exception type thrown by [narrow](docs/headers.md#user-content-H-narrow-narrow) +[**5. Concepts**][cg-concepts] | ☐ | + +## The following features do not exist in or have been removed from the C++ Core Guidelines: +Feature | Supported? | Description +-----------------------------------|:----------:|------------- +[strict_not_null](docs/headers.md#user-content-H-pointers-strict_not_null) | ☑ | A stricter version of [not_null](docs/headers.md#user-content-H-pointers-not_null) with explicit constructors +multi_span | ☐ | Deprecated. Multi-dimensional span. +strided_span | ☐ | Deprecated. Support for this type has been discontinued. +basic_string_span | ☐ | Deprecated. Like `span` but for strings with a templated char type +string_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `char` +cstring_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `const char` +wstring_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `wchar_t` +cwstring_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `const wchar_t` +u16string_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `char16_t` +cu16string_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `const char16_t` +u32string_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `char32_t` +cu32string_span | ☐ | Deprecated. An alias to `basic_string_span` with a char type of `const char32_t` + +This is based on [CppCoreGuidelines semi-specification](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gsl-guidelines-support-library). + +[cg-views]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslview-views +[cg-owners]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslowner-ownership-pointers +[cg-assertions]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslassert-assertions +[cg-utilities]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslutil-utilities +[cg-concepts]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslconcept-concepts + +# Quick Start +## Supported Compilers / Toolsets +The GSL officially supports the latest and previous major versions of VS with MSVC & LLVM, GCC, Clang, and XCode with Apple-Clang. +Within these two major versions, we try to target the latest minor updates / revisions (although this may be affected by +delays between a toolchain's release and when it becomes widely available for use). +Below is a table showing the versions currently being tested. + +Compiler |Toolset Versions Currently Tested +:------- |--: + XCode | 13.2.1 & 12.5.1 + GCC | 11[^1] & 10[^2] + Clang | 12[^2] & 11[^2] + Visual Studio with MSVC | VS2022[^3] & VS2019[^4] + Visual Studio with LLVM | VS2022[^3] & VS2019[^4] + + +[^1]: Precise version may be found in the [latest CI results](https://dev.azure.com/cppstat/GSL/_build?definitionId=1&branchFilter=26). +[^2]: Precise version may be found in the [latest CI results](https://dev.azure.com/cppstat/GSL/_build?definitionId=1&branchFilter=26). Should be the version specified [here](https://github.com/actions/virtual-environments/blob/main/images/linux/Ubuntu2004-Readme.md#language-and-runtime). +[^3]: Precise version may be found in the [latest CI results](https://dev.azure.com/cppstat/GSL/_build?definitionId=1&branchFilter=26). Should be the version specified [here](https://github.com/actions/virtual-environments/blob/main/images/win/Windows2022-Readme.md#visual-studio-enterprise-2022). +[^4]: Precise version may be found in the [latest CI results](https://dev.azure.com/cppstat/GSL/_build?definitionId=1&branchFilter=26). Should be the version specified [here](https://github.com/actions/virtual-environments/blob/main/images/win/Windows2019-Readme.md#visual-studio-enterprise-2019). + +--- +If you successfully port GSL to another platform, we would love to hear from you! +- Submit an issue specifying the platform and target. +- Consider contributing your changes by filing a pull request with any necessary changes. +- If at all possible, add a CI/CD step and add the button to the table below! + +Target | CI/CD Status +:------- | -----------: +iOS | ![CI_iOS](https://github.com/microsoft/GSL/workflows/CI_iOS/badge.svg) +Android | ![CI_Android](https://github.com/microsoft/GSL/workflows/CI_Android/badge.svg) + +Note: These CI/CD steps are run with each pull request, however failures in them are non-blocking. + +## Building the tests +To build the tests, you will require the following: + +* [CMake](http://cmake.org), version 3.14 or later to be installed and in your PATH. + +These steps assume the source code of this repository has been cloned into a directory named `c:\GSL`. + +1. Create a directory to contain the build outputs for a particular architecture (we name it `c:\GSL\build-x86` in this example). + + cd GSL + md build-x86 + cd build-x86 + +2. Configure CMake to use the compiler of your choice (you can see a list by running `cmake --help`). + + cmake -G "Visual Studio 15 2017" c:\GSL + +3. Build the test suite (in this case, in the Debug configuration, Release is another good choice). + + cmake --build . --config Debug + +4. Run the test suite. + + ctest -C Debug + +All tests should pass - indicating your platform is fully supported and you are ready to use the GSL types! + +## Building GSL - Using vcpkg + +You can download and install GSL using the [vcpkg](https://github.com/Microsoft/vcpkg) dependency manager: + + git clone https://github.com/Microsoft/vcpkg.git + cd vcpkg + ./bootstrap-vcpkg.sh + ./vcpkg integrate install + vcpkg install ms-gsl + +The GSL port in vcpkg is kept up to date by Microsoft team members and community contributors. If the version is out of date, please [create an issue or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. + +## Using the libraries +As the types are entirely implemented inline in headers, there are no linking requirements. + +You can copy the [gsl](./include/gsl) directory into your source tree so it is available +to your compiler, then include the appropriate headers in your program. + +Alternatively set your compiler's *include path* flag to point to the GSL development folder (`c:\GSL\include` in the example above) or installation folder (after running the install). Eg. + +MSVC++ + + /I c:\GSL\include + +GCC/clang + + -I$HOME/dev/GSL/include + +Include the library using: + + #include + +## Usage in CMake + +The library provides a Config file for CMake, once installed it can be found via `find_package`. + +Which, when successful, will add library target called `Microsoft.GSL::GSL` which you can use via the usual +`target_link_libraries` mechanism. + +```cmake +find_package(Microsoft.GSL CONFIG REQUIRED) + +target_link_libraries(foobar PRIVATE Microsoft.GSL::GSL) +``` + +### FetchContent + +If you are using CMake version 3.11+ you can use the offical [FetchContent module](https://cmake.org/cmake/help/latest/module/FetchContent.html). +This allows you to easily incorporate GSL into your project. + +```cmake +# NOTE: This example uses CMake version 3.14 (FetchContent_MakeAvailable). +# Since it streamlines the FetchContent process +cmake_minimum_required(VERSION 3.14) + +include(FetchContent) + +FetchContent_Declare(GSL + GIT_REPOSITORY "https://github.com/microsoft/GSL" + GIT_TAG "v4.0.0" + GIT_SHALLOW ON +) + +FetchContent_MakeAvailable(GSL) + +target_link_libraries(foobar PRIVATE Microsoft.GSL::GSL) +``` + +## Debugging visualization support + +For Visual Studio users, the file [GSL.natvis](./GSL.natvis) in the root directory of the repository can be added to your project if you would like more helpful visualization of GSL types in the Visual Studio debugger than would be offered by default. diff --git a/deps/GSL/SECURITY.md b/deps/GSL/SECURITY.md new file mode 100644 index 0000000..869fdfe --- /dev/null +++ b/deps/GSL/SECURITY.md @@ -0,0 +1,41 @@ + + +## Security + +Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet), [Xamarin](https://github.com/xamarin), and [our GitHub organizations](https://opensource.microsoft.com/). + +If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/opensource/security/definition), please report it to us as described below. + +## Reporting Security Issues + +**Please do not report security vulnerabilities through public GitHub issues.** + +Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/opensource/security/create-report). + +If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/opensource/security/pgpkey). + +You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://aka.ms/opensource/security/msrc). + +Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue: + + * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.) + * Full paths of source file(s) related to the manifestation of the issue + * The location of the affected source code (tag/branch/commit or direct URL) + * Any special configuration required to reproduce the issue + * Step-by-step instructions to reproduce the issue + * Proof-of-concept or exploit code (if possible) + * Impact of the issue, including how an attacker might exploit the issue + +This information will help us triage your report more quickly. + +If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/opensource/security/bounty) page for more details about our active programs. + +## Preferred Languages + +We prefer all communications to be in English. + +## Policy + +Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/opensource/security/cvd). + + diff --git a/deps/GSL/ThirdPartyNotices.txt b/deps/GSL/ThirdPartyNotices.txt new file mode 100644 index 0000000..552b254 --- /dev/null +++ b/deps/GSL/ThirdPartyNotices.txt @@ -0,0 +1,41 @@ + +THIRD-PARTY SOFTWARE NOTICES AND INFORMATION +Do Not Translate or Localize + +GSL: Guidelines Support Library incorporates third party material from the projects listed below. + +------------------------------------------------------------------------------- +Software: Google Test +Owner: Google Inc. +Source URL: github.com/google/googletest +License: BSD 3 - Clause +Text: + Copyright 2008, Google Inc. + All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following disclaimer + in the documentation and/or other materials provided with the + distribution. + * Neither the name of Google Inc. nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +------------------------------------------------------------------------------- diff --git a/deps/GSL/azure-pipelines.yml b/deps/GSL/azure-pipelines.yml new file mode 100644 index 0000000..ba16ee9 --- /dev/null +++ b/deps/GSL/azure-pipelines.yml @@ -0,0 +1,66 @@ +trigger: + - main + +pr: + autoCancel: true + +stages: +- stage: GCC + dependsOn: [] + jobs: + - template: ./pipelines/jobs.yml + parameters: + compiler: gcc + image: ubuntu-20.04 + compilerVersions: [ 11, 10 ] + setupfile: 'setup_gcc.yml' + +- stage: Clang + dependsOn: [] + jobs: + - template: ./pipelines/jobs.yml + parameters: + compiler: clang + image: ubuntu-20.04 + compilerVersions: [ 12, 11 ] + setupfile: 'setup_clang.yml' + +- stage: Xcode + dependsOn: [] + jobs: + - template: ./pipelines/jobs.yml + parameters: + compiler: 'Xcode' + image: macOS-11 + compilerVersions: [ '12.5.1', '13.2.1' ] + setupfile: 'setup_apple.yml' + +- stage: VS_MSVC + dependsOn: [] + jobs: + - template: ./pipelines/jobs.yml + parameters: + compiler: 'VS2019 (MSVC)' + compilerVersions: [ 'default' ] + image: windows-2019 + - template: ./pipelines/jobs.yml + parameters: + compiler: 'VS2022 (MSVC)' + compilerVersions: [ 'default' ] + image: windows-2022 + +- stage: VS_LLVM + dependsOn: [] + jobs: + - template: ./pipelines/jobs.yml + parameters: + compiler: 'VS2019 (LLVM)' + compilerVersions: [ 'default' ] + image: windows-2019 + extraCmakeArgs: '-T ClangCL' + - template: ./pipelines/jobs.yml + parameters: + compiler: 'VS2022 (LLVM)' + compilerVersions: [ 'default' ] + image: windows-2022 + extraCmakeArgs: '-T ClangCL' diff --git a/deps/GSL/docs/headers.md b/deps/GSL/docs/headers.md new file mode 100644 index 0000000..310b474 --- /dev/null +++ b/deps/GSL/docs/headers.md @@ -0,0 +1,853 @@ +The Guidelines Support Library (GSL) interface is very lightweight and exposed via a header-only library. This document attempts to document all of the headers and their exposed classes and functions. + +Types and functions are exported in the namespace `gsl`. + +See [GSL: Guidelines support library](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#S-gsl) + +# Headers + +- [``](#user-content-H-algorithms) +- [``](#user-content-H-assert) +- [``](#user-content-H-byte) +- [``](#user-content-H-gsl) +- [``](#user-content-H-narrow) +- [``](#user-content-H-pointers) +- [``](#user-content-H-span) +- [``](#user-content-H-span_ext) +- [``](#user-content-H-zstring) +- [``](#user-content-H-util) + +## `` + +This header contains some common algorithms that have been wrapped in GSL safety features. + +- [`gsl::copy`](#user-content-H-algorithms-copy) + +### `gsl::copy` + +```cpp +template +void copy(span src, span dest); +``` + +This function copies the content from the `src` [`span`](#user-content-H-span-span) to the `dest` [`span`](#user-content-H-span-span). It [`Expects`](#user-content-H-assert-expects) +that the destination `span` is at least as large as the source `span`. + +## `` + +This header contains some macros used for contract checking and suppressing code analysis warnings. + +See [GSL.assert: Assertions](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-assertions) + +- [`GSL_SUPPRESS`](#user-content-H-assert-gsl_suppress) +- [`Expects`](#user-content-H-assert-expects) +- [`Ensures`](#user-content-H-assert-ensures) + +### `GSL_SUPPRESS` + +This macro can be used to suppress a code analysis warning. + +The core guidelines request tools that check for the rules to respect suppressing a rule by writing +`[[gsl::suppress(tag)]]` or `[[gsl::suppress(tag, justification: "message")]]`. + +Clang does not use exactly that syntax, but requires `tag` to be put in double quotes `[[gsl::suppress("tag")]]`. + +For portable code you can use `GSL_SUPPRESS(tag)`. + +See [In.force: Enforcement](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#inforce-enforcement). + +### `Expects` + +This macro can be used for expressing a precondition. If the precondition is not held, then `std::terminate` will be called. + +See [I.6: Prefer `Expects()` for expressing preconditions](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#i6-prefer-expects-for-expressing-preconditions) + +### `Ensures` + +This macro can be used for expressing a postcondition. If the postcondition is not held, then `std::terminate` will be called. + +See [I.8: Prefer `Ensures()` for expressing postconditions](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#i8-prefer-ensures-for-expressing-postconditions) + +## `` + +This header contains the definition of a byte type, implementing `std::byte` before it was standardized into C++17. + +- [`gsl::byte`](#user-content-H-byte-byte) + +### `gsl::byte` + +If `GSL_USE_STD_BYTE` is defined to be `1`, then `gsl::byte` will be an alias to `std::byte`. +If `GSL_USE_STD_BYTE` is defined to be `0`, then `gsl::byte` will be a distinct type that implements the concept of byte. +If `GSL_USE_STD_BYTE` is not defined, then the header file will check if `std::byte` is available (C\+\+17 or higher). If yes, +`gsl::byte` will be an alias to `std::byte`, otherwise `gsl::byte` will be a distinct type that implements the concept of byte. + +⚠ Take care when linking projects that were compiled with different language standards (before C\+\+17 and C\+\+17 or higher). +If you do so, you might want to `#define GSL_USE_STD_BYTE 0` to a fixed value to be sure that both projects use exactly +the same type. Otherwise you might get linker errors. + +See [SL.str.5: Use `std::byte` to refer to byte values that do not necessarily represent characters](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rstr-byte) + +### Non-member functions + +```cpp +template ::value>> +constexpr byte& operator<<=(byte& b, IntegerType shift) noexcept; + +template ::value>> +constexpr byte operator<<(byte b, IntegerType shift) noexcept; + +template ::value>> +constexpr byte& operator>>=(byte& b, IntegerType shift) noexcept; + +template ::value>> +constexpr byte operator>>(byte b, IntegerType shift) noexcept; +``` + +Left or right shift a `byte` by a given number of bits. + +```cpp +constexpr byte& operator|=(byte& l, byte r) noexcept; +constexpr byte operator|(byte l, byte r) noexcept; +``` + +Bitwise "or" of two `byte`s. + +```cpp +constexpr byte& operator&=(byte& l, byte r) noexcept; +constexpr byte operator&(byte l, byte r) noexcept; +``` + +Bitwise "and" of two `byte`s. + +```cpp +constexpr byte& operator^=(byte& l, byte r) noexcept; +constexpr byte operator^(byte l, byte r) noexcept; +``` + +Bitwise xor of two `byte`s. + +```cpp +constexpr byte operator~(byte b) noexcept; +``` + +Bitwise negation of a `byte`. Flips all bits. Zeroes become ones, ones become zeroes. + +```cpp +template +constexpr byte to_byte(T t) noexcept; +``` + +Convert the given value to a `byte`. The template requires `T` to be an `unsigned char` so that no data loss can occur. +If you want to convert an integer constant to a `byte` you probably want to call `to_byte()`. + +```cpp +template +constexpr byte to_byte() noexcept; +``` + +Convert the given value `I` to a `byte`. The template requires `I` to be in the valid range 0..255 for a `gsl::byte`. + +## `` + +This header is a convenience header that includes all other [GSL headers](#user-content-H). +Since `` requires exceptions, it will only be included if exceptions are enabled. + +## `` + +This header contains utility functions and classes, for narrowing casts, which require exceptions. The narrowing-related utilities that don't require exceptions are found inside [util](#user-content-H-util). + +See [GSL.util: Utilities](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-utilities) + +- [`gsl::narrowing_error`](#user-content-H-narrow-narrowing_error) +- [`gsl::narrow`](#user-content-H-narrow-narrow) + +### `gsl::narrowing_error` + +`gsl::narrowing_error` is the exception thrown by [`gsl::narrow`](#user-content-H-narrow-narrow) when a narrowing conversion fails. It is derived from `std::exception`. + +### `gsl::narrow` + +`gsl::narrow(x)` is a named cast that does a `static_cast(x)` for narrowing conversions with no signedness promotions. +If the argument `x` cannot be represented in the target type `T`, then the function throws a [`gsl::narrowing_error`](#user-content-H-narrow-narrowing_error) (e.g., `narrow(-42)` and `narrow(300)` throw). + +Note: compare [`gsl::narrow_cast`](#user-content-H-util-narrow_cast) in header [util](#user-content-H-util). + +See [ES.46: Avoid lossy (narrowing, truncating) arithmetic conversions](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-narrowing) and [ES.49: If you must use a cast, use a named cast](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-casts-named) + +## `` + +This header contains some pointer types. + +See [GSL.view](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-views) + +- [`gsl::unique_ptr`](#user-content-H-pointers-unique_ptr) +- [`gsl::shared_ptr`](#user-content-H-pointers-shared_ptr) +- [`gsl::owner`](#user-content-H-pointers-owner) +- [`gsl::not_null`](#user-content-H-pointers-not_null) +- [`gsl::strict_not_null`](#user-content-H-pointers-strict_not_null) + +### `gsl::unique_ptr` + +`gsl::unique_ptr` is an alias to `std::unique_ptr`. + +See [GSL.owner: Ownership pointers](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-ownership) + +### `gsl::shared_ptr` + +`gsl::shared_ptr` is an alias to `std::shared_ptr`. + +See [GSL.owner: Ownership pointers](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-ownership) + +### `gsl::owner` + +`gsl::owner` is designed as a safety mechanism for code that must deal directly with raw pointers that own memory. Ideally such code should be restricted to the implementation of low-level abstractions. `gsl::owner` can also be used as a stepping point in converting legacy code to use more modern RAII constructs such as smart pointers. +`T` must be a pointer type (`std::is_pointer`). + +A `gsl::owner` is a typedef to `T`. It adds no runtime overhead whatsoever, as it is purely syntactic and does not add any runtime checks. Instead, it serves as an annotation for static analysis tools which check for memory safety, and as a code comprehension guide for human readers. + +See Enforcement section of [C.31: All resources acquired by a class must be released by the class’s destructor](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rc-dtor-release). + +### `gsl::not_null` + +`gsl::not_null` restricts a pointer or smart pointer to only hold non-null values. It has no size overhead over `T`. + +The checks for ensuring that the pointer is not null are done in the constructor. There is no overhead when retrieving or dereferencing the checked pointer. +When a nullptr check fails, `std::terminate` is called. + +See [F.23: Use a `not_null` to indicate that “null†is not a valid value](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-nullptr) + +#### Member functions + +##### Construct/Copy + +```cpp +template ::value>> +constexpr not_null(U&& u); + +template ::value>> +constexpr not_null(T u); +``` + +Constructs a `gsl_owner` from a pointer that is convertible to `T` or that is a `T`. It [`Expects`](#user-content-H-assert-expects) that the provided pointer is not `== nullptr`. + +```cpp +template ::value>> +constexpr not_null(const not_null& other); +``` + +Constructs a `gsl_owner` from another `gsl_owner` where the other pointer is convertible to `T`. It [`Expects`](#user-content-H-assert-expects) that the provided pointer is not `== nullptr`. + +```cpp +not_null(const not_null& other) = default; +not_null& operator=(const not_null& other) = default; +``` + +Copy construction and assignment. + +```cpp +not_null(std::nullptr_t) = delete; +not_null& operator=(std::nullptr_t) = delete; +``` + +Construction from `std::nullptr_t` and assignment of `std::nullptr_t` are explicitly deleted. + +##### Modifiers + +```cpp +not_null& operator++() = delete; +not_null& operator--() = delete; +not_null operator++(int) = delete; +not_null operator--(int) = delete; +not_null& operator+=(std::ptrdiff_t) = delete; +not_null& operator-=(std::ptrdiff_t) = delete; +``` + +Explicitly deleted operators. Pointers point to single objects ([I.13: Do not pass an array as a single pointer](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-array)), so don't allow these operators. + +##### Observers + +```cpp +constexpr details::value_or_reference_return_t get() const; +constexpr operator T() const { return get(); } +``` + +Get the underlying pointer. + +```cpp +constexpr decltype(auto) operator->() const { return get(); } +constexpr decltype(auto) operator*() const { return *get(); } +``` + +Dereference the underlying pointer. + +```cpp +void operator[](std::ptrdiff_t) const = delete; +``` + +Array index operator is explicitly deleted. Pointers point to single objects ([I.13: Do not pass an array as a single pointer](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-array)), so don't allow treating them as an array. + +#### Non-member functions + +```cpp +template +auto make_not_null(T&& t) noexcept; +``` + +Creates a `gsl::not_null` object, deducing the target type from the type of the argument. + +```cpp +template +auto operator==(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(lhs.get() == rhs.get())) + -> decltype(lhs.get() == rhs.get()); +template +auto operator!=(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(lhs.get() != rhs.get())) + -> decltype(lhs.get() != rhs.get()); +template +auto operator<(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(lhs.get() < rhs.get())) + -> decltype(lhs.get() < rhs.get()); +template +auto operator<=(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(lhs.get() <= rhs.get())) + -> decltype(lhs.get() <= rhs.get()); +template +auto operator>(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(lhs.get() > rhs.get())) + -> decltype(lhs.get() > rhs.get()); +template +auto operator>=(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(lhs.get() >= rhs.get())) + -> decltype(lhs.get() >= rhs.get()); +``` + +Comparison of pointers that are convertible to each other. + +##### Input/Output + +```cpp +template +std::ostream& operator<<(std::ostream& os, const not_null& val); +``` + +Performs stream output on a `not_null` pointer, invoking `os << val.get()`. This function is only available when `GSL_NO_IOSTREAMS` is not defined. + +##### Modifiers + +```cpp +template +std::ptrdiff_t operator-(const not_null&, const not_null&) = delete; +template +not_null operator-(const not_null&, std::ptrdiff_t) = delete; +template +not_null operator+(const not_null&, std::ptrdiff_t) = delete; +template +not_null operator+(std::ptrdiff_t, const not_null&) = delete; +``` + +Addition and subtraction are explicitly deleted. Pointers point to single objects ([I.13: Do not pass an array as a single pointer](http://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Ri-array)), so don't allow these operators. + +##### STL integration + +```cpp +template +struct std::hash> { ... }; +``` + +Specialization of `std::hash` for `gsl::not_null`. + +### `gsl::strict_not_null` + +`strict_not_null` is the same as [`not_null`](#user-content-H-pointers-not_null) except that the constructors are `explicit`. + +The free function that deduces the target type from the type of the argument and creates a `gsl::strict_not_null` object is `gsl::make_strict_not_null`. + +## `` + +This header file exports the class `gsl::span`, a bounds-checked implementation of `std::span`. + +- [`gsl::span`](#user-content-H-span-span) + +### `gsl::span` + +```cpp +template +class span; +``` + +`gsl::span` is a view over memory. It does not own the memory and is only a way to access contiguous sequences of objects. +The extent can be either a fixed size or [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent). + +The `gsl::span` is based on the standardized version of `std::span` which was added to C++20. Originally, the plan was to +deprecate `gsl::span` when `std::span` finished standardization, however that plan changed when the runtime bounds checking +was removed from `std::span`'s design. + +The only difference between `gsl::span` and `std::span` is that `gsl::span` strictly enforces runtime bounds checking. +Any violations of the bounds check results in termination of the program. +Like `gsl::span`, `gsl::span`'s iterators also differ from `std::span`'s iterator in that all access operations are bounds checked. + +#### Which version of span should I use? + +##### Use `gsl::span` if + +- you want to guarantee bounds safety in your project. + - All data accessing operations use bounds checking to ensure you are only accessing valid memory. +- your project uses C++14 or C++17. + - `std::span` is not available as it was not introduced into the STL until C++20. + +##### Use `std::span` if + +- your project is C++20 and you need the performance offered by `std::span`. + +#### Types + +```cpp +using element_type = ElementType; +using value_type = std::remove_cv_t; +using size_type = std::size_t; +using pointer = element_type*; +using const_pointer = const element_type*; +using reference = element_type&; +using const_reference = const element_type&; +using difference_type = std::ptrdiff_t; + +using iterator = details::span_iterator; +using reverse_iterator = std::reverse_iterator; +``` + +#### Member functions + +```cpp +constexpr span() noexcept; +``` + +Constructs an empty `span`. This constructor is only available if `Extent` is 0 or [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent). +`span::data()` will return `nullptr`. + +```cpp +constexpr explicit(Extent != gsl::dynamic_extent) span(pointer ptr, size_type count) noexcept; +``` + +Constructs a `span` from a pointer and a size. If `Extent` is not [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent), +then the constructor [`Expects`](#user-content-H-assert-expects) that `count == Extent`. + +```cpp +constexpr explicit(Extent != gsl::dynamic_extent) span(pointer firstElem, pointer lastElem) noexcept; +``` + +Constructs a `span` from a pointer to the begin and the end of the data. If `Extent` is not [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent), +then the constructor [`Expects`](#user-content-H-assert-expects) that `lastElem - firstElem == Extent`. + +```cpp +template +constexpr span(element_type (&arr)[N]) noexcept; +``` + +Constructs a `span` from a C style array. This overload is available if `Extent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) +or `N == Extent`. + +```cpp +template +constexpr span(std::array& arr) noexcept; + +template +constexpr span(const std::array& arr) noexcept; +``` + +Constructs a `span` from a `std::array`. These overloads are available if `Extent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) +or `N == Extent`, and if the array can be interpreted as a `ElementType` array. + +```cpp +template +constexpr explicit(Extent != gsl::dynamic_extent) span(Container& cont) noexcept; + +template +constexpr explicit(Extent != gsl::dynamic_extent) span(const Container& cont) noexcept; +``` + +Constructs a `span` from a container. These overloads are available if `Extent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) +or `N == Extent`, and if the container can be interpreted as a contiguous `ElementType` array. + +```cpp +constexpr span(const span& other) noexcept = default; +``` + +Copy constructor. + +```cpp +template +explicit(Extent != gsl::dynamic_extent && OtherExtent == dynamic_extent) +constexpr span(const span& other) noexcept; +``` + +Constructs a `span` from another `span`. This constructor is available if `OtherExtent == Extent || Extent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent)` || OtherExtent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) +and if `ElementType` and `OtherElementType` are compatible. + +If `Extent !=`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) and `OtherExtent ==`[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent), +then the constructor [`Expects`](#user-content-H-assert-expects) that `other.size() == Extent`. + +```cpp +constexpr span& operator=(const span& other) noexcept = default; +``` + +Copy assignment + +```cpp +template +constexpr span first() const noexcept; + +constexpr span first(size_type count) const noexcept; + +template +constexpr span last() const noexcept; + +constexpr span last(size_type count) const noexcept; +``` + +Return a subspan of the first/last `Count` elements. [`Expects`](#user-content-H-assert-expects) that `Count` does not exceed the `span`'s size. + +```cpp +template +constexpr auto subspan() const noexcept; + +constexpr span +subspan(size_type offset, size_type count = dynamic_extent) const noexcept; +``` + +Return a subspan starting at `offset` and having size `count`. [`Expects`](#user-content-H-assert-expects) that `offset` does not exceed the `span`'s size, +and that `offset == `[`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) or `offset + count` does not exceed the `span`'s size. +If `count` is `gsl::dynamic_extent`, the number of elements in the subspan is `size() - offset`. + +```cpp +constexpr size_type size() const noexcept; + +constexpr size_type size_bytes() const noexcept; +``` + +Returns the size respective the size in bytes of the `span`. + +```cpp +constexpr bool empty() const noexcept; +``` + +Is the `span` empty? + +```cpp +constexpr reference operator[](size_type idx) const noexcept; +``` + +Returns a reference to the element at the given index. [`Expects`](#user-content-H-assert-expects) that `idx` is less than the `span`'s size. + +```cpp +constexpr reference front() const noexcept; +constexpr reference back() const noexcept; +``` + +Returns a reference to the first/last element in the `span`. [`Expects`](#user-content-H-assert-expects) that the `span` is not empty. + +```cpp +constexpr pointer data() const noexcept; +``` + +Returns a pointer to the beginning of the contained data. + +```cpp +constexpr iterator begin() const noexcept; +constexpr iterator end() const noexcept; +constexpr reverse_iterator rbegin() const noexcept; +constexpr reverse_iterator rend() const noexcept; +``` + +Returns an iterator to the first/last normal/reverse iterator. + +```cpp +template +span(Type (&)[Extent]) -> span; + +template +span(std::array&) -> span; + +template +span(const std::array&) -> span; + +template ().data())>> +span(Container&) -> span; + +template ().data())>> +span(const Container&) -> span; +``` + +Deduction guides. + +```cpp +template +span::value> +as_bytes(span s) noexcept; + +template +span::value> +as_writable_bytes(span s) noexcept; +``` + +Converts a `span` into a `span` of `byte`s. + +`as_writable_bytes` will only be available for non-const `ElementType`s. + +## `` + +This file is a companion for and included by [``](#user-content-H-span), and should not be used on its own. It contains useful features that aren't part of the `std::span` API as found inside the STL `` header (with the exception of [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent), which is included here due to implementation constraints). + +- [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) +- [`gsl::span`](#user-content-H-span_ext-span) +- [`gsl::span` comparison operators](#user-content-H-span_ext-span_comparison_operators) +- [`gsl::make_span`](#user-content-H-span_ext-make_span) +- [`gsl::at`](#user-content-H-span_ext-at) +- [`gsl::ssize`](#user-content-H-span_ext-ssize) +- [`gsl::span` iterator functions](#user-content-H-span_ext-span_iterator_functions) + +### `gsl::dynamic_extent` + +Defines the extent value to be used by all `gsl::span` with dynamic extent. + +Note: `std::dynamic_extent` is exposed by the STL `` header and so ideally `gsl::dynamic_extent` would be under [``](#user-content-H-span), but to avoid cyclic dependency issues it is under `` instead. + +### `gsl::span` + +```cpp +template +class span; +``` + +Forward declaration of `gsl::span`. + +### `gsl::span` comparison operators + +```cpp +template +constexpr bool operator==(span l, span r); +template +constexpr bool operator!=(span l, span r); +template +constexpr bool operator<(span l, span r); +template +constexpr bool operator<=(span l, span r); +template +constexpr bool operator>(span l, span r); +template +constexpr bool operator>=(span l, span r); +``` + +The comparison operators for two `span`s lexicographically compare the elements in the `span`s. + +### `gsl::make_span` + +```cpp +template +constexpr span make_span(ElementType* ptr, typename span::size_type count); +template +constexpr span make_span(ElementType* firstElem, ElementType* lastElem); +template +constexpr span make_span(ElementType (&arr)[N]) noexcept; +template +constexpr span make_span(Container& cont); +template +constexpr span make_span(const Container& cont); +template +constexpr span make_span(Ptr& cont, std::size_t count); +template +constexpr span make_span(Ptr& cont); +``` + +Utility function for creating a `span` with [`gsl::dynamic_extent`](#user-content-H-span_ext-dynamic_extent) from +- pointer and length, +- pointer to start and pointer to end, +- a C style array, or +- a container. + +### `gsl::at` + +```cpp +template +constexpr ElementType& at(span s, index i); +``` + +The function `gsl::at` offers a safe way to access data with index bounds checking. + +This is the specialization of [`gsl::at`](#user-content-H-util-at) for [`span`](#user-content-H-span-span). It returns a reference to the `i`th element and +[`Expects`](#user-content-H-assert-expects) that the provided index is within the bounds of the `span`. + +Note: `gsl::at` supports indexes up to `PTRDIFF_MAX`. + +### `gsl::ssize` + +```cpp +template +constexpr std::ptrdiff_t ssize(const span& s) noexcept; +``` + +Return the size of a [`span`](#user-content-H-span-span) as a `ptrdiff_t`. + +### `gsl::span` iterator functions + +```cpp +template +constexpr typename span::iterator +begin(const span& s) noexcept; + +template +constexpr typename span::iterator +end(const span& s) noexcept; + +template +constexpr typename span::reverse_iterator +rbegin(const span& s) noexcept; + +template +constexpr typename span::reverse_iterator +rend(const span& s) noexcept; + +template +constexpr typename span::iterator +cbegin(const span& s) noexcept; + +template +constexpr typename span::iterator +cend(const span& s) noexcept; + +template +constexpr typename span::reverse_iterator +crbegin(const span& s) noexcept; + +template +constexpr typename span::reverse_iterator +crend(const span& s) noexcept; +``` + +Free functions for getting a non-const/const begin/end normal/reverse iterator for a [`span`](#user-content-H-span-span). + +## `` + +This header exports a family of `*zstring` types. + +A `gsl::XXzstring` is a typedef to `T`. It adds no checks whatsoever, it is just for having a syntax to describe +that a pointer points to a zero terminated C style string. This helps static code analysis, and it helps human readers. + +`basic_zstring` is a pointer to a C-string (zero-terminated array) with a templated char type. Used to implement the rest of the `*zstring` family. +`zstring` is a zero terminated `char` string. +`czstring` is a const zero terminated `char` string. +`wzstring` is a zero terminated `wchar_t` string. +`cwzstring` is a const zero terminated `wchar_t` string. +`u16zstring` is a zero terminated `char16_t` string. +`cu16zstring` is a const zero terminated `char16_t` string. +`u32zstring` is a zero terminated `char32_t` string. +`cu32zstring` is a const zero terminated `char32_t` string. + +See [GSL.view](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-views) and [SL.str.3: Use zstring or czstring to refer to a C-style, zero-terminated, sequence of characters](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rstr-zstring). + +## `` + +This header contains utility functions and classes. This header works without exceptions being available. The parts that require +exceptions being available are in their own header file [narrow](#user-content-H-narrow). + +See [GSL.util: Utilities](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#SS-utilities) + +- [`gsl::narrow_cast`](#user-content-H-util-narrow_cast) +- [`gsl::final_action`](#user-content-H-util-final_action) +- [`gsl::at`](#user-content-H-util-at) + +### `gsl::index` + +An alias to `std::ptrdiff_t`. It serves as the index type for all container indexes/subscripts/sizes. + +### `gsl::narrow_cast` + +`gsl::narrow_cast(x)` is a named cast that is identical to a `static_cast(x)`. It exists to make clear to static code analysis tools and to human readers that a lossy conversion is acceptable. + +Note: compare the throwing version [`gsl::narrow`](#user-content-H-narrow-narrow) in header [narrow](#user-content-H-narrow). + +See [ES.46: Avoid lossy (narrowing, truncating) arithmetic conversions](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-narrowing) and [ES.49: If you must use a cast, use a named cast](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-casts-named) + +### `gsl::final_action` + +```cpp +template +class final_action { ... }; +``` + +`final_action` allows you to ensure something gets run at the end of a scope. + +See [E.19: Use a final_action object to express cleanup if no suitable resource handle is available](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Re-finally) + +#### Member functions + +```cpp +explicit final_action(const F& ff) noexcept; +explicit final_action(F&& ff) noexcept; +``` + +Construct an object with the action to invoke in the destructor. + +```cpp +~final_action() noexcept; +``` + +The destructor will call the action that was passed in the constructor. + +```cpp +final_action(final_action&& other) noexcept; +final_action(const final_action&) = delete; +void operator=(const final_action&) = delete; +void operator=(final_action&&) = delete; +``` + +Move construction is allowed. Copy construction is deleted. Copy and move assignment are also explicitely deleted. + +#### Non-member functions +```cpp +template +auto finally(F&& f) noexcept; +``` + +Creates a `gsl::final_action` object, deducing the template argument type from the type of the argument. + +### `gsl::at` + +The function `gsl::at` offers a safe way to access data with index bounds checking. + +Note: `gsl::at` supports indexes up to `PTRDIFF_MAX`. + +See [ES.42: Keep use of pointers simple and straightforward](https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Res-ptr) + +```cpp +template +constexpr T& at(T (&arr)[N], const index i); +``` + +This overload returns a reference to the `i`s element of a C style array `arr`. It [`Expects`](#user-content-H-assert-expects) that the provided index is within the bounds of the array. + +```cpp +template +constexpr auto at(Cont& cont, const index i) -> decltype(cont[cont.size()]); +``` + +This overload returns a reference to the `i`s element of the container `cont`. It [`Expects`](#user-content-H-assert-expects) that the provided index is within the bounds of the array. + +```cpp +template +constexpr T at(const std::initializer_list cont, const index i); +``` + +This overload returns a reference to the `i`s element of the initializer list `cont`. It [`Expects`](#user-content-H-assert-expects) that the provided index is within the bounds of the array. + +```cpp +template +constexpr auto at(std::span sp, const index i) -> decltype(sp[sp.size()]); +``` + +This overload returns a reference to the `i`s element of the `std::span` `sp`. It [`Expects`](#user-content-H-assert-expects) that the provided index is within the bounds of the array. + +For [`gsl::at`](#user-content-H-span_ext-at) for [`gsl::span`](#user-content-H-span-span) see header [`span_ext`](#user-content-H-span_ext). diff --git a/deps/GSL/include/CMakeLists.txt b/deps/GSL/include/CMakeLists.txt new file mode 100644 index 0000000..fe4eed9 --- /dev/null +++ b/deps/GSL/include/CMakeLists.txt @@ -0,0 +1,13 @@ +# Add include folders to the library and targets that consume it +# the SYSTEM keyword suppresses warnings for users of the library +# +# By adding this directory as an include directory the user gets a +# namespace effect. +# +# IE: +# #include +if(PROJECT_IS_TOP_LEVEL) + target_include_directories(GSL INTERFACE $) +else() + target_include_directories(GSL SYSTEM INTERFACE $) +endif() diff --git a/deps/GSL/include/gsl/algorithm b/deps/GSL/include/gsl/algorithm new file mode 100644 index 0000000..584f5cd --- /dev/null +++ b/deps/GSL/include/gsl/algorithm @@ -0,0 +1,63 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef GSL_ALGORITHM_H +#define GSL_ALGORITHM_H + +#include "assert" // for Expects +#include "span" // for dynamic_extent, span + +#include // for copy_n +#include // for ptrdiff_t +#include // for is_assignable + +#ifdef _MSC_VER +#pragma warning(push) + +// turn off some warnings that are noisy about our Expects statements +#pragma warning(disable : 4127) // conditional expression is constant +#pragma warning(disable : 4996) // unsafe use of std::copy_n + +#endif // _MSC_VER + +namespace gsl +{ +// Note: this will generate faster code than std::copy using span iterator in older msvc+stl +// not necessary for msvc since VS2017 15.8 (_MSC_VER >= 1915) +template +void copy(span src, span dest) +{ + static_assert(std::is_assignable::value, + "Elements of source span can not be assigned to elements of destination span"); + static_assert(SrcExtent == dynamic_extent || DestExtent == dynamic_extent || + (SrcExtent <= DestExtent), + "Source range is longer than target range"); + + Expects(dest.size() >= src.size()); + // clang-format off + GSL_SUPPRESS(stl.1) // NO-FORMAT: attribute + // clang-format on + std::copy_n(src.data(), src.size(), dest.data()); +} + +} // namespace gsl + +#ifdef _MSC_VER +#pragma warning(pop) +#endif // _MSC_VER + +#endif // GSL_ALGORITHM_H diff --git a/deps/GSL/include/gsl/assert b/deps/GSL/include/gsl/assert new file mode 100644 index 0000000..d3e6ccd --- /dev/null +++ b/deps/GSL/include/gsl/assert @@ -0,0 +1,133 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef GSL_ASSERT_H +#define GSL_ASSERT_H + +// +// Temporary until MSVC STL supports no-exceptions mode. +// Currently terminate is a no-op in this mode, so we add termination behavior back +// +#if defined(_MSC_VER) && (defined(_KERNEL_MODE) || (defined(_HAS_EXCEPTIONS) && !_HAS_EXCEPTIONS)) +#define GSL_KERNEL_MODE + +#define GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND +#include +#define RANGE_CHECKS_FAILURE 0 + +#if defined(__clang__) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Winvalid-noreturn" +#endif // defined(__clang__) + +#else // defined(_MSC_VER) && (defined(_KERNEL_MODE) || (defined(_HAS_EXCEPTIONS) && + // !_HAS_EXCEPTIONS)) + +#include + +#endif // defined(_MSC_VER) && (defined(_KERNEL_MODE) || (defined(_HAS_EXCEPTIONS) && + // !_HAS_EXCEPTIONS)) + +// +// make suppress attributes parse for some compilers +// Hopefully temporary until suppression standardization occurs +// +#if defined(__clang__) +#define GSL_SUPPRESS(x) [[gsl::suppress(#x)]] +#else +#if defined(_MSC_VER) && !defined(__INTEL_COMPILER) && !defined(__NVCC__) +#define GSL_SUPPRESS(x) [[gsl::suppress(x)]] +#else +#define GSL_SUPPRESS(x) +#endif // _MSC_VER +#endif // __clang__ + +#if defined(__clang__) || defined(__GNUC__) +#define GSL_LIKELY(x) __builtin_expect(!!(x), 1) +#define GSL_UNLIKELY(x) __builtin_expect(!!(x), 0) + +#else + +#define GSL_LIKELY(x) (!!(x)) +#define GSL_UNLIKELY(x) (!!(x)) +#endif // defined(__clang__) || defined(__GNUC__) + +// +// GSL_ASSUME(cond) +// +// Tell the optimizer that the predicate cond must hold. It is unspecified +// whether or not cond is actually evaluated. +// +#ifdef _MSC_VER +#define GSL_ASSUME(cond) __assume(cond) +#elif defined(__GNUC__) +#define GSL_ASSUME(cond) ((cond) ? static_cast(0) : __builtin_unreachable()) +#else +#define GSL_ASSUME(cond) static_cast((cond) ? 0 : 0) +#endif + +// +// GSL.assert: assertions +// + +namespace gsl +{ + +namespace details +{ +#if defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND) + + typedef void(__cdecl* terminate_handler)(); + + // clang-format off + GSL_SUPPRESS(f.6) // NO-FORMAT: attribute + // clang-format on + [[noreturn]] inline void __cdecl default_terminate_handler() + { + __fastfail(RANGE_CHECKS_FAILURE); + } + + inline gsl::details::terminate_handler& get_terminate_handler() noexcept + { + static terminate_handler handler = &default_terminate_handler; + return handler; + } + +#endif // defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND) + + [[noreturn]] inline void terminate() noexcept + { +#if defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND) + (*gsl::details::get_terminate_handler())(); +#else + std::terminate(); +#endif // defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND) + } + +} // namespace details +} // namespace gsl + +#define GSL_CONTRACT_CHECK(type, cond) \ + (GSL_LIKELY(cond) ? static_cast(0) : gsl::details::terminate()) + +#define Expects(cond) GSL_CONTRACT_CHECK("Precondition", cond) +#define Ensures(cond) GSL_CONTRACT_CHECK("Postcondition", cond) + +#if defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND) && defined(__clang__) +#pragma clang diagnostic pop +#endif + +#endif // GSL_ASSERT_H diff --git a/deps/GSL/include/gsl/byte b/deps/GSL/include/gsl/byte new file mode 100644 index 0000000..dc4b742 --- /dev/null +++ b/deps/GSL/include/gsl/byte @@ -0,0 +1,188 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef GSL_BYTE_H +#define GSL_BYTE_H + +#include + +// VS2017 15.8 added support for the __cpp_lib_byte definition +// To do: drop _HAS_STD_BYTE when support for pre 15.8 expires +#ifdef _MSC_VER + +#pragma warning(push) + +// Turn MSVC /analyze rules that generate too much noise. TODO: fix in the tool. +#pragma warning(disable : 26493) // don't use c-style casts // TODO: MSVC suppression in templates + // does not always work + +#ifndef GSL_USE_STD_BYTE +// this tests if we are under MSVC and the standard lib has std::byte and it is enabled +#if (defined(_HAS_STD_BYTE) && _HAS_STD_BYTE) || \ + (defined(__cpp_lib_byte) && __cpp_lib_byte >= 201603) + +#define GSL_USE_STD_BYTE 1 + +#else // (defined(_HAS_STD_BYTE) && _HAS_STD_BYTE) || (defined(__cpp_lib_byte) && __cpp_lib_byte >= + // 201603) + +#define GSL_USE_STD_BYTE 0 + +#endif // (defined(_HAS_STD_BYTE) && _HAS_STD_BYTE) || (defined(__cpp_lib_byte) && __cpp_lib_byte >= + // 201603) +#endif // GSL_USE_STD_BYTE + +#else // _MSC_VER + +#ifndef GSL_USE_STD_BYTE +#include /* __cpp_lib_byte */ +// this tests if we are under GCC or Clang with enough -std=c++1z power to get us std::byte +// also check if libc++ version is sufficient (> 5.0) or libstdc++ actually contains std::byte +#if defined(__cplusplus) && (__cplusplus >= 201703L) && \ + (defined(__cpp_lib_byte) && (__cpp_lib_byte >= 201603) || \ + defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION >= 5000)) + +#define GSL_USE_STD_BYTE 1 + +#else // defined(__cplusplus) && (__cplusplus >= 201703L) && + // (defined(__cpp_lib_byte) && (__cpp_lib_byte >= 201603) || + // defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION >= 5000)) + +#define GSL_USE_STD_BYTE 0 + +#endif // defined(__cplusplus) && (__cplusplus >= 201703L) && + // (defined(__cpp_lib_byte) && (__cpp_lib_byte >= 201603) || + // defined(_LIBCPP_VERSION) && (_LIBCPP_VERSION >= 5000)) +#endif // GSL_USE_STD_BYTE + +#endif // _MSC_VER + +// Use __may_alias__ attribute on gcc and clang +#if defined __clang__ || (defined(__GNUC__) && __GNUC__ > 5) +#define byte_may_alias __attribute__((__may_alias__)) +#else // defined __clang__ || defined __GNUC__ +#define byte_may_alias +#endif // defined __clang__ || defined __GNUC__ + +#if GSL_USE_STD_BYTE +#include +#endif + +namespace gsl +{ +#if GSL_USE_STD_BYTE + +using std::byte; +using std::to_integer; + +#else // GSL_USE_STD_BYTE + +// This is a simple definition for now that allows +// use of byte within span<> to be standards-compliant +enum class byte_may_alias byte : unsigned char +{ +}; + +template ::value>> +constexpr byte& operator<<=(byte& b, IntegerType shift) noexcept +{ + return b = byte(static_cast(b) << shift); +} + +template ::value>> +constexpr byte operator<<(byte b, IntegerType shift) noexcept +{ + return byte(static_cast(b) << shift); +} + +template ::value>> +constexpr byte& operator>>=(byte& b, IntegerType shift) noexcept +{ + return b = byte(static_cast(b) >> shift); +} + +template ::value>> +constexpr byte operator>>(byte b, IntegerType shift) noexcept +{ + return byte(static_cast(b) >> shift); +} + +constexpr byte& operator|=(byte& l, byte r) noexcept +{ + return l = byte(static_cast(l) | static_cast(r)); +} + +constexpr byte operator|(byte l, byte r) noexcept +{ + return byte(static_cast(l) | static_cast(r)); +} + +constexpr byte& operator&=(byte& l, byte r) noexcept +{ + return l = byte(static_cast(l) & static_cast(r)); +} + +constexpr byte operator&(byte l, byte r) noexcept +{ + return byte(static_cast(l) & static_cast(r)); +} + +constexpr byte& operator^=(byte& l, byte r) noexcept +{ + return l = byte(static_cast(l) ^ static_cast(r)); +} + +constexpr byte operator^(byte l, byte r) noexcept +{ + return byte(static_cast(l) ^ static_cast(r)); +} + +constexpr byte operator~(byte b) noexcept { return byte(~static_cast(b)); } + +template ::value>> +constexpr IntegerType to_integer(byte b) noexcept +{ + return static_cast(b); +} + +#endif // GSL_USE_STD_BYTE + +template +// NOTE: need suppression since c++14 does not allow "return {t}" +// GSL_SUPPRESS(type.4) // NO-FORMAT: attribute // TODO: suppression does not work +constexpr byte to_byte(T t) noexcept +{ + static_assert(std::is_same::value, + "gsl::to_byte(t) must be provided an unsigned char, otherwise data loss may occur. " + "If you are calling to_byte with an integer contant use: gsl::to_byte() version."); + return byte(t); +} + +template +constexpr byte to_byte() noexcept +{ + static_assert(I >= 0 && I <= 255, + "gsl::byte only has 8 bits of storage, values must be in range 0-255"); + return static_cast(I); +} + +} // namespace gsl + +#ifdef _MSC_VER +#pragma warning(pop) +#endif // _MSC_VER + +#endif // GSL_BYTE_H diff --git a/deps/GSL/include/gsl/gsl b/deps/GSL/include/gsl/gsl new file mode 100644 index 0000000..9e19140 --- /dev/null +++ b/deps/GSL/include/gsl/gsl @@ -0,0 +1,32 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef GSL_GSL_H +#define GSL_GSL_H + +#include "algorithm" // copy +#include "assert" // Ensures/Expects +#include "byte" // byte +#include "pointers" // owner, not_null +#include "span" // span +#include "zstring" // zstring +#include "util" // finally()/narrow_cast()... + +#ifdef __cpp_exceptions +#include "narrow" // narrow() +#endif + +#endif // GSL_GSL_H diff --git a/deps/GSL/include/gsl/narrow b/deps/GSL/include/gsl/narrow new file mode 100644 index 0000000..14db3d9 --- /dev/null +++ b/deps/GSL/include/gsl/narrow @@ -0,0 +1,84 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef GSL_NARROW_H +#define GSL_NARROW_H +#include "assert" // for GSL_SUPPRESS +#include "util" // for narrow_cast +#include // for std::exception +namespace gsl +{ +struct narrowing_error : public std::exception +{ + const char* what() const noexcept override { return "narrowing_error"; } +}; + +// narrow() : a checked version of narrow_cast() that throws if the cast changed the value +template ::value>::type* = nullptr> +// clang-format off +GSL_SUPPRESS(type.1) // NO-FORMAT: attribute +GSL_SUPPRESS(f.6) // NO-FORMAT: attribute // TODO: MSVC /analyze does not recognise noexcept(false) +GSL_SUPPRESS(es.46) // NO-FORMAT: attribute // The warning suggests that a floating->unsigned conversion can occur + // in the static_cast below, and that gsl::narrow should be used instead. + // Suppress this warning, since gsl::narrow is defined in terms of + // static_cast + // clang-format on + constexpr T narrow(U u) noexcept(false) +{ + constexpr const bool is_different_signedness = + (std::is_signed::value != std::is_signed::value); + +GSL_SUPPRESS(es.103) // NO-FORMAT: attribute // don't overflow +GSL_SUPPRESS(es.104) // NO-FORMAT: attribute // don't underflow +GSL_SUPPRESS(p.2) // NO-FORMAT: attribute // don't rely on undefined behavior + const T t = narrow_cast(u); // While this is technically undefined behavior in some cases (i.e., if the source value is of floating-point type + // and cannot fit into the destination integral type), the resultant behavior is benign on the platforms + // that we target (i.e., no hardware trap representations are hit). + +#if defined(__clang__) || defined(__GNUC__) + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wfloat-equal" +#endif + // Note: NaN will always throw, since NaN != NaN + if (static_cast(t) != u || (is_different_signedness && ((t < T{}) != (u < U{})))) + { + throw narrowing_error{}; + } +#if defined(__clang__) || defined(__GNUC__) + #pragma GCC diagnostic pop +#endif + + return t; +} + +template ::value>::type* = nullptr> +// clang-format off +GSL_SUPPRESS(type.1) // NO-FORMAT: attribute +GSL_SUPPRESS(f.6) // NO-FORMAT: attribute // TODO: MSVC /analyze does not recognise noexcept(false) + // clang-format on + constexpr T narrow(U u) noexcept(false) +{ + const T t = narrow_cast(u); + + if (static_cast(t) != u) + { + throw narrowing_error{}; + } + + return t; +} +} // namespace gsl +#endif // GSL_NARROW_H diff --git a/deps/GSL/include/gsl/pointers b/deps/GSL/include/gsl/pointers new file mode 100644 index 0000000..8cd4eb5 --- /dev/null +++ b/deps/GSL/include/gsl/pointers @@ -0,0 +1,348 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef GSL_POINTERS_H +#define GSL_POINTERS_H + +#include "assert" // for Ensures, Expects + +#include // for forward +#include // for ptrdiff_t, nullptr_t, size_t +#include // for shared_ptr, unique_ptr +#include // for hash +#include // for enable_if_t, is_convertible, is_assignable +#include // for declval + +#if !defined(GSL_NO_IOSTREAMS) +#include // for ostream +#endif // !defined(GSL_NO_IOSTREAMS) + +namespace gsl +{ + +namespace details +{ + template + struct is_comparable_to_nullptr : std::false_type + { + }; + + template + struct is_comparable_to_nullptr< + T, + std::enable_if_t() != nullptr), bool>::value>> + : std::true_type + { + }; + + // Resolves to the more efficient of `const T` or `const T&`, in the context of returning a const-qualified value + // of type T. + // + // Copied from cppfront's implementation of the CppCoreGuidelines F.16 (https://isocpp.github.io/CppCoreGuidelines/CppCoreGuidelines#Rf-in) + template + using value_or_reference_return_t = std::conditional_t< + sizeof(T) < 2*sizeof(void*) && std::is_trivially_copy_constructible::value, + const T, + const T&>; + +} // namespace details + +// +// GSL.owner: ownership pointers +// +using std::shared_ptr; +using std::unique_ptr; + +// +// owner +// +// `gsl::owner` is designed as a safety mechanism for code that must deal directly with raw pointers that own memory. +// Ideally such code should be restricted to the implementation of low-level abstractions. `gsl::owner` can also be used +// as a stepping point in converting legacy code to use more modern RAII constructs, such as smart pointers. +// +// T must be a pointer type +// - disallow construction from any type other than pointer type +// +template ::value>> +using owner = T; + +// +// not_null +// +// Restricts a pointer or smart pointer to only hold non-null values. +// +// Has zero size overhead over T. +// +// If T is a pointer (i.e. T == U*) then +// - allow construction from U* +// - disallow construction from nullptr_t +// - disallow default construction +// - ensure construction from null U* fails +// - allow implicit conversion to U* +// +template +class not_null +{ +public: + static_assert(details::is_comparable_to_nullptr::value, "T cannot be compared to nullptr."); + + template ::value>> + constexpr not_null(U&& u) : ptr_(std::forward(u)) + { + Expects(ptr_ != nullptr); + } + + template ::value>> + constexpr not_null(T u) : ptr_(std::move(u)) + { + Expects(ptr_ != nullptr); + } + + template ::value>> + constexpr not_null(const not_null& other) : not_null(other.get()) + {} + + not_null(const not_null& other) = default; + not_null& operator=(const not_null& other) = default; + constexpr details::value_or_reference_return_t get() const + noexcept(noexcept(details::value_or_reference_return_t{std::declval()})) + { + return ptr_; + } + + constexpr operator T() const { return get(); } + constexpr decltype(auto) operator->() const { return get(); } + constexpr decltype(auto) operator*() const { return *get(); } + + // prevents compilation when someone attempts to assign a null pointer constant + not_null(std::nullptr_t) = delete; + not_null& operator=(std::nullptr_t) = delete; + + // unwanted operators...pointers only point to single objects! + not_null& operator++() = delete; + not_null& operator--() = delete; + not_null operator++(int) = delete; + not_null operator--(int) = delete; + not_null& operator+=(std::ptrdiff_t) = delete; + not_null& operator-=(std::ptrdiff_t) = delete; + void operator[](std::ptrdiff_t) const = delete; + +private: + T ptr_; +}; + +template +auto make_not_null(T&& t) noexcept +{ + return not_null>>{std::forward(t)}; +} + +#if !defined(GSL_NO_IOSTREAMS) +template +std::ostream& operator<<(std::ostream& os, const not_null& val) +{ + os << val.get(); + return os; +} +#endif // !defined(GSL_NO_IOSTREAMS) + +template +auto operator==(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(lhs.get() == rhs.get())) + -> decltype(lhs.get() == rhs.get()) +{ + return lhs.get() == rhs.get(); +} + +template +auto operator!=(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(lhs.get() != rhs.get())) + -> decltype(lhs.get() != rhs.get()) +{ + return lhs.get() != rhs.get(); +} + +template +auto operator<(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(std::less<>{}(lhs.get(), rhs.get()))) + -> decltype(std::less<>{}(lhs.get(), rhs.get())) +{ + return std::less<>{}(lhs.get(), rhs.get()); +} + +template +auto operator<=(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(std::less_equal<>{}(lhs.get(), rhs.get()))) + -> decltype(std::less_equal<>{}(lhs.get(), rhs.get())) +{ + return std::less_equal<>{}(lhs.get(), rhs.get()); +} + +template +auto operator>(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(std::greater<>{}(lhs.get(), rhs.get()))) + -> decltype(std::greater<>{}(lhs.get(), rhs.get())) +{ + return std::greater<>{}(lhs.get(), rhs.get()); +} + +template +auto operator>=(const not_null& lhs, + const not_null& rhs) noexcept(noexcept(std::greater_equal<>{}(lhs.get(), rhs.get()))) + -> decltype(std::greater_equal<>{}(lhs.get(), rhs.get())) +{ + return std::greater_equal<>{}(lhs.get(), rhs.get()); +} + +// more unwanted operators +template +std::ptrdiff_t operator-(const not_null&, const not_null&) = delete; +template +not_null operator-(const not_null&, std::ptrdiff_t) = delete; +template +not_null operator+(const not_null&, std::ptrdiff_t) = delete; +template +not_null operator+(std::ptrdiff_t, const not_null&) = delete; + + +template ().get()), bool = std::is_default_constructible>::value> +struct not_null_hash +{ + std::size_t operator()(const T& value) const { return std::hash{}(value.get()); } +}; + +template +struct not_null_hash +{ + not_null_hash() = delete; + not_null_hash(const not_null_hash&) = delete; + not_null_hash& operator=(const not_null_hash&) = delete; +}; + +} // namespace gsl + +namespace std +{ +template +struct hash> : gsl::not_null_hash> +{ +}; + +} // namespace std + +namespace gsl +{ + +// +// strict_not_null +// +// Restricts a pointer or smart pointer to only hold non-null values, +// +// - provides a strict (i.e. explicit constructor from T) wrapper of not_null +// - to be used for new code that wishes the design to be cleaner and make not_null +// checks intentional, or in old code that would like to make the transition. +// +// To make the transition from not_null, incrementally replace not_null +// by strict_not_null and fix compilation errors +// +// Expect to +// - remove all unneeded conversions from raw pointer to not_null and back +// - make API clear by specifying not_null in parameters where needed +// - remove unnecessary asserts +// +template +class strict_not_null : public not_null +{ +public: + template ::value>> + constexpr explicit strict_not_null(U&& u) : not_null(std::forward(u)) + {} + + template ::value>> + constexpr explicit strict_not_null(T u) : not_null(u) + {} + + template ::value>> + constexpr strict_not_null(const not_null& other) : not_null(other) + {} + + template ::value>> + constexpr strict_not_null(const strict_not_null& other) : not_null(other) + {} + + // To avoid invalidating the "not null" invariant, the contained pointer is actually copied + // instead of moved. If it is a custom pointer, its constructor could in theory throw exceptions. + strict_not_null(strict_not_null&& other) noexcept(std::is_nothrow_copy_constructible::value) = default; + strict_not_null(const strict_not_null& other) = default; + strict_not_null& operator=(const strict_not_null& other) = default; + strict_not_null& operator=(const not_null& other) + { + not_null::operator=(other); + return *this; + } + + // prevents compilation when someone attempts to assign a null pointer constant + strict_not_null(std::nullptr_t) = delete; + strict_not_null& operator=(std::nullptr_t) = delete; + + // unwanted operators...pointers only point to single objects! + strict_not_null& operator++() = delete; + strict_not_null& operator--() = delete; + strict_not_null operator++(int) = delete; + strict_not_null operator--(int) = delete; + strict_not_null& operator+=(std::ptrdiff_t) = delete; + strict_not_null& operator-=(std::ptrdiff_t) = delete; + void operator[](std::ptrdiff_t) const = delete; +}; + +// more unwanted operators +template +std::ptrdiff_t operator-(const strict_not_null&, const strict_not_null&) = delete; +template +strict_not_null operator-(const strict_not_null&, std::ptrdiff_t) = delete; +template +strict_not_null operator+(const strict_not_null&, std::ptrdiff_t) = delete; +template +strict_not_null operator+(std::ptrdiff_t, const strict_not_null&) = delete; + +template +auto make_strict_not_null(T&& t) noexcept +{ + return strict_not_null>>{std::forward(t)}; +} + +#if (defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L)) + +// deduction guides to prevent the ctad-maybe-unsupported warning +template +not_null(T) -> not_null; +template +strict_not_null(T) -> strict_not_null; + +#endif // ( defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L) ) + +} // namespace gsl + +namespace std +{ +template +struct hash> : gsl::not_null_hash> +{ +}; + +} // namespace std + +#endif // GSL_POINTERS_H diff --git a/deps/GSL/include/gsl/span b/deps/GSL/include/gsl/span new file mode 100644 index 0000000..3f82a5e --- /dev/null +++ b/deps/GSL/include/gsl/span @@ -0,0 +1,849 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef GSL_SPAN_H +#define GSL_SPAN_H + +#include "assert" // for Expects +#include "byte" // for byte +#include "span_ext" // for span specialization of gsl::at and other span-related extensions +#include "util" // for narrow_cast + +#include // for array +#include // for ptrdiff_t, size_t, nullptr_t +#include // for reverse_iterator, distance, random_access_... +#include // for pointer_traits +#include // for enable_if_t, declval, is_convertible, inte... + +#if defined(__has_include) && __has_include() +#include +#endif + +#if defined(_MSC_VER) && !defined(__clang__) +#pragma warning(push) + +// turn off some warnings that are noisy about our Expects statements +#pragma warning(disable : 4127) // conditional expression is constant +#pragma warning( \ + disable : 4146) // unary minus operator applied to unsigned type, result still unsigned +#pragma warning(disable : 4702) // unreachable code + +// Turn MSVC /analyze rules that generate too much noise. TODO: fix in the tool. +#pragma warning(disable : 26495) // uninitalized member when constructor calls constructor +#pragma warning(disable : 26446) // parser bug does not allow attributes on some templates + +#endif // _MSC_VER + +// See if we have enough C++17 power to use a static constexpr data member +// without needing an out-of-line definition +#if !(defined(__cplusplus) && (__cplusplus >= 201703L)) +#define GSL_USE_STATIC_CONSTEXPR_WORKAROUND +#endif // !(defined(__cplusplus) && (__cplusplus >= 201703L)) + +// GCC 7 does not like the signed unsigned missmatch (size_t ptrdiff_t) +// While there is a conversion from signed to unsigned, it happens at +// compiletime, so the compiler wouldn't have to warn indiscriminately, but +// could check if the source value actually doesn't fit into the target type +// and only warn in those cases. +#if defined(__GNUC__) && __GNUC__ > 6 +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#endif + +namespace gsl +{ + +// implementation details +namespace details +{ + template + struct is_span_oracle : std::false_type + { + }; + + template + struct is_span_oracle> : std::true_type + { + }; + + template + struct is_span : public is_span_oracle> + { + }; + + template + struct is_std_array_oracle : std::false_type + { + }; + + template + struct is_std_array_oracle> : std::true_type + { + }; + + template + struct is_std_array : is_std_array_oracle> + { + }; + + template + struct is_allowed_extent_conversion + : std::integral_constant + { + }; + + template + struct is_allowed_element_type_conversion + : std::integral_constant::value> + { + }; + + template + class span_iterator + { + public: +#if defined(__cpp_lib_ranges) || (defined(_MSVC_STL_VERSION) && defined(__cpp_lib_concepts)) + using iterator_concept = std::contiguous_iterator_tag; +#endif // __cpp_lib_ranges + using iterator_category = std::random_access_iterator_tag; + using value_type = std::remove_cv_t; + using difference_type = std::ptrdiff_t; + using pointer = Type*; + using reference = Type&; + +#ifdef _MSC_VER + using _Unchecked_type = pointer; + using _Prevent_inheriting_unwrap = span_iterator; +#endif // _MSC_VER + constexpr span_iterator() = default; + + constexpr span_iterator(pointer begin, pointer end, pointer current) + : begin_(begin), end_(end), current_(current) + {} + + constexpr operator span_iterator() const noexcept + { + return {begin_, end_, current_}; + } + + constexpr reference operator*() const noexcept + { + Expects(begin_ && end_); + Expects(begin_ <= current_ && current_ < end_); + return *current_; + } + + constexpr pointer operator->() const noexcept + { + Expects(begin_ && end_); + Expects(begin_ <= current_ && current_ < end_); + return current_; + } + constexpr span_iterator& operator++() noexcept + { + Expects(begin_ && current_ && end_); + Expects(current_ < end_); + // clang-format off + GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + ++current_; + return *this; + } + + constexpr span_iterator operator++(int) noexcept + { + span_iterator ret = *this; + ++*this; + return ret; + } + + constexpr span_iterator& operator--() noexcept + { + Expects(begin_ && end_); + Expects(begin_ < current_); + --current_; + return *this; + } + + constexpr span_iterator operator--(int) noexcept + { + span_iterator ret = *this; + --*this; + return ret; + } + + constexpr span_iterator& operator+=(const difference_type n) noexcept + { + if (n != 0) Expects(begin_ && current_ && end_); + if (n > 0) Expects(end_ - current_ >= n); + if (n < 0) Expects(current_ - begin_ >= -n); + // clang-format off + GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + current_ += n; + return *this; + } + + constexpr span_iterator operator+(const difference_type n) const noexcept + { + span_iterator ret = *this; + ret += n; + return ret; + } + + friend constexpr span_iterator operator+(const difference_type n, + const span_iterator& rhs) noexcept + { + return rhs + n; + } + + constexpr span_iterator& operator-=(const difference_type n) noexcept + { + if (n != 0) Expects(begin_ && current_ && end_); + if (n > 0) Expects(current_ - begin_ >= n); + if (n < 0) Expects(end_ - current_ >= -n); + GSL_SUPPRESS(bounds .1) + current_ -= n; + return *this; + } + + constexpr span_iterator operator-(const difference_type n) const noexcept + { + span_iterator ret = *this; + ret -= n; + return ret; + } + + template < + class Type2, + std::enable_if_t, value_type>::value, int> = 0> + constexpr difference_type operator-(const span_iterator& rhs) const noexcept + { + Expects(begin_ == rhs.begin_ && end_ == rhs.end_); + return current_ - rhs.current_; + } + + constexpr reference operator[](const difference_type n) const noexcept + { + return *(*this + n); + } + + template < + class Type2, + std::enable_if_t, value_type>::value, int> = 0> + constexpr bool operator==(const span_iterator& rhs) const noexcept + { + Expects(begin_ == rhs.begin_ && end_ == rhs.end_); + return current_ == rhs.current_; + } + + template < + class Type2, + std::enable_if_t, value_type>::value, int> = 0> + constexpr bool operator!=(const span_iterator& rhs) const noexcept + { + return !(*this == rhs); + } + + template < + class Type2, + std::enable_if_t, value_type>::value, int> = 0> + constexpr bool operator<(const span_iterator& rhs) const noexcept + { + Expects(begin_ == rhs.begin_ && end_ == rhs.end_); + return current_ < rhs.current_; + } + + template < + class Type2, + std::enable_if_t, value_type>::value, int> = 0> + constexpr bool operator>(const span_iterator& rhs) const noexcept + { + return rhs < *this; + } + + template < + class Type2, + std::enable_if_t, value_type>::value, int> = 0> + constexpr bool operator<=(const span_iterator& rhs) const noexcept + { + return !(rhs < *this); + } + + template < + class Type2, + std::enable_if_t, value_type>::value, int> = 0> + constexpr bool operator>=(const span_iterator& rhs) const noexcept + { + return !(*this < rhs); + } + +#ifdef _MSC_VER + // MSVC++ iterator debugging support; allows STL algorithms in 15.8+ + // to unwrap span_iterator to a pointer type after a range check in STL + // algorithm calls + friend constexpr void _Verify_range(span_iterator lhs, span_iterator rhs) noexcept + { // test that [lhs, rhs) forms a valid range inside an STL algorithm + Expects(lhs.begin_ == rhs.begin_ // range spans have to match + && lhs.end_ == rhs.end_ && + lhs.current_ <= rhs.current_); // range must not be transposed + } + + constexpr void _Verify_offset(const difference_type n) const noexcept + { // test that *this + n is within the range of this call + if (n != 0) Expects(begin_ && current_ && end_); + if (n > 0) Expects(end_ - current_ >= n); + if (n < 0) Expects(current_ - begin_ >= -n); + } + + // clang-format off + GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + constexpr pointer _Unwrapped() const noexcept + { // after seeking *this to a high water mark, or using one of the + // _Verify_xxx functions above, unwrap this span_iterator to a raw + // pointer + return current_; + } + + // Tell the STL that span_iterator should not be unwrapped if it can't + // validate in advance, even in release / optimized builds: +#if defined(GSL_USE_STATIC_CONSTEXPR_WORKAROUND) + static constexpr const bool _Unwrap_when_unverified = false; +#else + static constexpr bool _Unwrap_when_unverified = false; +#endif + // clang-format off + GSL_SUPPRESS(con.3) // NO-FORMAT: attribute // TODO: false positive + // clang-format on + constexpr void _Seek_to(const pointer p) noexcept + { // adjust the position of *this to previously verified location p + // after _Unwrapped + current_ = p; + } +#endif + + pointer begin_ = nullptr; + pointer end_ = nullptr; + pointer current_ = nullptr; + + template + friend struct std::pointer_traits; + }; +}} // namespace gsl::details + +namespace std +{ +template +struct pointer_traits<::gsl::details::span_iterator> +{ + using pointer = ::gsl::details::span_iterator; + using element_type = Type; + using difference_type = ptrdiff_t; + + static constexpr element_type* to_address(const pointer i) noexcept { return i.current_; } +}; +} // namespace std + +namespace gsl { namespace details { + template + class extent_type + { + public: + using size_type = std::size_t; + + constexpr extent_type() noexcept = default; + + constexpr explicit extent_type(extent_type); + + constexpr explicit extent_type(size_type size) { Expects(size == Ext); } + + constexpr size_type size() const noexcept { return Ext; } + + private: +#if defined(GSL_USE_STATIC_CONSTEXPR_WORKAROUND) + static constexpr const size_type size_ = Ext; // static size equal to Ext +#else + static constexpr size_type size_ = Ext; // static size equal to Ext +#endif + }; + + template <> + class extent_type + { + public: + using size_type = std::size_t; + + template + constexpr explicit extent_type(extent_type ext) : size_(ext.size()) + {} + + constexpr explicit extent_type(size_type size) : size_(size) + { + Expects(size != dynamic_extent); + } + + constexpr size_type size() const noexcept { return size_; } + + private: + size_type size_; + }; + + template + constexpr extent_type::extent_type(extent_type ext) + { + Expects(ext.size() == Ext); + } + + template + struct calculate_subspan_type + { + using type = span; + }; +} // namespace details + +// [span], class template span +template +class span +{ +public: + // constants and types + using element_type = ElementType; + using value_type = std::remove_cv_t; + using size_type = std::size_t; + using pointer = element_type*; + using const_pointer = const element_type*; + using reference = element_type&; + using const_reference = const element_type&; + using difference_type = std::ptrdiff_t; + + using iterator = details::span_iterator; + using reverse_iterator = std::reverse_iterator; + +#if defined(GSL_USE_STATIC_CONSTEXPR_WORKAROUND) + static constexpr const size_type extent{Extent}; +#else + static constexpr size_type extent{Extent}; +#endif + + // [span.cons], span constructors, copy, assignment, and destructor + template " SFINAE, since "std::enable_if_t" is ill-formed when Extent is greater than 0. + class = std::enable_if_t<(Dependent || + details::is_allowed_extent_conversion<0, Extent>::value)>> + constexpr span() noexcept : storage_(nullptr, details::extent_type<0>()) + {} + + template = 0> + constexpr explicit span(pointer ptr, size_type count) noexcept : storage_(ptr, count) + { + Expects(count == Extent); + } + + template = 0> + constexpr span(pointer ptr, size_type count) noexcept : storage_(ptr, count) + {} + + template = 0> + constexpr explicit span(pointer firstElem, pointer lastElem) noexcept + : storage_(firstElem, narrow_cast(lastElem - firstElem)) + { + Expects(lastElem - firstElem == static_cast(Extent)); + } + + template = 0> + constexpr span(pointer firstElem, pointer lastElem) noexcept + : storage_(firstElem, narrow_cast(lastElem - firstElem)) + {} + + template ::value, int> = 0> + constexpr span(element_type (&arr)[N]) noexcept + : storage_(KnownNotNull{arr}, details::extent_type()) + {} + + template < + class T, std::size_t N, + std::enable_if_t<(details::is_allowed_extent_conversion::value && + details::is_allowed_element_type_conversion::value), + int> = 0> + constexpr span(std::array& arr) noexcept + : storage_(KnownNotNull{arr.data()}, details::extent_type()) + {} + + template ::value && + details::is_allowed_element_type_conversion::value), + int> = 0> + constexpr span(const std::array& arr) noexcept + : storage_(KnownNotNull{arr.data()}, details::extent_type()) + {} + + // NB: the SFINAE on these constructors uses .data() as an incomplete/imperfect proxy for the + // requirement on Container to be a contiguous sequence container. + template ::value && + !details::is_std_array::value && + std::is_pointer().data())>::value && + std::is_convertible< + std::remove_pointer_t().data())> (*)[], + element_type (*)[]>::value, + int> = 0> + constexpr explicit span(Container& cont) noexcept : span(cont.data(), cont.size()) + {} + + template ::value && + !details::is_std_array::value && + std::is_pointer().data())>::value && + std::is_convertible< + std::remove_pointer_t().data())> (*)[], + element_type (*)[]>::value, + int> = 0> + constexpr span(Container& cont) noexcept : span(cont.data(), cont.size()) + {} + + template < + std::size_t MyExtent = Extent, class Container, + std::enable_if_t< + MyExtent != dynamic_extent && std::is_const::value && + !details::is_span::value && !details::is_std_array::value && + std::is_pointer().data())>::value && + std::is_convertible< + std::remove_pointer_t().data())> (*)[], + element_type (*)[]>::value, + int> = 0> + constexpr explicit span(const Container& cont) noexcept : span(cont.data(), cont.size()) + {} + + template < + std::size_t MyExtent = Extent, class Container, + std::enable_if_t< + MyExtent == dynamic_extent && std::is_const::value && + !details::is_span::value && !details::is_std_array::value && + std::is_pointer().data())>::value && + std::is_convertible< + std::remove_pointer_t().data())> (*)[], + element_type (*)[]>::value, + int> = 0> + constexpr span(const Container& cont) noexcept : span(cont.data(), cont.size()) + {} + + constexpr span(const span& other) noexcept = default; + + template ::value, + int> = 0> + constexpr span(const span& other) noexcept + : storage_(other.data(), details::extent_type(other.size())) + {} + + template ::value, + int> = 0> + constexpr explicit span(const span& other) noexcept + : storage_(other.data(), details::extent_type(other.size())) + {} + + ~span() noexcept = default; + constexpr span& operator=(const span& other) noexcept = default; + + // [span.sub], span subviews + template + constexpr span first() const noexcept + { + Expects(Count <= size()); + return span{data(), Count}; + } + + template + // clang-format off + GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + constexpr span last() const noexcept + { + Expects(Count <= size()); + return span{data() + (size() - Count), Count}; + } + + template + // clang-format off + GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + constexpr auto subspan() const noexcept -> + typename details::calculate_subspan_type::type + { + Expects((size() >= Offset) && (Count == dynamic_extent || (Count <= size() - Offset))); + using type = + typename details::calculate_subspan_type::type; + return type{data() + Offset, Count == dynamic_extent ? size() - Offset : Count}; + } + + constexpr span first(size_type count) const noexcept + { + Expects(count <= size()); + return {data(), count}; + } + + constexpr span last(size_type count) const noexcept + { + Expects(count <= size()); + return make_subspan(size() - count, dynamic_extent, subspan_selector{}); + } + + constexpr span + subspan(size_type offset, size_type count = dynamic_extent) const noexcept + { + return make_subspan(offset, count, subspan_selector{}); + } + + // [span.obs], span observers + constexpr size_type size() const noexcept { return storage_.size(); } + + constexpr size_type size_bytes() const noexcept { return size() * sizeof(element_type); } + + constexpr bool empty() const noexcept { return size() == 0; } + + // [span.elem], span element access + // clang-format off + GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + constexpr reference operator[](size_type idx) const noexcept + { + Expects(idx < size()); + return data()[idx]; + } + + constexpr reference front() const noexcept + { + Expects(size() > 0); + return data()[0]; + } + + constexpr reference back() const noexcept + { + Expects(size() > 0); + return data()[size() - 1]; + } + + constexpr pointer data() const noexcept { return storage_.data(); } + + // [span.iter], span iterator support + constexpr iterator begin() const noexcept + { + const auto data = storage_.data(); + // clang-format off + GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + return {data, data + size(), data}; + } + + constexpr iterator end() const noexcept + { + const auto data = storage_.data(); + // clang-format off + GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + const auto endData = data + storage_.size(); + return {data, endData, endData}; + } + + constexpr reverse_iterator rbegin() const noexcept { return reverse_iterator{end()}; } + constexpr reverse_iterator rend() const noexcept { return reverse_iterator{begin()}; } + +#ifdef _MSC_VER + // Tell MSVC how to unwrap spans in range-based-for + constexpr pointer _Unchecked_begin() const noexcept { return data(); } + constexpr pointer _Unchecked_end() const noexcept + { + // clang-format off + GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + return data() + size(); + } +#endif // _MSC_VER + +private: + // Needed to remove unnecessary null check in subspans + struct KnownNotNull + { + pointer p; + }; + + // this implementation detail class lets us take advantage of the + // empty base class optimization to pay for only storage of a single + // pointer in the case of fixed-size spans + template + class storage_type : public ExtentType + { + public: + // KnownNotNull parameter is needed to remove unnecessary null check + // in subspans and constructors from arrays + template + constexpr storage_type(KnownNotNull data, OtherExtentType ext) + : ExtentType(ext), data_(data.p) + {} + + template + constexpr storage_type(pointer data, OtherExtentType ext) : ExtentType(ext), data_(data) + { + Expects(data || ExtentType::size() == 0); + } + + constexpr pointer data() const noexcept { return data_; } + + private: + pointer data_; + }; + + storage_type> storage_; + + // The rest is needed to remove unnecessary null check + // in subspans and constructors from arrays + constexpr span(KnownNotNull ptr, size_type count) noexcept : storage_(ptr, count) {} + + template + class subspan_selector + { + }; + + template + constexpr span + make_subspan(size_type offset, size_type count, subspan_selector) const noexcept + { + const span tmp(*this); + return tmp.subspan(offset, count); + } + + // clang-format off + GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + constexpr span + make_subspan(size_type offset, size_type count, subspan_selector) const noexcept + { + Expects(size() >= offset); + + if (count == dynamic_extent) { return {KnownNotNull{data() + offset}, size() - offset}; } + + Expects(size() - offset >= count); + return {KnownNotNull{data() + offset}, count}; + } +}; + +#if (defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L)) + +// Deduction Guides +template +span(Type (&)[Extent]) -> span; + +template +span(std::array&) -> span; + +template +span(const std::array&) -> span; + +template ().data())>> +span(Container&) -> span; + +template ().data())>> +span(const Container&) -> span; + +#endif // ( defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L) ) + +#if defined(GSL_USE_STATIC_CONSTEXPR_WORKAROUND) +#if defined(__clang__) && defined(_MSC_VER) && defined(__cplusplus) && (__cplusplus < 201703L) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated" // Bug in clang-cl.exe which raises a C++17 -Wdeprecated warning about this static constexpr workaround in C++14 mode. +#endif // defined(__clang__) && defined(_MSC_VER) && defined(__cplusplus) && (__cplusplus < 201703L) +template +constexpr const typename span::size_type span::extent; +#if defined(__clang__) && defined(_MSC_VER) && defined(__cplusplus) && (__cplusplus < 201703L) +#pragma clang diagnostic pop +#endif // defined(__clang__) && defined(_MSC_VER) && defined(__cplusplus) && (__cplusplus < 201703L) +#endif + +namespace details +{ + // if we only supported compilers with good constexpr support then + // this pair of classes could collapse down to a constexpr function + + // we should use a narrow_cast<> to go to std::size_t, but older compilers may not see it as + // constexpr + // and so will fail compilation of the template + template + struct calculate_byte_size : std::integral_constant + { + static_assert(Extent < dynamic_extent / sizeof(ElementType), "Size is too big."); + }; + + template + struct calculate_byte_size + : std::integral_constant + { + }; +} // namespace details + +// [span.objectrep], views of object representation +template +span::value> +as_bytes(span s) noexcept +{ + using type = span::value>; + + // clang-format off + GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + // clang-format on + return type{reinterpret_cast(s.data()), s.size_bytes()}; +} + +template ::value, int> = 0> +span::value> +as_writable_bytes(span s) noexcept +{ + using type = span::value>; + + // clang-format off + GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + // clang-format on + return type{reinterpret_cast(s.data()), s.size_bytes()}; +} + +} // namespace gsl + +#if defined(_MSC_VER) && !defined(__clang__) + +#pragma warning(pop) +#endif // _MSC_VER + +#if defined(__GNUC__) && __GNUC__ > 6 +#pragma GCC diagnostic pop +#endif // __GNUC__ > 6 + +#endif // GSL_SPAN_H diff --git a/deps/GSL/include/gsl/span_ext b/deps/GSL/include/gsl/span_ext new file mode 100644 index 0000000..6873efc --- /dev/null +++ b/deps/GSL/include/gsl/span_ext @@ -0,0 +1,214 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef GSL_SPAN_EXT_H +#define GSL_SPAN_EXT_H + +/////////////////////////////////////////////////////////////////////////////// +// +// File: span_ext +// Purpose: continue offering features that have been cut from the official +// implementation of span. +// While modernizing gsl::span a number of features needed to be removed to +// be compliant with the design of std::span +// +/////////////////////////////////////////////////////////////////////////////// + +#include "assert" // GSL_KERNEL_MODE +#include "util" // for narrow_cast, narrow + +#include // for ptrdiff_t, size_t +#include + +#ifndef GSL_KERNEL_MODE +#include // for lexicographical_compare +#endif // GSL_KERNEL_MODE + +namespace gsl +{ + +// [span.views.constants], constants +GSL_INLINE constexpr const std::size_t dynamic_extent = narrow_cast(-1); + +template +class span; + +// std::equal and std::lexicographical_compare are not /kernel compatible +// so all comparison operators must be removed for kernel mode. +#ifndef GSL_KERNEL_MODE + +// [span.comparison], span comparison operators +template +constexpr bool operator==(span l, span r) +{ + return std::equal(l.begin(), l.end(), r.begin(), r.end()); +} + +template +constexpr bool operator!=(span l, span r) +{ + return !(l == r); +} + +template +constexpr bool operator<(span l, span r) +{ + return std::lexicographical_compare(l.begin(), l.end(), r.begin(), r.end()); +} + +template +constexpr bool operator<=(span l, span r) +{ + return !(l > r); +} + +template +constexpr bool operator>(span l, span r) +{ + return r < l; +} + +template +constexpr bool operator>=(span l, span r) +{ + return !(l < r); +} + +#endif // GSL_KERNEL_MODE + +// +// make_span() - Utility functions for creating spans +// +template +constexpr span make_span(ElementType* ptr, typename span::size_type count) +{ + return span(ptr, count); +} + +template +constexpr span make_span(ElementType* firstElem, ElementType* lastElem) +{ + return span(firstElem, lastElem); +} + +template +constexpr span make_span(ElementType (&arr)[N]) noexcept +{ + return span(arr); +} + +template +constexpr span make_span(Container& cont) +{ + return span(cont); +} + +template +constexpr span make_span(const Container& cont) +{ + return span(cont); +} + +template +[[deprecated("This function is deprecated. See GSL issue #1092.")]] +constexpr span make_span(Ptr& cont, std::size_t count) +{ + return span(cont, count); +} + +template +[[deprecated("This function is deprecated. See GSL issue #1092.")]] +constexpr span make_span(Ptr& cont) +{ + return span(cont); +} + +// Specialization of gsl::at for span +template +constexpr ElementType& at(span s, index i) +{ + // No bounds checking here because it is done in span::operator[] called below + Ensures(i >= 0); + return s[narrow_cast(i)]; +} + +// [span.obs] Free observer functions +template +constexpr std::ptrdiff_t ssize(const span& s) noexcept +{ + return static_cast(s.size()); +} + +// [span.iter] Free functions for begin/end functions +template +constexpr typename span::iterator +begin(const span& s) noexcept +{ + return s.begin(); +} + +template +constexpr typename span::iterator +end(const span& s) noexcept +{ + return s.end(); +} + +template +constexpr typename span::reverse_iterator +rbegin(const span& s) noexcept +{ + return s.rbegin(); +} + +template +constexpr typename span::reverse_iterator +rend(const span& s) noexcept +{ + return s.rend(); +} + +template +constexpr typename span::iterator +cbegin(const span& s) noexcept +{ + return s.begin(); +} + +template +constexpr typename span::iterator +cend(const span& s) noexcept +{ + return s.end(); +} + +template +constexpr typename span::reverse_iterator +crbegin(const span& s) noexcept +{ + return s.rbegin(); +} + +template +constexpr typename span::reverse_iterator +crend(const span& s) noexcept +{ + return s.rend(); +} + +} // namespace gsl + +#endif // GSL_SPAN_EXT_H diff --git a/deps/GSL/include/gsl/string_span b/deps/GSL/include/gsl/string_span new file mode 100644 index 0000000..262d17c --- /dev/null +++ b/deps/GSL/include/gsl/string_span @@ -0,0 +1,4 @@ +#pragma once +#pragma message( \ + "This header will soon be removed. Use instead of ") +#include "zstring" diff --git a/deps/GSL/include/gsl/util b/deps/GSL/include/gsl/util new file mode 100644 index 0000000..71f942d --- /dev/null +++ b/deps/GSL/include/gsl/util @@ -0,0 +1,157 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef GSL_UTIL_H +#define GSL_UTIL_H + +#include "assert" // for Expects + +#include +#include // for ptrdiff_t, size_t +#include // for numeric_limits +#include // for initializer_list +#include // for is_signed, integral_constant +#include // for exchange, forward + +#if defined(__has_include) && __has_include() +#include +#if defined(__cpp_lib_span) && __cpp_lib_span >= 202002L +#include +#endif // __cpp_lib_span >= 202002L +#endif //__has_include() + +#if defined(_MSC_VER) && !defined(__clang__) + +#pragma warning(push) +#pragma warning(disable : 4127) // conditional expression is constant + +#endif // _MSC_VER + +#if defined(__cplusplus) && (__cplusplus >= 201703L) +#define GSL_NODISCARD [[nodiscard]] +#else +#define GSL_NODISCARD +#endif // defined(__cplusplus) && (__cplusplus >= 201703L) + +#if defined(__cpp_inline_variables) +#define GSL_INLINE inline +#else +#define GSL_INLINE +#endif + +namespace gsl +{ +// +// GSL.util: utilities +// + +// index type for all container indexes/subscripts/sizes +using index = std::ptrdiff_t; + +// final_action allows you to ensure something gets run at the end of a scope +template +class final_action +{ +public: + explicit final_action(const F& ff) noexcept : f{ff} { } + explicit final_action(F&& ff) noexcept : f{std::move(ff)} { } + + ~final_action() noexcept { if (invoke) f(); } + + final_action(final_action&& other) noexcept + : f(std::move(other.f)), invoke(std::exchange(other.invoke, false)) + { } + + final_action(const final_action&) = delete; + void operator=(const final_action&) = delete; + void operator=(final_action&&) = delete; + +private: + F f; + bool invoke = true; +}; + +// finally() - convenience function to generate a final_action +template +GSL_NODISCARD auto finally(F&& f) noexcept +{ + return final_action>{std::forward(f)}; +} + +// narrow_cast(): a searchable way to do narrowing casts of values +template +// clang-format off +GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + // clang-format on + constexpr T narrow_cast(U&& u) noexcept +{ + return static_cast(std::forward(u)); +} + +// +// at() - Bounds-checked way of accessing builtin arrays, std::array, std::vector +// +template +// clang-format off +GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute +GSL_SUPPRESS(bounds.2) // NO-FORMAT: attribute + // clang-format on + constexpr T& at(T (&arr)[N], const index i) +{ + static_assert(N <= static_cast((std::numeric_limits::max)()), "We only support arrays up to PTRDIFF_MAX bytes."); + Expects(i >= 0 && i < narrow_cast(N)); + return arr[narrow_cast(i)]; +} + +template +// clang-format off +GSL_SUPPRESS(bounds.4) // NO-FORMAT: attribute +GSL_SUPPRESS(bounds.2) // NO-FORMAT: attribute + // clang-format on + constexpr auto at(Cont& cont, const index i) -> decltype(cont[cont.size()]) +{ + Expects(i >= 0 && i < narrow_cast(cont.size())); + using size_type = decltype(cont.size()); + return cont[narrow_cast(i)]; +} + +template +// clang-format off +GSL_SUPPRESS(bounds.1) // NO-FORMAT: attribute + // clang-format on + constexpr T at(const std::initializer_list cont, const index i) +{ + Expects(i >= 0 && i < narrow_cast(cont.size())); + return *(cont.begin() + i); +} + +#if defined(__cpp_lib_span) && __cpp_lib_span >= 202002L +template +constexpr auto at(std::span sp, const index i) -> decltype(sp[sp.size()]) +{ + Expects(i >= 0 && i < narrow_cast(sp.size())); + return sp[gsl::narrow_cast(i)]; +} +#endif // __cpp_lib_span >= 202002L +} // namespace gsl + +#if defined(_MSC_VER) && !defined(__clang__) + +#pragma warning(pop) + +#endif // _MSC_VER + +#endif // GSL_UTIL_H diff --git a/deps/GSL/include/gsl/zstring b/deps/GSL/include/gsl/zstring new file mode 100644 index 0000000..2cc13d8 --- /dev/null +++ b/deps/GSL/include/gsl/zstring @@ -0,0 +1,58 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#ifndef GSL_ZSTRING_H +#define GSL_ZSTRING_H + +#include "span_ext" // for dynamic_extent + +#include // for size_t, nullptr_t + +namespace gsl +{ +// +// czstring and wzstring +// +// These are "tag" typedefs for C-style strings (i.e. null-terminated character arrays) +// that allow static analysis to help find bugs. +// +// There are no additional features/semantics that we can find a way to add inside the +// type system for these types that will not either incur significant runtime costs or +// (sometimes needlessly) break existing programs when introduced. +// + +template +using basic_zstring = CharT*; + +using czstring = basic_zstring; + +using cwzstring = basic_zstring; + +using cu16zstring = basic_zstring; + +using cu32zstring = basic_zstring; + +using zstring = basic_zstring; + +using wzstring = basic_zstring; + +using u16zstring = basic_zstring; + +using u32zstring = basic_zstring; + +} // namespace gsl + +#endif // GSL_ZSTRING_H diff --git a/deps/GSL/pipelines/jobs.yml b/deps/GSL/pipelines/jobs.yml new file mode 100644 index 0000000..0d6b9eb --- /dev/null +++ b/deps/GSL/pipelines/jobs.yml @@ -0,0 +1,43 @@ +parameters: + CXXVersions: [ 14, 17, 20 ] + buildTypes: [ 'Debug', 'Release' ] + image: '' + + compiler: '' + compilerVersions: ["default"] # if default value, simply uses whatever version is on the machine. + # the text of this default value doesn't actually matter. + setupfile: '' + extraCmakeArgs: '' + +jobs: +- ${{ each compilerVersion in parameters.compilerVersions }}: + - ${{ each CXXVersion in parameters.CXXVersions }}: + - ${{ each buildType in parameters.buildTypes }}: + - job: + displayName: ${{ format('{0} {1} C++{2} {3}', parameters.compiler, compilerVersion, CXXVersion, buildType) }} + pool: + vmImage: ${{ parameters.image }} + continueOnError: false + + steps: + - ${{ if not(eq(parameters.setupfile, '')) }}: + - template: ${{ parameters.setupfile }} + parameters: + version: ${{ compilerVersion }} + + - task: CMake@1 + name: Configure + inputs: + workingDirectory: build + cmakeArgs: '-DGSL_CXX_STANDARD=${{ CXXVersion }} -DCMAKE_BUILD_TYPE=${{ buildType }} -DCI_TESTING:BOOL=ON -DCMAKE_VERBOSE_MAKEFILE:BOOL=ON -Werror=dev ${{ parameters.extraCmakeArgs }} .. ' + + - task: CMake@1 + name: Build + inputs: + workingDirectory: build + cmakeArgs: '--build . ' + + - script: ctest . --output-on-failure --no-compress-output + name: CTest + workingDirectory: build + failOnStderr: true diff --git a/deps/GSL/pipelines/setup_apple.yml b/deps/GSL/pipelines/setup_apple.yml new file mode 100644 index 0000000..6a256a5 --- /dev/null +++ b/deps/GSL/pipelines/setup_apple.yml @@ -0,0 +1,9 @@ +parameters: + version: 0 + +steps: + - script: | + if [ "${{ parameters.version }}" != "default" ]; then sudo xcode-select -switch /Applications/Xcode_${{ parameters.version }}.app; fi + + displayName: "Setup Xcode Version" + failOnStderr: true diff --git a/deps/GSL/pipelines/setup_clang.yml b/deps/GSL/pipelines/setup_clang.yml new file mode 100644 index 0000000..58403b4 --- /dev/null +++ b/deps/GSL/pipelines/setup_clang.yml @@ -0,0 +1,13 @@ +parameters: + version: 0 + +steps: + - script: | + echo "##vso[task.setvariable variable=CXX;]${CXX}" + echo "##vso[task.setvariable variable=CC;]${CC}" + + displayName: "Setup Clang Version" + failOnStderr: true + env: + CC: clang-${{ parameters.version }} + CXX: clang++-${{ parameters.version }} diff --git a/deps/GSL/pipelines/setup_gcc.yml b/deps/GSL/pipelines/setup_gcc.yml new file mode 100644 index 0000000..6480f67 --- /dev/null +++ b/deps/GSL/pipelines/setup_gcc.yml @@ -0,0 +1,14 @@ +parameters: + version: 0 + +steps: + - script: | + echo "##vso[task.setvariable variable=CXX;]${CXX}" + echo "##vso[task.setvariable variable=CC;]${CC}" + if [ "${{ parameters.version }}" = "11" ]; then sudo apt-get install $CXX; fi + + displayName: "Setup GCC Version" + failOnStderr: true + env: + CC: gcc-${{ parameters.version }} + CXX: g++-${{ parameters.version }} diff --git a/deps/GSL/pipelines/steps.yml b/deps/GSL/pipelines/steps.yml new file mode 100644 index 0000000..e69de29 diff --git a/deps/GSL/tests/CMakeLists.txt b/deps/GSL/tests/CMakeLists.txt new file mode 100644 index 0000000..493285c --- /dev/null +++ b/deps/GSL/tests/CMakeLists.txt @@ -0,0 +1,316 @@ +cmake_minimum_required(VERSION 3.14...3.16) + +project(GSLTests LANGUAGES CXX) + +set(GSL_CXX_STANDARD "14" CACHE STRING "Use c++ standard") + +set(CMAKE_CXX_STANDARD ${GSL_CXX_STANDARD}) +set(CMAKE_CXX_EXTENSIONS OFF) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +include(FindPkgConfig) +include(ExternalProject) + +# will make visual studio generated project group files +set_property(GLOBAL PROPERTY USE_FOLDERS ON) + +if(CI_TESTING AND GSL_CXX_STANDARD EQUAL 20) + add_compile_definitions(FORCE_STD_SPAN_TESTS=1) +endif() + +if(IOS) + add_compile_definitions(GTEST_HAS_DEATH_TEST=1 IOS_PROCESS_DELAY_WORKAROUND=1) +endif() + +pkg_search_module(GTestMain gtest_main) +if (NOT GTestMain_FOUND) + # No pre-installed GTest is available, try to download it using Git. + find_package(Git REQUIRED QUIET) + + configure_file(CMakeLists.txt.in googletest-download/CMakeLists.txt) + execute_process( + COMMAND ${CMAKE_COMMAND} -G "${CMAKE_GENERATOR}" . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download + ) + if(result) + message(FATAL_ERROR "CMake step for googletest failed: ${result}") + endif() + + execute_process( + COMMAND ${CMAKE_COMMAND} --build . + RESULT_VARIABLE result + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/googletest-download + ) + if(result) + message(FATAL_ERROR "CMake step for googletest failed: ${result}") + endif() + + set(gtest_force_shared_crt ON CACHE BOOL "" FORCE) + set(GTestMain_LIBRARIES gtest_main) + + add_subdirectory( + ${CMAKE_CURRENT_BINARY_DIR}/googletest-src + ${CMAKE_CURRENT_BINARY_DIR}/googletest-build + EXCLUDE_FROM_ALL + ) +endif() + +if (CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_SOURCE_DIR) + find_package(Microsoft.GSL CONFIG REQUIRED) + enable_testing() + + if (NOT DEFINED Microsoft.GSL_VERSION) + message(FATAL_ERROR "Microsoft.GSL_VERSION not defined!") + endif() + + message(STATUS "Microsoft.GSL_VERSION = ${Microsoft.GSL_VERSION}") +endif() + +if (MSVC AND (GSL_CXX_STANDARD GREATER_EQUAL 17)) + set(GSL_CPLUSPLUS_OPT -Zc:__cplusplus -permissive-) +endif() + +include(CheckCXXCompilerFlag) +# this interface adds compile options to how the tests are run +# please try to keep entries ordered =) +add_library(gsl_tests_config INTERFACE) +if(MSVC) # MSVC or simulating MSVC + target_compile_options(gsl_tests_config INTERFACE + ${GSL_CPLUSPLUS_OPT} + /EHsc + /W4 + /WX + $<$: + /wd4996 # Use of function or classes marked [[deprecated]] + /wd26409 # CppCoreCheck - GTest + /wd26426 # CppCoreCheck - GTest + /wd26440 # CppCoreCheck - GTest + /wd26446 # CppCoreCheck - prefer gsl::at() + /wd26472 # CppCoreCheck - use gsl::narrow(_cast) + /wd26481 # CppCoreCheck - use span instead of pointer arithmetic + $<$,1920>: # VS2015 + /wd4189 # variable is initialized but not referenced + $<$>: # Release, RelWithDebInfo + /wd4702 # Unreachable code + > + > + > + $<$: + -Weverything + -Wfloat-equal + -Wno-c++98-compat + -Wno-c++98-compat-pedantic + -Wno-covered-switch-default # GTest + -Wno-deprecated-declarations # Allow tests for [[deprecated]] elements + -Wno-global-constructors # GTest + -Wno-language-extension-token # GTest gtest-port.h + -Wno-missing-braces + -Wno-missing-prototypes + -Wno-shift-sign-overflow # GTest gtest-port.h + -Wno-undef # GTest + -Wno-used-but-marked-unused # GTest EXPECT_DEATH + $<$: # no support for [[maybe_unused]] + -Wno-unused-member-function + -Wno-unused-variable + $<$,15.0.1>: + -Wno-deprecated # False positive in MSVC Clang 15.0.1 raises a C++17 warning + > + > + > + ) + check_cxx_compiler_flag("-Wno-reserved-identifier" WARN_RESERVED_ID) + if (WARN_RESERVED_ID) + target_compile_options(gsl_tests_config INTERFACE "-Wno-reserved-identifier") + endif() + check_cxx_compiler_flag("-Wno-unsafe-buffer-usage" WARN_UNSAFE_BUFFER) + if (WARN_UNSAFE_BUFFER) + # This test uses very greedy heuristics such as "no pointer arithmetic on raw buffer" + target_compile_options(gsl_tests_config INTERFACE "-Wno-unsafe-buffer-usage") + endif() +else() + target_compile_options(gsl_tests_config INTERFACE + -fno-strict-aliasing + -Wall + -Wcast-align + -Wconversion + -Wctor-dtor-privacy + -Werror + -Wextra + -Wpedantic + -Wshadow + -Wsign-conversion + -Wfloat-equal + -Wno-deprecated-declarations # Allow tests for [[deprecated]] elements + $<$,$>: + -Weverything + -Wno-c++98-compat + -Wno-c++98-compat-pedantic + -Wno-missing-braces + -Wno-covered-switch-default # GTest + -Wno-global-constructors # GTest + -Wno-missing-prototypes + -Wno-padded + -Wno-unknown-attributes + -Wno-used-but-marked-unused # GTest EXPECT_DEATH + -Wno-weak-vtables + $<$: # no support for [[maybe_unused]] + -Wno-unused-member-function + -Wno-unused-variable + > + > + $<$: + $<$,4.99>,$,6>>: + $<$:-Wno-undefined-func-template> + > + $<$,$,$>>: + -Wno-zero-as-null-pointer-constant # failing Clang Ubuntu 20.04 tests, seems to be a bug with clang 10.0.0 + # and clang 11.0.0. (operator< is being re-written by the compiler + # as operator<=> and raising the warning) + > + > + $<$: + $<$,9.1>,$,10>>: + $<$:-Wno-undefined-func-template> + > + > + $<$: + -Wdouble-promotion # float implicit to double + -Wlogical-op # suspicious uses of logical operators + $<$,6>>: + -Wduplicated-cond # duplicated if-else conditions + -Wmisleading-indentation + -Wnull-dereference + $<$: # no support for [[maybe_unused]] + -Wno-unused-variable + > + > + $<$,7>>: + -Wduplicated-branches # identical if-else branches + > + > + ) +endif(MSVC) + +# for tests to find the gtest header +target_include_directories(gsl_tests_config SYSTEM INTERFACE + googletest/googletest/include +) + +add_executable(gsl_tests + algorithm_tests.cpp + assertion_tests.cpp + at_tests.cpp + byte_tests.cpp + notnull_tests.cpp + owner_tests.cpp + span_compatibility_tests.cpp + span_ext_tests.cpp + span_tests.cpp + strict_notnull_tests.cpp + + utils_tests.cpp +) + +target_link_libraries(gsl_tests + Microsoft.GSL::GSL + gsl_tests_config + ${GTestMain_LIBRARIES} +) +add_test(gsl_tests gsl_tests) + +# No exception tests + +foreach(flag_var + CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE + CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) + STRING (REGEX REPLACE "/EHsc" "" ${flag_var} "${${flag_var}}") +endforeach(flag_var) + +# this interface adds compile options to how the tests are run +# please try to keep entries ordered =) +add_library(gsl_tests_config_noexcept INTERFACE) +if(MSVC) # MSVC or simulating MSVC + target_compile_definitions(gsl_tests_config_noexcept INTERFACE + _HAS_EXCEPTIONS=0 # disable exceptions in the Microsoft STL + ) + target_compile_options(gsl_tests_config_noexcept INTERFACE + ${GSL_CPLUSPLUS_OPT} + /W4 + /WX + $<$: + /wd4577 + /wd4702 + /wd26440 # CppCoreCheck - GTest + /wd26446 # CppCoreCheck - prefer gsl::at() + > + $<$: + -Weverything + -Wfloat-equal + -Wno-c++98-compat + -Wno-c++98-compat-pedantic + -Wno-missing-prototypes + -Wno-unknown-attributes + $<$: + $<$,15.0.1>: + -Wno-deprecated # False positive in MSVC Clang 15.0.1 raises a C++17 warning + > + > + > + ) + check_cxx_compiler_flag("-Wno-reserved-identifier" WARN_RESERVED_ID) + if (WARN_RESERVED_ID) + target_compile_options(gsl_tests_config_noexcept INTERFACE "-Wno-reserved-identifier") + endif() + check_cxx_compiler_flag("-Wno-unsafe-buffer-usage" WARN_UNSAFE_BUFFER) + if (WARN_UNSAFE_BUFFER) + # This test uses very greedy heuristics such as "no pointer arithmetic on raw buffer" + target_compile_options(gsl_tests_config_noexcept INTERFACE "-Wno-unsafe-buffer-usage") + endif() +else() + target_compile_options(gsl_tests_config_noexcept INTERFACE + -fno-exceptions + -fno-strict-aliasing + -Wall + -Wcast-align + -Wconversion + -Wctor-dtor-privacy + -Werror + -Wextra + -Wpedantic + -Wshadow + -Wsign-conversion + -Wfloat-equal + $<$,$>: + -Weverything + -Wno-c++98-compat + -Wno-c++98-compat-pedantic + -Wno-missing-prototypes + -Wno-unknown-attributes + -Wno-weak-vtables + > + $<$: + -Wdouble-promotion # float implicit to double + -Wlogical-op # suspicious uses of logical operators + -Wuseless-cast # casting to its own type + $<$,6>>: + -Wduplicated-cond # duplicated if-else conditions + -Wmisleading-indentation + -Wnull-dereference + > + $<$,7>>: + -Wduplicated-branches # identical if-else branches + > + $<$,8>>: + -Wcast-align=strict # increase alignment (i.e. char* to int*) + > + > + ) +endif(MSVC) + +add_executable(gsl_noexcept_tests no_exception_ensure_tests.cpp) +target_link_libraries(gsl_noexcept_tests + Microsoft.GSL::GSL + gsl_tests_config_noexcept +) +add_test(gsl_noexcept_tests gsl_noexcept_tests) diff --git a/deps/GSL/tests/CMakeLists.txt.in b/deps/GSL/tests/CMakeLists.txt.in new file mode 100644 index 0000000..2535f8f --- /dev/null +++ b/deps/GSL/tests/CMakeLists.txt.in @@ -0,0 +1,14 @@ +cmake_minimum_required(VERSION 3.0.2) +project(googletest-download NONE) + +include(ExternalProject) +ExternalProject_Add(googletest + GIT_REPOSITORY https://github.com/google/googletest.git + GIT_TAG 1b18723e874b256c1e39378c6774a90701d70f7a + SOURCE_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-src" + BINARY_DIR "${CMAKE_CURRENT_BINARY_DIR}/googletest-build" + CONFIGURE_COMMAND "" + BUILD_COMMAND "" + INSTALL_COMMAND "" + TEST_COMMAND "" +) diff --git a/deps/GSL/tests/algorithm_tests.cpp b/deps/GSL/tests/algorithm_tests.cpp new file mode 100644 index 0000000..e369be0 --- /dev/null +++ b/deps/GSL/tests/algorithm_tests.cpp @@ -0,0 +1,224 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include // for array +#include // for size_t +#include // for copy +#include // for span +#include + +#include "deathTestCommon.h" + +namespace gsl +{ +struct fail_fast; +} // namespace gsl + +using namespace gsl; + +TEST(algorithm_tests, same_type) +{ + // dynamic source and destination span + { + std::array src{1, 2, 3, 4, 5}; + std::array dst{}; + + const span src_span(src); + const span dst_span(dst); + + copy(src_span, dst_span); + copy(src_span, dst_span.subspan(src_span.size())); + + for (std::size_t i = 0; i < src.size(); ++i) + { + EXPECT_TRUE(dst[i] == src[i]); + EXPECT_TRUE(dst[i + src.size()] == src[i]); + } + } + + // static source and dynamic destination span + { + std::array src{1, 2, 3, 4, 5}; + std::array dst{}; + + const span src_span(src); + const span dst_span(dst); + + copy(src_span, dst_span); + copy(src_span, dst_span.subspan(src_span.size())); + + for (std::size_t i = 0; i < src.size(); ++i) + { + EXPECT_TRUE(dst[i] == src[i]); + EXPECT_TRUE(dst[i + src.size()] == src[i]); + } + } + + // dynamic source and static destination span + { + std::array src{1, 2, 3, 4, 5}; + std::array dst{}; + + const gsl::span src_span(src); + const gsl::span dst_span(dst); + + copy(src_span, dst_span); + copy(src_span, dst_span.subspan(src_span.size())); + + for (std::size_t i = 0; i < src.size(); ++i) + { + EXPECT_TRUE(dst[i] == src[i]); + EXPECT_TRUE(dst[i + src.size()] == src[i]); + } + } + + // static source and destination span + { + std::array src{1, 2, 3, 4, 5}; + std::array dst{}; + + const span src_span(src); + const span dst_span(dst); + + copy(src_span, dst_span); + copy(src_span, dst_span.subspan(src_span.size())); + + for (std::size_t i = 0; i < src.size(); ++i) + { + EXPECT_TRUE(dst[i] == src[i]); + EXPECT_TRUE(dst[i + src.size()] == src[i]); + } + } +} + +TEST(algorithm_tests, compatible_type) +{ + // dynamic source and destination span + { + std::array src{1, 2, 3, 4, 5}; + std::array dst{}; + + const span src_span(src); + const span dst_span(dst); + + copy(src_span, dst_span); + copy(src_span, dst_span.subspan(src_span.size())); + + for (std::size_t i = 0; i < src.size(); ++i) + { + EXPECT_TRUE(dst[i] == src[i]); + EXPECT_TRUE(dst[i + src.size()] == src[i]); + } + } + + // static source and dynamic destination span + { + std::array src{1, 2, 3, 4, 5}; + std::array dst{}; + + const span src_span(src); + const span dst_span(dst); + + copy(src_span, dst_span); + copy(src_span, dst_span.subspan(src_span.size())); + + for (std::size_t i = 0; i < src.size(); ++i) + { + EXPECT_TRUE(dst[i] == src[i]); + EXPECT_TRUE(dst[i + src.size()] == src[i]); + } + } + + // dynamic source and static destination span + { + std::array src{1, 2, 3, 4, 5}; + std::array dst{}; + + const span src_span(src); + const span dst_span(dst); + + copy(src_span, dst_span); + copy(src_span, dst_span.subspan(src_span.size())); + + for (std::size_t i = 0; i < src.size(); ++i) + { + EXPECT_TRUE(dst[i] == src[i]); + EXPECT_TRUE(dst[i + src.size()] == src[i]); + } + } + + // static source and destination span + { + std::array src{1, 2, 3, 4, 5}; + std::array dst{}; + + const span src_span(src); + const span dst_span(dst); + + copy(src_span, dst_span); + copy(src_span, dst_span.subspan(src_span.size())); + + for (std::size_t i = 0; i < src.size(); ++i) + { + EXPECT_TRUE(dst[i] == src[i]); + EXPECT_TRUE(dst[i + src.size()] == src[i]); + } + } +} + +#ifdef CONFIRM_COMPILATION_ERRORS +TEST(algorithm_tests, incompatible_type) +{ + std::array src{1, 2, 3, 4}; + std::array dst{}; + + span src_span_dyn(src); + span src_span_static(src); + span dst_span_dyn(dst); + span dst_span_static(dst); + + // every line should produce a compilation error + copy(src_span_dyn, dst_span_dyn); + copy(src_span_dyn, dst_span_static); + copy(src_span_static, dst_span_dyn); + copy(src_span_static, dst_span_static); +} +#endif + +TEST(algorithm_tests, small_destination_span) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. small_destination_span"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + std::array src{1, 2, 3, 4}; + std::array dst{}; + + const span src_span_dyn(src); + const span src_span_static(src); + const span dst_span_dyn(dst); + const span dst_span_static(dst); + + EXPECT_DEATH(copy(src_span_dyn, dst_span_dyn), expected); + EXPECT_DEATH(copy(src_span_dyn, dst_span_static), expected); + EXPECT_DEATH(copy(src_span_static, dst_span_dyn), expected); + +#ifdef CONFIRM_COMPILATION_ERRORS + copy(src_span_static, dst_span_static); +#endif +} diff --git a/deps/GSL/tests/assertion_tests.cpp b/deps/GSL/tests/assertion_tests.cpp new file mode 100644 index 0000000..231befc --- /dev/null +++ b/deps/GSL/tests/assertion_tests.cpp @@ -0,0 +1,60 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include "deathTestCommon.h" +#include // for Ensures, Expects +#include + +using namespace gsl; + +namespace +{ + +int f(int i) +{ + Expects(i > 0 && i < 10); + return i; +} + +int g(int i) +{ + i++; + Ensures(i > 0 && i < 10); + return i; +} +} // namespace + +TEST(assertion_tests, expects) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. expects"; + std::abort(); + }); + + EXPECT_TRUE(f(2) == 2); + EXPECT_DEATH(f(10), GetExpectedDeathString(terminateHandler)); +} + +TEST(assertion_tests, ensures) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. ensures"; + std::abort(); + }); + + EXPECT_TRUE(g(2) == 3); + EXPECT_DEATH(g(9), GetExpectedDeathString(terminateHandler)); +} diff --git a/deps/GSL/tests/at_tests.cpp b/deps/GSL/tests/at_tests.cpp new file mode 100644 index 0000000..42b2241 --- /dev/null +++ b/deps/GSL/tests/at_tests.cpp @@ -0,0 +1,173 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include + +#include // for at + +#include // for array +#include // for size_t +#include // for terminate +#include // for initializer_list +#include // for vector +#if defined(__cplusplus) && __cplusplus >= 202002L +#include +#endif // __cplusplus >= 202002L + +#include "deathTestCommon.h" + +TEST(at_tests, static_array) +{ + int a[4] = {1, 2, 3, 4}; + const int(&c_a)[4] = a; + + for (int i = 0; i < 4; ++i) + { + EXPECT_TRUE(&gsl::at(a, i) == &a[i]); + EXPECT_TRUE(&gsl::at(c_a, i) == &a[i]); + } + + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. static_array"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + EXPECT_DEATH(gsl::at(a, -1), expected); + EXPECT_DEATH(gsl::at(a, 4), expected); + EXPECT_DEATH(gsl::at(c_a, -1), expected); + EXPECT_DEATH(gsl::at(c_a, 4), expected); +} + +TEST(at_tests, std_array) +{ + std::array a = {1, 2, 3, 4}; + const std::array& c_a = a; + + for (int i = 0; i < 4; ++i) + { + EXPECT_TRUE(&gsl::at(a, i) == &a[static_cast(i)]); + EXPECT_TRUE(&gsl::at(c_a, i) == &a[static_cast(i)]); + } + + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. std_array"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + EXPECT_DEATH(gsl::at(a, -1), expected); + EXPECT_DEATH(gsl::at(a, 4), expected); + EXPECT_DEATH(gsl::at(c_a, -1), expected); + EXPECT_DEATH(gsl::at(c_a, 4), expected); +} + +TEST(at_tests, std_vector) +{ + std::vector a = {1, 2, 3, 4}; + const std::vector& c_a = a; + + for (int i = 0; i < 4; ++i) + { + EXPECT_TRUE(&gsl::at(a, i) == &a[static_cast(i)]); + EXPECT_TRUE(&gsl::at(c_a, i) == &a[static_cast(i)]); + } + + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. std_vector"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + EXPECT_DEATH(gsl::at(a, -1), expected); + EXPECT_DEATH(gsl::at(a, 4), expected); + EXPECT_DEATH(gsl::at(c_a, -1), expected); + EXPECT_DEATH(gsl::at(c_a, 4), expected); +} + +TEST(at_tests, InitializerList) +{ + const std::initializer_list a = {1, 2, 3, 4}; + + for (int i = 0; i < 4; ++i) + { + EXPECT_TRUE(gsl::at(a, i) == i + 1); + EXPECT_TRUE(gsl::at({1, 2, 3, 4}, i) == i + 1); + } + + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. InitializerList"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + EXPECT_DEATH(gsl::at(a, -1), expected); + EXPECT_DEATH(gsl::at(a, 4), expected); + EXPECT_DEATH(gsl::at({1, 2, 3, 4}, -1), expected); + EXPECT_DEATH(gsl::at({1, 2, 3, 4}, 4), expected); +} + +#if defined(FORCE_STD_SPAN_TESTS) || defined(__cpp_lib_span) && __cpp_lib_span >= 202002L +TEST(at_tests, std_span) +{ + std::vector vec{1, 2, 3, 4, 5}; + std::span sp{vec}; + + std::vector cvec{1, 2, 3, 4, 5}; + std::span csp{cvec}; + + for (gsl::index i = 0; i < gsl::narrow_cast(vec.size()); ++i) + { + EXPECT_TRUE(&gsl::at(sp, i) == &vec[gsl::narrow_cast(i)]); + EXPECT_TRUE(&gsl::at(csp, i) == &cvec[gsl::narrow_cast(i)]); + } + + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. std_span"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + EXPECT_DEATH(gsl::at(sp, -1), expected); + EXPECT_DEATH(gsl::at(sp, gsl::narrow_cast(sp.size())), expected); + EXPECT_DEATH(gsl::at(csp, -1), expected); + EXPECT_DEATH(gsl::at(csp, gsl::narrow_cast(sp.size())), expected); +} +#endif // defined(FORCE_STD_SPAN_TESTS) || defined(__cpp_lib_span) && __cpp_lib_span >= 202002L + +#if !defined(_MSC_VER) || defined(__clang__) || _MSC_VER >= 1910 +static constexpr bool test_constexpr() +{ + int a1[4] = {1, 2, 3, 4}; + const int(&c_a1)[4] = a1; + std::array a2 = {1, 2, 3, 4}; + const std::array& c_a2 = a2; + + for (int i = 0; i < 4; ++i) + { + if (&gsl::at(a1, i) != &a1[i]) return false; + if (&gsl::at(c_a1, i) != &a1[i]) return false; + // requires C++17: + // if (&gsl::at(a2, i) != &a2[static_cast(i)]) return false; + if (&gsl::at(c_a2, i) != &c_a2[static_cast(i)]) return false; + if (gsl::at({1, 2, 3, 4}, i) != i + 1) return false; + } + + return true; +} + +static_assert(test_constexpr(), "FAIL"); +#endif diff --git a/deps/GSL/tests/byte_tests.cpp b/deps/GSL/tests/byte_tests.cpp new file mode 100644 index 0000000..634dcc9 --- /dev/null +++ b/deps/GSL/tests/byte_tests.cpp @@ -0,0 +1,134 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include + +#include // for to_byte, to_integer, byte, operator&, ope... + +using namespace std; +using namespace gsl; + +namespace +{ +int modify_both(gsl::byte& b, int& i) +{ + i = 10; + b = to_byte<5>(); + return i; +} + +TEST(byte_tests, construction) +{ + { + const byte b = static_cast(4); + EXPECT_TRUE(static_cast(b) == 4); + } + + { + const byte b = byte(12); + EXPECT_TRUE(static_cast(b) == 12); + } + + { + const byte b = to_byte<12>(); + EXPECT_TRUE(static_cast(b) == 12); + } + { + const unsigned char uc = 12; + const byte b = to_byte(uc); + EXPECT_TRUE(static_cast(b) == 12); + } + +#if defined(__cplusplus) && (__cplusplus >= 201703L) + { + const byte b{14}; + EXPECT_TRUE(static_cast(b) == 14); + } +#endif + +#ifdef CONFIRM_COMPILATION_ERRORS + to_byte(char{}); + to_byte(3); + to_byte(3u); +#endif +} + +TEST(byte_tests, bitwise_operations) +{ + const byte b = to_byte<0xFF>(); + + byte a = to_byte<0x00>(); + EXPECT_TRUE((b | a) == to_byte<0xFF>()); + EXPECT_TRUE(a == to_byte<0x00>()); + + a |= b; + EXPECT_TRUE(a == to_byte<0xFF>()); + + a = to_byte<0x01>(); + EXPECT_TRUE((b & a) == to_byte<0x01>()); + + a &= b; + EXPECT_TRUE(a == to_byte<0x01>()); + + EXPECT_TRUE((b ^ a) == to_byte<0xFE>()); + + EXPECT_TRUE(a == to_byte<0x01>()); + a ^= b; + EXPECT_TRUE(a == to_byte<0xFE>()); + + a = to_byte<0x01>(); + EXPECT_TRUE(~a == to_byte<0xFE>()); + + a = to_byte<0xFF>(); + EXPECT_TRUE((a << 4) == to_byte<0xF0>()); + EXPECT_TRUE((a >> 4) == to_byte<0x0F>()); + + a <<= 4; + EXPECT_TRUE(a == to_byte<0xF0>()); + a >>= 4; + EXPECT_TRUE(a == to_byte<0x0F>()); +} + +TEST(byte_tests, to_integer) +{ + const byte b = to_byte<0x12>(); + + EXPECT_TRUE(0x12 == gsl::to_integer(b)); + EXPECT_TRUE(0x12 == gsl::to_integer(b)); + EXPECT_TRUE(0x12 == gsl::to_integer(b)); + EXPECT_TRUE(0x12 == gsl::to_integer(b)); + + EXPECT_TRUE(0x12 == gsl::to_integer(b)); + EXPECT_TRUE(0x12 == gsl::to_integer(b)); + EXPECT_TRUE(0x12 == gsl::to_integer(b)); + EXPECT_TRUE(0x12 == gsl::to_integer(b)); + + // EXPECT_TRUE(0x12 == gsl::to_integer(b)); // expect compile-time error + // EXPECT_TRUE(0x12 == gsl::to_integer(b)); // expect compile-time error +} + +TEST(byte_tests, aliasing) +{ + int i{0}; + const int res = modify_both(reinterpret_cast(i), i); + EXPECT_TRUE(res == i); +} + +} // namespace + +#ifdef CONFIRM_COMPILATION_ERRORS +copy(src_span_static, dst_span_static); +#endif diff --git a/deps/GSL/tests/deathTestCommon.h b/deps/GSL/tests/deathTestCommon.h new file mode 100644 index 0000000..e92beb3 --- /dev/null +++ b/deps/GSL/tests/deathTestCommon.h @@ -0,0 +1,11 @@ +#pragma once +#include + +constexpr char deathstring[] = "Expected Death"; +constexpr char failed_set_terminate_deathstring[] = ".*"; + +// This prevents a failed call to set_terminate from failing the test suite. +constexpr const char* GetExpectedDeathString(std::terminate_handler handle) +{ + return handle ? deathstring : failed_set_terminate_deathstring; +} diff --git a/deps/GSL/tests/no_exception_ensure_tests.cpp b/deps/GSL/tests/no_exception_ensure_tests.cpp new file mode 100644 index 0000000..5e5d682 --- /dev/null +++ b/deps/GSL/tests/no_exception_ensure_tests.cpp @@ -0,0 +1,55 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include +#include // for std::exit +#include // for span +#include +#include + +int operator_subscript_no_throw() noexcept +{ + int arr[10]; + const gsl::span sp{arr}; + return sp[11]; +} + +[[noreturn]] void test_terminate() { std::exit(0); } + +void setup_termination_handler() noexcept +{ +#if defined(GSL_MSVC_USE_STL_NOEXCEPTION_WORKAROUND) + + auto& handler = gsl::details::get_terminate_handler(); + handler = &test_terminate; + +#else + + std::set_terminate(test_terminate); + +#endif +} + +int main() noexcept +{ + std::cout << "Running main() from " __FILE__ "\n"; +#if defined(IOS_PROCESS_DELAY_WORKAROUND) + std::this_thread::sleep_for(std::chrono::seconds(1)); +#endif + setup_termination_handler(); + operator_subscript_no_throw(); + return -1; +} diff --git a/deps/GSL/tests/notnull_tests.cpp b/deps/GSL/tests/notnull_tests.cpp new file mode 100644 index 0000000..4c317d9 --- /dev/null +++ b/deps/GSL/tests/notnull_tests.cpp @@ -0,0 +1,636 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include + +#include // for not_null, operator<, operator<=, operator> + +#include // for addressof +#include // for uint16_t +#include // for shared_ptr, make_shared, operator<, opera... +#include // for operator<<, ostringstream, basic_ostream:... +#include // for basic_string, operator==, string, operator<< +#include // for type_info + +#include "deathTestCommon.h" +using namespace gsl; + +struct MyBase +{ +}; +struct MyDerived : public MyBase +{ +}; +struct Unrelated +{ +}; + +// stand-in for a user-defined ref-counted class +template +struct RefCounted +{ + RefCounted(T* p) : p_(p) {} + operator T*() { return p_; } + T* p_; +}; + +// user defined smart pointer with comparison operators returning non bool value +template +struct CustomPtr +{ + CustomPtr(T* p) : p_(p) {} + operator T*() const { return p_; } + bool operator!=(std::nullptr_t) const { return p_ != nullptr; } + T* p_ = nullptr; +}; + +template +std::string operator==(CustomPtr const& lhs, CustomPtr const& rhs) +{ + // clang-format off + GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + // clang-format on + return reinterpret_cast(lhs.p_) == reinterpret_cast(rhs.p_) ? "true" + : "false"; +} + +template +std::string operator!=(CustomPtr const& lhs, CustomPtr const& rhs) +{ + // clang-format off + GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + // clang-format on + return reinterpret_cast(lhs.p_) != reinterpret_cast(rhs.p_) ? "true" + : "false"; +} + +template +std::string operator<(CustomPtr const& lhs, CustomPtr const& rhs) +{ + // clang-format off + GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + // clang-format on + return reinterpret_cast(lhs.p_) < reinterpret_cast(rhs.p_) ? "true" + : "false"; +} + +template +std::string operator>(CustomPtr const& lhs, CustomPtr const& rhs) +{ + // clang-format off + GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + // clang-format on + return reinterpret_cast(lhs.p_) > reinterpret_cast(rhs.p_) ? "true" + : "false"; +} + +template +std::string operator<=(CustomPtr const& lhs, CustomPtr const& rhs) +{ + // clang-format off + GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + // clang-format on + return reinterpret_cast(lhs.p_) <= reinterpret_cast(rhs.p_) ? "true" + : "false"; +} + +template +std::string operator>=(CustomPtr const& lhs, CustomPtr const& rhs) +{ + // clang-format off + GSL_SUPPRESS(type.1) // NO-FORMAT: attribute + // clang-format on + return reinterpret_cast(lhs.p_) >= reinterpret_cast(rhs.p_) ? "true" + : "false"; +} + +struct NonCopyableNonMovable +{ + NonCopyableNonMovable() = default; + NonCopyableNonMovable(const NonCopyableNonMovable&) = delete; + NonCopyableNonMovable& operator=(const NonCopyableNonMovable&) = delete; + NonCopyableNonMovable(NonCopyableNonMovable&&) = delete; + NonCopyableNonMovable& operator=(NonCopyableNonMovable&&) = delete; +}; + +namespace +{ +// clang-format off +GSL_SUPPRESS(f .4) // NO-FORMAT: attribute +// clang-format on +bool helper(not_null p) { return *p == 12; } +// clang-format off +GSL_SUPPRESS(f .4) // NO-FORMAT: attribute +// clang-format on +bool helper_const(not_null p) { return *p == 12; } + +int* return_pointer() { return nullptr; } +} // namespace + +TEST(notnull_tests, TestNotNullConstructors) +{ + { +#ifdef CONFIRM_COMPILATION_ERRORS + not_null p = nullptr; // yay...does not compile! + not_null*> p1 = 0; // yay...does not compile! + not_null p2; // yay...does not compile! + std::unique_ptr up = std::make_unique(120); + not_null p3 = up; + + // Forbid non-nullptr assignable types + not_null> f(std::vector{1}); + not_null z(10); + not_null> y({1, 2}); +#endif + } + + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. TestNotNullConstructors"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + { + // from shared pointer + int i = 12; + auto rp = RefCounted(&i); + not_null p(rp); + EXPECT_TRUE(p.get() == &i); + + not_null> x( + std::make_shared(10)); // shared_ptr is nullptr assignable + + int* pi = nullptr; + EXPECT_DEATH((not_null(pi)), expected); + } + + { + // from pointer to local + int t = 42; + + not_null x = &t; + helper(&t); + helper_const(&t); + + EXPECT_TRUE(*x == 42); + } + + { + // from raw pointer + // from not_null pointer + + int t = 42; + int* p = &t; + + not_null x = p; + helper(p); + helper_const(p); + helper(x); + helper_const(x); + + EXPECT_TRUE(*x == 42); + } + + { + // from raw const pointer + // from not_null const pointer + + int t = 42; + const int* cp = &t; + + not_null x = cp; + helper_const(cp); + helper_const(x); + + EXPECT_TRUE(*x == 42); + } + + { + // from not_null const pointer, using auto + int t = 42; + const int* cp = &t; + + auto x = not_null{cp}; + + EXPECT_TRUE(*x == 42); + } + + { + // from returned pointer + + EXPECT_DEATH(helper(return_pointer()), expected); + EXPECT_DEATH(helper_const(return_pointer()), expected); + } +} + +template +void ostream_helper(T v) +{ + not_null p(&v); + { + std::ostringstream os; + std::ostringstream ref; + os << static_cast(p); + ref << static_cast(&v); + EXPECT_TRUE(os.str() == ref.str()); + } + { + std::ostringstream os; + std::ostringstream ref; + os << *p; + ref << v; + EXPECT_TRUE(os.str() == ref.str()); + } +} + +TEST(notnull_tests, TestNotNullostream) +{ + ostream_helper(17); + ostream_helper(21.5f); + ostream_helper(3.4566e-7); + ostream_helper('c'); + ostream_helper(0x0123u); + ostream_helper("cstring"); + ostream_helper("string"); +} + +TEST(notnull_tests, TestNotNullCasting) +{ + MyBase base; + MyDerived derived; + Unrelated unrelated; + not_null u{&unrelated}; + (void) u; + not_null p{&derived}; + not_null q(&base); + q = p; // allowed with heterogeneous copy ctor + EXPECT_TRUE(q == p); + +#ifdef CONFIRM_COMPILATION_ERRORS + q = u; // no viable conversion possible between MyBase* and Unrelated* + p = q; // not possible to implicitly convert MyBase* to MyDerived* + + not_null r = p; + not_null s = reinterpret_cast(p); +#endif + not_null t(reinterpret_cast(p.get())); + EXPECT_TRUE(reinterpret_cast(p.get()) == reinterpret_cast(t.get())); +} + +TEST(notnull_tests, TestNotNullAssignment) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. TestNotNullAssignmentd"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + int i = 12; + not_null p(&i); + EXPECT_TRUE(helper(p)); + + int* q = nullptr; + EXPECT_DEATH(p = not_null(q), expected); +} + +TEST(notnull_tests, TestNotNullRawPointerComparison) +{ + int ints[2] = {42, 43}; + int* p1 = &ints[0]; + const int* p2 = &ints[1]; + + using NotNull1 = not_null; + using NotNull2 = not_null; + + EXPECT_TRUE((NotNull1(p1) == NotNull1(p1)) == true); + EXPECT_TRUE((NotNull1(p1) == NotNull2(p2)) == false); + + EXPECT_TRUE((NotNull1(p1) != NotNull1(p1)) == false); + EXPECT_TRUE((NotNull1(p1) != NotNull2(p2)) == true); + + EXPECT_TRUE((NotNull1(p1) < NotNull1(p1)) == false); + EXPECT_TRUE((NotNull1(p1) < NotNull2(p2)) == (p1 < p2)); + EXPECT_TRUE((NotNull2(p2) < NotNull1(p1)) == (p2 < p1)); + + EXPECT_TRUE((NotNull1(p1) > NotNull1(p1)) == false); + EXPECT_TRUE((NotNull1(p1) > NotNull2(p2)) == (p1 > p2)); + EXPECT_TRUE((NotNull2(p2) > NotNull1(p1)) == (p2 > p1)); + + EXPECT_TRUE((NotNull1(p1) <= NotNull1(p1)) == true); + EXPECT_TRUE((NotNull1(p1) <= NotNull2(p2)) == (p1 <= p2)); + EXPECT_TRUE((NotNull2(p2) <= NotNull1(p1)) == (p2 <= p1)); +} + +TEST(notnull_tests, TestNotNullDereferenceOperator) +{ + { + auto sp1 = std::make_shared(); + + using NotNullSp1 = not_null; + EXPECT_TRUE(typeid(*sp1) == typeid(*NotNullSp1(sp1))); + EXPECT_TRUE(std::addressof(*NotNullSp1(sp1)) == std::addressof(*sp1)); + } + + { + int ints[1] = {42}; + CustomPtr p1(&ints[0]); + + using NotNull1 = not_null; + EXPECT_TRUE(typeid(*NotNull1(p1)) == typeid(*p1)); + EXPECT_TRUE(*NotNull1(p1) == 42); + *NotNull1(p1) = 43; + EXPECT_TRUE(ints[0] == 43); + } + + { + int v = 42; + gsl::not_null p(&v); + EXPECT_TRUE(typeid(*p) == typeid(*(&v))); + *p = 43; + EXPECT_TRUE(v == 43); + } +} + +TEST(notnull_tests, TestNotNullSharedPtrComparison) +{ + auto sp1 = std::make_shared(42); + auto sp2 = std::make_shared(43); + + using NotNullSp1 = not_null; + using NotNullSp2 = not_null; + + EXPECT_TRUE((NotNullSp1(sp1) == NotNullSp1(sp1)) == true); + EXPECT_TRUE((NotNullSp1(sp1) == NotNullSp2(sp2)) == false); + + EXPECT_TRUE((NotNullSp1(sp1) != NotNullSp1(sp1)) == false); + EXPECT_TRUE((NotNullSp1(sp1) != NotNullSp2(sp2)) == true); + + EXPECT_TRUE((NotNullSp1(sp1) < NotNullSp1(sp1)) == false); + EXPECT_TRUE((NotNullSp1(sp1) < NotNullSp2(sp2)) == (sp1 < sp2)); + EXPECT_TRUE((NotNullSp2(sp2) < NotNullSp1(sp1)) == (sp2 < sp1)); + + EXPECT_TRUE((NotNullSp1(sp1) > NotNullSp1(sp1)) == false); + EXPECT_TRUE((NotNullSp1(sp1) > NotNullSp2(sp2)) == (sp1 > sp2)); + EXPECT_TRUE((NotNullSp2(sp2) > NotNullSp1(sp1)) == (sp2 > sp1)); + + EXPECT_TRUE((NotNullSp1(sp1) <= NotNullSp1(sp1)) == true); + EXPECT_TRUE((NotNullSp1(sp1) <= NotNullSp2(sp2)) == (sp1 <= sp2)); + EXPECT_TRUE((NotNullSp2(sp2) <= NotNullSp1(sp1)) == (sp2 <= sp1)); + + EXPECT_TRUE((NotNullSp1(sp1) >= NotNullSp1(sp1)) == true); + EXPECT_TRUE((NotNullSp1(sp1) >= NotNullSp2(sp2)) == (sp1 >= sp2)); + EXPECT_TRUE((NotNullSp2(sp2) >= NotNullSp1(sp1)) == (sp2 >= sp1)); +} + +TEST(notnull_tests, TestNotNullCustomPtrComparison) +{ + int ints[2] = {42, 43}; + CustomPtr p1(&ints[0]); + CustomPtr p2(&ints[1]); + + using NotNull1 = not_null; + using NotNull2 = not_null; + + EXPECT_TRUE((NotNull1(p1) == NotNull1(p1)) == "true"); + EXPECT_TRUE((NotNull1(p1) == NotNull2(p2)) == "false"); + + EXPECT_TRUE((NotNull1(p1) != NotNull1(p1)) == "false"); + EXPECT_TRUE((NotNull1(p1) != NotNull2(p2)) == "true"); + + EXPECT_TRUE((NotNull1(p1) < NotNull1(p1)) == "false"); + EXPECT_TRUE((NotNull1(p1) < NotNull2(p2)) == (p1 < p2)); + EXPECT_TRUE((NotNull2(p2) < NotNull1(p1)) == (p2 < p1)); + + EXPECT_TRUE((NotNull1(p1) > NotNull1(p1)) == "false"); + EXPECT_TRUE((NotNull1(p1) > NotNull2(p2)) == (p1 > p2)); + EXPECT_TRUE((NotNull2(p2) > NotNull1(p1)) == (p2 > p1)); + + EXPECT_TRUE((NotNull1(p1) <= NotNull1(p1)) == "true"); + EXPECT_TRUE((NotNull1(p1) <= NotNull2(p2)) == (p1 <= p2)); + EXPECT_TRUE((NotNull2(p2) <= NotNull1(p1)) == (p2 <= p1)); + + EXPECT_TRUE((NotNull1(p1) >= NotNull1(p1)) == "true"); + EXPECT_TRUE((NotNull1(p1) >= NotNull2(p2)) == (p1 >= p2)); + EXPECT_TRUE((NotNull2(p2) >= NotNull1(p1)) == (p2 >= p1)); +} + +#if defined(__cplusplus) && (__cplusplus >= 201703L) + +TEST(notnull_tests, TestNotNullConstructorTypeDeduction) +{ + { + int i = 42; + + not_null x{&i}; + helper(not_null{&i}); + helper_const(not_null{&i}); + + EXPECT_TRUE(*x == 42); + } + + { + const int i = 42; + + not_null x{&i}; +#ifdef CONFIRM_COMPILATION_ERRORS + helper(not_null{&i}); +#endif + helper_const(not_null{&i}); + + EXPECT_TRUE(*x == 42); + } + + { + int i = 42; + int* p = &i; + + not_null x{p}; + helper(not_null{p}); + helper_const(not_null{p}); + + EXPECT_TRUE(*x == 42); + } + + { + const int i = 42; + const int* p = &i; + + not_null x{p}; +#ifdef CONFIRM_COMPILATION_ERRORS + helper(not_null{p}); +#endif + helper_const(not_null{p}); + + EXPECT_TRUE(*x == 42); + } + + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. TestNotNullConstructorTypeDeduction"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + { + auto workaround_macro = []() { + int* p1 = nullptr; + const not_null x{p1}; + }; + EXPECT_DEATH(workaround_macro(), expected); + } + + { + auto workaround_macro = []() { + const int* p1 = nullptr; + const not_null x{p1}; + }; + EXPECT_DEATH(workaround_macro(), expected); + } + + { + int* p = nullptr; + + EXPECT_DEATH(helper(not_null{p}), expected); + EXPECT_DEATH(helper_const(not_null{p}), expected); + } + +#ifdef CONFIRM_COMPILATION_ERRORS + { + not_null x{nullptr}; + helper(not_null{nullptr}); + helper_const(not_null{nullptr}); + } +#endif +} +#endif // #if defined(__cplusplus) && (__cplusplus >= 201703L) + +TEST(notnull_tests, TestMakeNotNull) +{ + { + int i = 42; + + const auto x = make_not_null(&i); + helper(make_not_null(&i)); + helper_const(make_not_null(&i)); + + EXPECT_TRUE(*x == 42); + } + + { + const int i = 42; + + const auto x = make_not_null(&i); +#ifdef CONFIRM_COMPILATION_ERRORS + helper(make_not_null(&i)); +#endif + helper_const(make_not_null(&i)); + + EXPECT_TRUE(*x == 42); + } + + { + int i = 42; + int* p = &i; + + const auto x = make_not_null(p); + helper(make_not_null(p)); + helper_const(make_not_null(p)); + + EXPECT_TRUE(*x == 42); + } + + { + const int i = 42; + const int* p = &i; + + const auto x = make_not_null(p); +#ifdef CONFIRM_COMPILATION_ERRORS + helper(make_not_null(p)); +#endif + helper_const(make_not_null(p)); + + EXPECT_TRUE(*x == 42); + } + + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. TestMakeNotNull"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + { + const auto workaround_macro = []() { + int* p1 = nullptr; + const auto x = make_not_null(p1); + EXPECT_TRUE(*x == 42); + }; + EXPECT_DEATH(workaround_macro(), expected); + } + + { + const auto workaround_macro = []() { + const int* p1 = nullptr; + const auto x = make_not_null(p1); + EXPECT_TRUE(*x == 42); + }; + EXPECT_DEATH(workaround_macro(), expected); + } + + { + int* p = nullptr; + + EXPECT_DEATH(helper(make_not_null(p)), expected); + EXPECT_DEATH(helper_const(make_not_null(p)), expected); + } + +#ifdef CONFIRM_COMPILATION_ERRORS + { + EXPECT_DEATH(make_not_null(nullptr), expected); + EXPECT_DEATH(helper(make_not_null(nullptr)), expected); + EXPECT_DEATH(helper_const(make_not_null(nullptr)), expected); + } +#endif +} + +TEST(notnull_tests, TestStdHash) +{ + { + int x = 42; + int y = 99; + not_null nn{&x}; + const not_null cnn{&x}; + + std::hash> hash_nn; + std::hash hash_intptr; + + EXPECT_TRUE(hash_nn(nn) == hash_intptr(&x)); + EXPECT_FALSE(hash_nn(nn) == hash_intptr(&y)); + EXPECT_FALSE(hash_nn(nn) == hash_intptr(nullptr)); + } + + { + const int x = 42; + const int y = 99; + not_null nn{&x}; + const not_null cnn{&x}; + + std::hash> hash_nn; + std::hash hash_intptr; + + EXPECT_TRUE(hash_nn(nn) == hash_intptr(&x)); + EXPECT_FALSE(hash_nn(nn) == hash_intptr(&y)); + EXPECT_FALSE(hash_nn(nn) == hash_intptr(nullptr)); + } +} diff --git a/deps/GSL/tests/owner_tests.cpp b/deps/GSL/tests/owner_tests.cpp new file mode 100644 index 0000000..87c7cec --- /dev/null +++ b/deps/GSL/tests/owner_tests.cpp @@ -0,0 +1,43 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include + +#include // for owner + +using namespace gsl; + +GSL_SUPPRESS(f .23) // NO-FORMAT: attribute +void f(int* i) { *i += 1; } + +TEST(owner_tests, basic_test) +{ + owner p = new int(120); + EXPECT_TRUE(*p == 120); + f(p); + EXPECT_TRUE(*p == 121); + delete p; +} + +TEST(owner_tests, check_pointer_constraint) +{ +#ifdef CONFIRM_COMPILATION_ERRORS + { + owner integerTest = 10; + owner> sharedPtrTest(new int(10)); + } +#endif +} diff --git a/deps/GSL/tests/span_compatibility_tests.cpp b/deps/GSL/tests/span_compatibility_tests.cpp new file mode 100644 index 0000000..95d8223 --- /dev/null +++ b/deps/GSL/tests/span_compatibility_tests.cpp @@ -0,0 +1,1023 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include + +#include // for byte +#include // for span, span_iterator, operator==, operator!= + +#include // for array +#include // for ptrdiff_t +#include // for reverse_iterator, operator-, operator== +#include // for integral_constant<>::value, is_default_co... +#include +#include // for vector + +using namespace std; +using namespace gsl; + +// Below are tests that verify the gsl interface support the same things as the std +// Ranges and Concepts support need to be added later. + +struct Base +{ +}; +struct Derived : Base +{ +}; +static_assert(std::is_convertible::value, "std::is_convertible"); +static_assert(!std::is_convertible::value, + "!std::is_convertible"); + +// int*(*) [], int const* const(*)[] was identified as an issue in CWG330 and the resolution was +// provided with N4261. +template +void ArrayConvertibilityCheck() +{ +#if __cplusplus >= 201703l + if constexpr (std::is_convertible::value) + { + std::array stl_nullptr{{nullptr, nullptr, nullptr}}; + gsl::span sp_const_nullptr_1{stl_nullptr}; + EXPECT_TRUE(sp_const_nullptr_1.data() == stl_nullptr.data()); + EXPECT_TRUE(sp_const_nullptr_1.size() == 3); + + gsl::span sp_const_nullptr_2{std::as_const(stl_nullptr)}; + EXPECT_TRUE(sp_const_nullptr_2.data() == stl_nullptr.data()); + EXPECT_TRUE(sp_const_nullptr_2.size() == 3); + + static_assert(std::is_same>::value, + "std::is_same< decltype(span{stl_nullptr}), span>::value"); + static_assert( + std::is_same>::value, + "std::is_same< decltype(span{std::as_const(stl_nullptr)}), span>::value"); + } +#endif +} + +TEST(span_compatibility_tests, assertion_tests) +{ + int arr[3]{10, 20, 30}; + std::array stl{{100, 200, 300}}; + + ArrayConvertibilityCheck(); + + { + gsl::span sp_dyn; + EXPECT_TRUE(sp_dyn.data() == nullptr); + EXPECT_TRUE(sp_dyn.size() == 0); + EXPECT_TRUE(sp_dyn.empty()); + } + { + gsl::span sp_zero; + EXPECT_TRUE(sp_zero.data() == nullptr); + EXPECT_TRUE(sp_zero.size() == 0); + EXPECT_TRUE(sp_zero.empty()); + + gsl::span sp_dyn_a(arr, 3); + gsl::span sp_dyn_b(begin(arr), 3); + EXPECT_TRUE(sp_dyn_a.data() == std::begin(arr)); + EXPECT_TRUE(sp_dyn_b.data() == std::begin(arr)); + EXPECT_TRUE(sp_dyn_a.size() == 3); + EXPECT_TRUE(sp_dyn_b.size() == 3); + + gsl::span sp_three_a(arr, 3); + gsl::span sp_three_b(begin(arr), 3); + EXPECT_TRUE(sp_three_a.data() == std::begin(arr)); + EXPECT_TRUE(sp_three_b.data() == std::begin(arr)); + EXPECT_TRUE(sp_three_a.size() == 3); + EXPECT_TRUE(sp_three_b.size() == 3); + + gsl::span sp_const_a(arr, 3); + gsl::span sp_const_b(begin(arr), 3); + EXPECT_TRUE(sp_const_a.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_b.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_a.size() == 3); + EXPECT_TRUE(sp_const_b.size() == 3); + +#if __cplusplus >= 201703l + gsl::span sp_const_c(std::as_const(arr), 3); + EXPECT_TRUE(sp_const_c.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_c.size() == 3); +#endif // __cplusplus >= 201703l + + gsl::span sp_const_d(cbegin(arr), 3); + EXPECT_TRUE(sp_const_d.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_d.size() == 3); + } + { + gsl::span sp_dyn_a(begin(arr), std::end(arr)); + EXPECT_TRUE(sp_dyn_a.data() == std::begin(arr)); + EXPECT_TRUE(sp_dyn_a.size() == 3); + + gsl::span sp_three_a(begin(arr), std::end(arr)); + EXPECT_TRUE(sp_three_a.data() == std::begin(arr)); + EXPECT_TRUE(sp_three_a.size() == 3); + + gsl::span sp_const_a(begin(arr), std::end(arr)); + gsl::span sp_const_b(begin(arr), std::cend(arr)); + gsl::span sp_const_c(cbegin(arr), std::end(arr)); + gsl::span sp_const_d(cbegin(arr), std::cend(arr)); + EXPECT_TRUE(sp_const_a.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_b.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_c.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_d.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_a.size() == 3); + EXPECT_TRUE(sp_const_b.size() == 3); + EXPECT_TRUE(sp_const_c.size() == 3); + EXPECT_TRUE(sp_const_d.size() == 3); + } + { + gsl::span sp_dyn_a(arr); + gsl::span sp_dyn_b(stl); + gsl::span sp_dyn_c{stl}; + gsl::span sp_dyn_d{stl}; + EXPECT_TRUE(sp_dyn_a.data() == std::begin(arr)); + EXPECT_TRUE(sp_dyn_b.data() == stl.data()); + EXPECT_TRUE(sp_dyn_a.size() == 3); + EXPECT_TRUE(sp_dyn_b.size() == 3); + + gsl::span sp_three_a(arr); + gsl::span sp_three_b(stl); + EXPECT_TRUE(sp_three_a.data() == std::begin(arr)); + EXPECT_TRUE(sp_three_b.data() == stl.data()); + EXPECT_TRUE(sp_three_a.size() == 3); + EXPECT_TRUE(sp_three_b.size() == 3); + + gsl::span sp_const_w(arr); + gsl::span sp_const_y(stl); + EXPECT_TRUE(sp_const_w.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_y.data() == stl.data()); + EXPECT_TRUE(sp_const_w.size() == 3); + EXPECT_TRUE(sp_const_y.size() == 3); + +#if __cplusplus >= 201703l + gsl::span sp_const_x(std::as_const(arr)); + EXPECT_TRUE(sp_const_x.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_x.size() == 3); + + gsl::span sp_const_z(std::as_const(stl)); + EXPECT_TRUE(sp_const_z.data() == stl.data()); + EXPECT_TRUE(sp_const_z.size() == 3); +#endif // __cplusplus >= 201703l + } + { + const gsl::span orig_dyn(arr); + const gsl::span orig_three(arr); + const gsl::span orig_const_dyn(arr); + const gsl::span orig_const_three(arr); + + gsl::span sp_a(orig_dyn); + gsl::span sp_b(orig_three); + + gsl::span sp_c(orig_three); + + gsl::span sp_d(orig_dyn); + gsl::span sp_e(orig_three); + gsl::span sp_f(orig_const_dyn); + gsl::span sp_g(orig_const_three); + + gsl::span sp_h(orig_three); + gsl::span sp_i(orig_const_three); + + EXPECT_TRUE(sp_a.data() == std::begin(arr)); + EXPECT_TRUE(sp_b.data() == std::begin(arr)); + EXPECT_TRUE(sp_c.data() == std::begin(arr)); + EXPECT_TRUE(sp_d.data() == std::begin(arr)); + EXPECT_TRUE(sp_e.data() == std::begin(arr)); + EXPECT_TRUE(sp_f.data() == std::begin(arr)); + EXPECT_TRUE(sp_g.data() == std::begin(arr)); + EXPECT_TRUE(sp_h.data() == std::begin(arr)); + EXPECT_TRUE(sp_i.data() == std::begin(arr)); + EXPECT_TRUE(sp_a.size() == 3); + EXPECT_TRUE(sp_b.size() == 3); + EXPECT_TRUE(sp_c.size() == 3); + EXPECT_TRUE(sp_d.size() == 3); + EXPECT_TRUE(sp_e.size() == 3); + EXPECT_TRUE(sp_f.size() == 3); + EXPECT_TRUE(sp_g.size() == 3); + EXPECT_TRUE(sp_h.size() == 3); + EXPECT_TRUE(sp_i.size() == 3); + } + { + gsl::span sp_dyn(arr); + gsl::span sp_three(arr); + gsl::span sp_const_dyn(arr); + gsl::span sp_const_three(arr); + + EXPECT_TRUE(sp_dyn.data() == std::begin(arr)); + EXPECT_TRUE(sp_three.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_dyn.data() == std::begin(arr)); + EXPECT_TRUE(sp_const_three.data() == std::begin(arr)); + EXPECT_TRUE(sp_dyn.size() == 3); + EXPECT_TRUE(sp_three.size() == 3); + EXPECT_TRUE(sp_const_dyn.size() == 3); + EXPECT_TRUE(sp_const_three.size() == 3); + + int other[4]{12, 34, 56, 78}; + + sp_dyn = gsl::span{other}; + sp_three = gsl::span{stl}; + sp_const_dyn = gsl::span{other}; + sp_const_three = gsl::span{stl}; + + EXPECT_TRUE(sp_dyn.data() == std::begin(other)); + EXPECT_TRUE(sp_three.data() == stl.data()); + EXPECT_TRUE(sp_const_dyn.data() == std::begin(other)); + EXPECT_TRUE(sp_const_three.data() == stl.data()); + EXPECT_TRUE(sp_dyn.size() == 4); + EXPECT_TRUE(sp_three.size() == 3); + EXPECT_TRUE(sp_const_dyn.size() == 4); + EXPECT_TRUE(sp_const_three.size() == 3); + } + { + gsl::span::iterator it_dyn{}; + + { + gsl::span sp_dyn(arr); + it_dyn = sp_dyn.begin(); + } + + EXPECT_TRUE(*it_dyn == arr[0]); + EXPECT_TRUE(it_dyn[2] == arr[2]); + + gsl::span::iterator it_three{}; + + { + gsl::span sp_three(stl); + it_three = sp_three.begin(); + } + + EXPECT_TRUE(*it_three == stl[0]); + EXPECT_TRUE(it_three[2] == stl[2]); + } + + { + int sequence[9]{10, 20, 30, 40, 50, 60, 70, 80, 90}; + + const gsl::span sp_dyn(sequence); + const gsl::span sp_nine(sequence); + + auto first_3 = sp_dyn.first<3>(); + auto first_4 = sp_nine.first<4>(); + auto first_5 = sp_dyn.first(5); + auto first_6 = sp_nine.first(6); + static_assert(noexcept(sp_dyn.first<3>()), "noexcept(sp_dyn.first<3>())"); // strengthened + static_assert(noexcept(sp_nine.first<4>()), "noexcept(sp_nine.first<4>())"); // strengthened + static_assert(noexcept(sp_dyn.first(5)), "noexcept(sp_dyn.first(5))"); // strengthened + static_assert(noexcept(sp_nine.first(6)), "noexcept(sp_nine.first(6))"); // strengthened + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + EXPECT_TRUE(first_3.data() == std::begin(sequence)); + EXPECT_TRUE(first_4.data() == std::begin(sequence)); + EXPECT_TRUE(first_5.data() == std::begin(sequence)); + EXPECT_TRUE(first_6.data() == std::begin(sequence)); + EXPECT_TRUE(first_3.size() == 3); + EXPECT_TRUE(first_4.size() == 4); + EXPECT_TRUE(first_5.size() == 5); + EXPECT_TRUE(first_6.size() == 6); + + auto last_3 = sp_dyn.last<3>(); + auto last_4 = sp_nine.last<4>(); + auto last_5 = sp_dyn.last(5); + auto last_6 = sp_nine.last(6); + static_assert(noexcept(sp_dyn.last<3>()), "noexcept(sp_dyn.last<3>())"); // strengthened + static_assert(noexcept(sp_nine.last<4>()), "noexcept(sp_nine.last<4>())"); // strengthened + static_assert(noexcept(sp_dyn.last(5)), "noexcept(sp_dyn.last(5))"); // strengthened + static_assert(noexcept(sp_nine.last(6)), "noexcept(sp_nine.last(6))"); // strengthened + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + EXPECT_TRUE(last_3.data() == std::begin(sequence) + 6); + EXPECT_TRUE(last_4.data() == std::begin(sequence) + 5); + EXPECT_TRUE(last_5.data() == std::begin(sequence) + 4); + EXPECT_TRUE(last_6.data() == std::begin(sequence) + 3); + EXPECT_TRUE(last_3.size() == 3); + EXPECT_TRUE(last_4.size() == 4); + EXPECT_TRUE(last_5.size() == 5); + EXPECT_TRUE(last_6.size() == 6); + + auto offset_3 = sp_dyn.subspan<3>(); + auto offset_4 = sp_nine.subspan<4>(); + auto offset_5 = sp_dyn.subspan(5); + auto offset_6 = sp_nine.subspan(6); + static_assert(noexcept(sp_dyn.subspan<3>()), + "noexcept(sp_dyn.subspan<3>())"); // strengthened + static_assert(noexcept(sp_nine.subspan<4>()), + "noexcept(sp_nine.subspan<4>())"); // strengthened + static_assert(noexcept(sp_dyn.subspan(5)), "noexcept(sp_dyn.subspan(5))"); // strengthened + static_assert(noexcept(sp_nine.subspan(6)), "noexcept(sp_nine.subspan(6))"); // strengthened + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + EXPECT_TRUE(offset_3.data() == std::begin(sequence) + 3); + EXPECT_TRUE(offset_4.data() == std::begin(sequence) + 4); + EXPECT_TRUE(offset_5.data() == std::begin(sequence) + 5); + EXPECT_TRUE(offset_6.data() == std::begin(sequence) + 6); + EXPECT_TRUE(offset_3.size() == 6); + EXPECT_TRUE(offset_4.size() == 5); + EXPECT_TRUE(offset_5.size() == 4); + EXPECT_TRUE(offset_6.size() == 3); + + auto subspan_3 = sp_dyn.subspan<3, 2>(); + auto subspan_4 = sp_nine.subspan<4, 2>(); + auto subspan_5 = sp_dyn.subspan(5, 2); + auto subspan_6 = sp_nine.subspan(6, 2); + static_assert(noexcept(sp_dyn.subspan<3, 2>()), + "noexcept(sp_dyn.subspan<3, 2>())"); // strengthened + static_assert(noexcept(sp_nine.subspan<4, 2>()), + "noexcept(sp_nine.subspan<4, 2>())"); // strengthened + static_assert(noexcept(sp_dyn.subspan(5, 2)), + "noexcept(sp_dyn.subspan(5, 2))"); // strengthened + static_assert(noexcept(sp_nine.subspan(6, 2)), + "noexcept(sp_nine.subspan(6, 2))"); // strengthened + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + EXPECT_TRUE(subspan_3.data() == std::begin(sequence) + 3); + EXPECT_TRUE(subspan_4.data() == std::begin(sequence) + 4); + EXPECT_TRUE(subspan_5.data() == std::begin(sequence) + 5); + EXPECT_TRUE(subspan_6.data() == std::begin(sequence) + 6); + EXPECT_TRUE(subspan_3.size() == 2); + EXPECT_TRUE(subspan_4.size() == 2); + EXPECT_TRUE(subspan_5.size() == 2); + EXPECT_TRUE(subspan_6.size() == 2); + + static_assert(noexcept(sp_dyn.size()), "noexcept(sp_dyn.size())"); + static_assert(noexcept(sp_dyn.size_bytes()), "noexcept(sp_dyn.size_bytes())"); + static_assert(noexcept(sp_dyn.empty()), "noexcept(sp_dyn.empty())"); + static_assert(noexcept(sp_dyn[0]), "noexcept(sp_dyn[0])"); // strengthened + static_assert(noexcept(sp_dyn.front()), "noexcept(sp_dyn.front())"); // strengthened + static_assert(noexcept(sp_dyn.back()), "noexcept(sp_dyn.back())"); // strengthened + static_assert(noexcept(sp_dyn.data()), "noexcept(sp_dyn.data())"); + static_assert(noexcept(sp_dyn.begin()), "noexcept(sp_dyn.begin())"); + static_assert(noexcept(sp_dyn.end()), "noexcept(sp_dyn.end())"); + static_assert(noexcept(sp_dyn.rbegin()), "noexcept(sp_dyn.rbegin())"); + static_assert(noexcept(sp_dyn.rend()), "noexcept(sp_dyn.rend())"); + + static_assert(noexcept(sp_nine.size()), "noexcept(sp_nine.size())"); + static_assert(noexcept(sp_nine.size_bytes()), "noexcept(sp_nine.size_bytes())"); + static_assert(noexcept(sp_nine.empty()), "noexcept(sp_nine.empty())"); + static_assert(noexcept(sp_nine[0]), "noexcept(sp_nine[0])"); // strengthened + static_assert(noexcept(sp_nine.front()), "noexcept(sp_nine.front())"); // strengthened + static_assert(noexcept(sp_nine.back()), "noexcept(sp_nine.back())"); // strengthened + static_assert(noexcept(sp_nine.data()), "noexcept(sp_nine.data())"); + static_assert(noexcept(sp_nine.begin()), "noexcept(sp_nine.begin())"); + static_assert(noexcept(sp_nine.end()), "noexcept(sp_nine.end())"); + static_assert(noexcept(sp_nine.rbegin()), "noexcept(sp_nine.rbegin())"); + static_assert(noexcept(sp_nine.rend()), "noexcept(sp_nine.rend())"); + + EXPECT_TRUE(sp_dyn.size() == 9); + EXPECT_TRUE(sp_nine.size() == 9); + + EXPECT_TRUE(sp_dyn.size_bytes() == 9 * sizeof(int)); + EXPECT_TRUE(sp_nine.size_bytes() == 9 * sizeof(int)); + + EXPECT_TRUE(!sp_dyn.empty()); + EXPECT_TRUE(!sp_nine.empty()); + + EXPECT_TRUE(sp_dyn[0] == 10); + EXPECT_TRUE(sp_nine[0] == 10); + EXPECT_TRUE(sp_dyn[8] == 90); + EXPECT_TRUE(sp_nine[8] == 90); + + EXPECT_TRUE(sp_dyn.front() == 10); + EXPECT_TRUE(sp_nine.front() == 10); + + EXPECT_TRUE(sp_dyn.back() == 90); + EXPECT_TRUE(sp_nine.back() == 90); + + EXPECT_TRUE(&sp_dyn.front() == std::begin(sequence)); + EXPECT_TRUE(&sp_nine.front() == std::begin(sequence)); + EXPECT_TRUE(&sp_dyn[4] == std::begin(sequence) + 4); + EXPECT_TRUE(&sp_nine[4] == std::begin(sequence) + 4); + EXPECT_TRUE(&sp_dyn.back() == std::begin(sequence) + 8); + EXPECT_TRUE(&sp_nine.back() == std::begin(sequence) + 8); + + EXPECT_TRUE(sp_dyn.data() == std::begin(sequence)); + EXPECT_TRUE(sp_nine.data() == std::begin(sequence)); + + EXPECT_TRUE(*sp_dyn.begin() == 10); + EXPECT_TRUE(*sp_nine.begin() == 10); + + EXPECT_TRUE(sp_dyn.end()[-2] == 80); + EXPECT_TRUE(sp_nine.end()[-2] == 80); + + EXPECT_TRUE(*sp_dyn.rbegin() == 90); + EXPECT_TRUE(*sp_nine.rbegin() == 90); + + EXPECT_TRUE(sp_dyn.rend()[-2] == 20); + EXPECT_TRUE(sp_nine.rend()[-2] == 20); + + static_assert(is_same::iterator>::value, + "is_same::iterator>::value"); + static_assert(is_same::iterator>::value, + "is_same::iterator>::value"); + static_assert(is_same::iterator>::value, + "is_same::iterator>::value"); + static_assert(is_same::iterator>::value, + "is_same::iterator>::value"); + static_assert( + is_same::reverse_iterator>::value, + "is_same::reverse_iterator>::value"); + static_assert( + is_same::reverse_iterator>::value, + "is_same::reverse_iterator>::value"); + static_assert(is_same::reverse_iterator>::value, + "is_same::reverse_iterator>::value"); + static_assert( + is_same::reverse_iterator>::value, + "is_same::reverse_iterator>::value"); + } + { + int sequence[9]{10, 20, 30, 40, 50, 60, 70, 80, 90}; + + constexpr size_t SizeBytes = sizeof(sequence); + + const gsl::span sp_dyn(sequence); + const gsl::span sp_nine(sequence); + const gsl::span sp_const_dyn(sequence); + const gsl::span sp_const_nine(sequence); + + static_assert(noexcept(as_bytes(sp_dyn)), "noexcept(as_bytes(sp_dyn))"); + static_assert(noexcept(as_bytes(sp_nine)), "noexcept(as_bytes(sp_nine))"); + static_assert(noexcept(as_bytes(sp_const_dyn)), "noexcept(as_bytes(sp_const_dyn))"); + static_assert(noexcept(as_bytes(sp_const_nine)), "noexcept(as_bytes(sp_const_nine))"); + static_assert(noexcept(as_writable_bytes(sp_dyn)), "noexcept(as_writable_bytes(sp_dyn))"); + static_assert(noexcept(as_writable_bytes(sp_nine)), "noexcept(as_writable_bytes(sp_nine))"); + + auto sp_1 = as_bytes(sp_dyn); + auto sp_2 = as_bytes(sp_nine); + auto sp_3 = as_bytes(sp_const_dyn); + auto sp_4 = as_bytes(sp_const_nine); + auto sp_5 = as_writable_bytes(sp_dyn); + auto sp_6 = as_writable_bytes(sp_nine); + + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + static_assert(is_same>::value, + "is_same>::value"); + + EXPECT_TRUE(sp_1.data() == reinterpret_cast(begin(sequence))); + EXPECT_TRUE(sp_2.data() == reinterpret_cast(begin(sequence))); + EXPECT_TRUE(sp_3.data() == reinterpret_cast(begin(sequence))); + EXPECT_TRUE(sp_4.data() == reinterpret_cast(begin(sequence))); + EXPECT_TRUE(sp_5.data() == reinterpret_cast(begin(sequence))); + EXPECT_TRUE(sp_6.data() == reinterpret_cast(begin(sequence))); + + EXPECT_TRUE(sp_1.size() == SizeBytes); + EXPECT_TRUE(sp_2.size() == SizeBytes); + EXPECT_TRUE(sp_3.size() == SizeBytes); + EXPECT_TRUE(sp_4.size() == SizeBytes); + EXPECT_TRUE(sp_5.size() == SizeBytes); + EXPECT_TRUE(sp_6.size() == SizeBytes); + } +} + +// assertions for span's definition +static_assert(std::is_same::value, + "gsl::dynamic_extent must be respresented as std::size_t"); +static_assert(gsl::dynamic_extent == static_cast(-1), + "gsl::dynamic_extent must be defined as the max value of std::size_t"); + +static_assert(std::is_same::extent), const std::size_t>::value, + "Ensure that the type of gsl::span::extent is std::size_t"); +static_assert(gsl::span::extent == gsl::dynamic_extent, + "gsl::span::extent should be equivalent to gsl::dynamic_extent"); + +static_assert(std::is_same::extent), const std::size_t>::value, + "Ensure that the type of gsl::span::extent is std::size_t"); +static_assert(gsl::span::extent == 3, "Ensure that span::extent is equal to 3"); + +static_assert(std::is_same::element_type, int>::value, + "span::element_type should be int"); +static_assert(std::is_same::value_type, int>::value, + "span::value_type should be int"); +static_assert(std::is_same::size_type, std::size_t>::value, + "span::size_type should be std::size_t"); +static_assert(std::is_same::difference_type, ptrdiff_t>::value, + "span::difference_type should be std::ptrdiff_t"); +static_assert(std::is_same::pointer, int*>::value, + "span::pointer should be int*"); +static_assert(std::is_same::const_pointer, const int*>::value, + "span::const_pointer should be const int*"); +static_assert(std::is_same::reference, int&>::value, + "span::reference should be int&"); +static_assert(std::is_same::const_reference, const int&>::value, + "span::const_reference should be const int&"); + +static_assert(std::is_same::element_type, int>::value, + "span::element_type should be int"); +static_assert(std::is_same::value_type, int>::value, + "span::value_type should be int"); +static_assert(std::is_same::size_type, std::size_t>::value, + "span::size_type should be std::size_t"); +static_assert(std::is_same::difference_type, ptrdiff_t>::value, + "span::difference_type should be std::ptrdiff_t"); +static_assert(std::is_same::pointer, int*>::value, + "span::pointer should be int*"); +static_assert(std::is_same::const_pointer, const int*>::value, + "span::const_pointer should be const int*"); +static_assert(std::is_same::reference, int&>::value, + "span::reference should be int&"); +static_assert(std::is_same::const_reference, const int&>::value, + "span::const_reference should be const int&"); + +static_assert(std::is_same::element_type, const int>::value, + "span::element_type should be const int"); +static_assert(std::is_same::value_type, int>::value, + "span::value_type should be int"); +static_assert(std::is_same::size_type, std::size_t>::value, + "span::size_type should be size_t"); +static_assert(std::is_same::difference_type, ptrdiff_t>::value, + "span::difference_type should be ptrdiff_t"); +static_assert(std::is_same::pointer, const int*>::value, + "span::pointer should be const int*"); +static_assert(std::is_same::const_pointer, const int*>::value, + "span::const_pointer should be const int*"); +static_assert(std::is_same::reference, const int&>::value, + "span::reference should be const int&"); +static_assert(std::is_same::const_reference, const int&>::value, + "span::const_reference should be const int&"); + +static_assert(std::is_same::element_type, const int>::value, + "span::element_type should be const int"); +static_assert(std::is_same::value_type, int>::value, + "span::value_type should be int"); +static_assert(std::is_same::size_type, std::size_t>::value, + "span::size_type should be size_t"); +static_assert(std::is_same::difference_type, ptrdiff_t>::value, + "span::difference_type should be ptrdiff_t"); +static_assert(std::is_same::pointer, const int*>::value, + "span::pointer should be const int*"); +static_assert(std::is_same::const_pointer, const int*>::value, + "span::const_pointer should be const int*"); +static_assert(std::is_same::reference, const int&>::value, + "span::reference should be const int&"); +static_assert(std::is_same::const_reference, const int&>::value, + "span::const_reference should be const int&"); + +// assertions for span_iterator +static_assert(std::is_same::iterator>::pointer, int*>::value, + "span::iterator's pointer should be int*"); +static_assert( + std::is_same::reverse_iterator, + std::reverse_iterator::iterator>>::value, + "span::reverse_iterator should equal std::reverse_iterator::iterator>"); + +static_assert(std::is_same::iterator>::pointer, int*>::value, + "span::iterator's pointer should be int*"); +static_assert( + std::is_same::reverse_iterator, + std::reverse_iterator::iterator>>::value, + "span::reverse_iterator should equal std::reverse_iterator::iterator>"); + +static_assert( + std::is_same::iterator>::pointer, const int*>::value, + "span::iterator's pointer should be int*"); +static_assert(std::is_same::reverse_iterator, + std::reverse_iterator::iterator>>::value, + "span::reverse_iterator should equal std::reverse_iterator::iterator>"); + +static_assert(std::is_same::iterator>::pointer, + const int*>::value, + "span::iterator's pointer should be int*"); +static_assert(std::is_same::reverse_iterator, + std::reverse_iterator::iterator>>::value, + "span::reverse_iterator should equal std::reverse_iterator::iterator>"); + +// copyability assertions +static_assert(std::is_trivially_copyable>::value, + "span should be trivially copyable"); +static_assert(std::is_trivially_copyable::iterator>::value, + "span::iterator should be trivially copyable"); + +static_assert(std::is_trivially_copyable>::value, + "span should be trivially copyable"); +static_assert(std::is_trivially_copyable::iterator>::value, + "span::iterator should be trivially copyable"); + +static_assert(std::is_trivially_copyable>::value, + "span should be trivially copyable"); +static_assert(std::is_trivially_copyable::iterator>::value, + "span::iterator should be trivially copyable"); + +static_assert(std::is_trivially_copyable>::value, + "span should be trivially copyable"); +static_assert(std::is_trivially_copyable::iterator>::value, + "span::iterator should be trivially copyable"); + +// nothrow constructible assertions +static_assert(std::is_nothrow_constructible, int*, std::size_t>::value, + "std::is_nothrow_constructible, int*, std::size_t>"); +static_assert(std::is_nothrow_constructible, int*, std::uint16_t>::value, + "std::is_nothrow_constructible, int*, std::uint16_t>"); +static_assert(std::is_nothrow_constructible, int*, int*>::value, + "std::is_nothrow_constructible, int*, int*>"); +static_assert(std::is_nothrow_constructible, int (&)[3]>::value, + "std::is_nothrow_constructible, int(&)[3]>"); +static_assert(std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert(std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert(std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert(std::is_nothrow_constructible, std::array&>::value, + "std::is_nothrow_constructible, std::array&>"); + +static_assert(std::is_nothrow_constructible, int*, std::size_t>::value, + "std::is_nothrow_constructible, int*, std::size_t>"); +static_assert(std::is_nothrow_constructible, int*, std::uint16_t>::value, + "std::is_nothrow_constructible, int*, std::uint16_t>"); +static_assert(std::is_nothrow_constructible, int*, int*>::value, + "std::is_nothrow_constructible, int*, int*>"); +static_assert(std::is_nothrow_constructible, int (&)[3]>::value, + "std::is_nothrow_constructible, int(&)[3]>"); +static_assert(std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert(std::is_nothrow_constructible, std::array&>::value, + "std::is_nothrow_constructible, std::array&>"); + +static_assert(std::is_nothrow_constructible, int*, std::size_t>::value, + "std::is_nothrow_constructible, int*, std::size_t>"); +static_assert(std::is_nothrow_constructible, int*, int*>::value, + "std::is_nothrow_constructible, int*, int*>"); +static_assert(std::is_nothrow_constructible, int*, const int*>::value, + "std::is_nothrow_constructible, int*, const int*>"); +static_assert(std::is_nothrow_constructible, int (&)[3]>::value, + "std::is_nothrow_constructible, int(&)[3]>"); +static_assert(std::is_nothrow_constructible, const int*, int*>::value, + "std::is_nothrow_constructible, const int*, int*>"); +static_assert(std::is_nothrow_constructible, const int*, const int*>::value, + "std::is_nothrow_constructible, const int*, const int*>"); +static_assert(std::is_nothrow_constructible, const int*, std::size_t>::value, + "std::is_nothrow_constructible, const int*, std::size_t>"); +static_assert(std::is_nothrow_constructible, const int (&)[3]>::value, + "std::is_nothrow_constructible, const int(&)[3]>"); +static_assert(std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert(std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert(std::is_nothrow_constructible, std::array&>::value, + "std::is_nothrow_constructible, std::array&>"); +static_assert(std::is_nothrow_constructible, const std::array&>::value, + "std::is_nothrow_constructible, const std::array&>"); + +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); + +static_assert(std::is_nothrow_constructible, Base (&)[3]>::value, + "std::is_nothrow_constructible, Base(&)[3]>"); +static_assert(std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert(std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert(std::is_nothrow_constructible, std::array&>::value, + "std::is_nothrow_constructible, std::array&>"); + +static_assert(std::is_nothrow_constructible, Base (&)[3]>::value, + "std::is_nothrow_constructible, Base(&)[3]>"); +static_assert(std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert(std::is_nothrow_constructible, std::array&>::value, + "std::is_nothrow_constructible, std::array&>"); + +static_assert(std::is_nothrow_constructible, Base (&)[3]>::value, + "std::is_nothrow_constructible, Base(&)[3]>"); +static_assert(std::is_nothrow_constructible, const Base (&)[3]>::value, + "std::is_nothrow_constructible, const Base(&)[3]>"); +static_assert(std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert(std::is_nothrow_constructible, std::array&>::value, + "std::is_nothrow_constructible, std::array&>"); +static_assert( + std::is_nothrow_constructible, const std::array&>::value, + "std::is_nothrow_constructible, const std::array&>"); + +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); +static_assert( + std::is_nothrow_constructible, const gsl::span&>::value, + "std::is_nothrow_constructible, const gsl::span&>"); + +// non-constructible assertions +static_assert(!std::is_constructible, const int*, int*>::value, + "!std::is_constructible, const int*, int*>"); +static_assert(!std::is_constructible, const int*, const int*>::value, + "!std::is_constructible, const int*, const int*>"); +static_assert(!std::is_constructible, const int*, double*>::value, + "!std::is_constructible, const int*, double*>"); +static_assert(!std::is_constructible, const int*, std::size_t>::value, + "!std::is_constructible, const int*, std::size_t>"); +static_assert(!std::is_constructible, const int (&)[3]>::value, + "!std::is_constructible, const int(&)[3]>"); +static_assert(!std::is_constructible, double*, int*>::value, + "!std::is_constructible, double*, int*>"); +static_assert(!std::is_constructible, double*, const int*>::value, + "!std::is_constructible, double*, const int*>"); +static_assert(!std::is_constructible, double*, double*>::value, + "!std::is_constructible, double*, double*>"); +static_assert(!std::is_constructible, double*, std::size_t>::value, + "!std::is_constructible, double*, std::size_t>"); +static_assert(!std::is_constructible, double (&)[3]>::value, + "!std::is_constructible, double(&)[3]>"); +static_assert(!std::is_constructible, int*, double*>::value, + "!std::is_constructible, int*, double*>"); +static_assert(!std::is_constructible, std::size_t, int*>::value, + "!std::is_constructible, std::size_t, int*>"); +static_assert(!std::is_constructible, std::size_t, std::size_t>::value, + "!std::is_constructible, std::size_t, std::size_t>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, std::array&>::value, + "!std::is_constructible, std::array&>"); +static_assert(!std::is_constructible, const std::array&>::value, + "!std::is_constructible, const std::array&>"); + +static_assert(!std::is_constructible, int*, double*>::value, + "!std::is_constructible, int*, double*>"); +static_assert(!std::is_constructible, int (&)[500]>::value, + "!std::is_constructible, int(&)[500]>"); +static_assert(!std::is_constructible, const int*, int*>::value, + "!std::is_constructible, const int*, int*>"); +static_assert(!std::is_constructible, const int*, const int*>::value, + "!std::is_constructible, const int*, const int*>"); +static_assert(!std::is_constructible, const int*, std::size_t>::value, + "!std::is_constructible, const int*, std::size_t>"); +static_assert(!std::is_constructible, const int*, double*>::value, + "!std::is_constructible, const int*, double*>"); +static_assert(!std::is_constructible, const int (&)[3]>::value, + "!std::is_constructible, const int(&)[3]>"); +static_assert(!std::is_constructible, double*, std::size_t>::value, + "!std::is_constructible, double*, std::size_t>"); +static_assert(!std::is_constructible, double*, int*>::value, + "!std::is_constructible, double*, int*>"); +static_assert(!std::is_constructible, double*, const int*>::value, + "!std::is_constructible, double*, const int*>"); +static_assert(!std::is_constructible, double*, double*>::value, + "!std::is_constructible, double*, double*>"); +static_assert(!std::is_constructible, double (&)[3]>::value, + "!std::is_constructible, double(&)[3]>"); + +static_assert(!std::is_constructible, std::size_t, int*>::value, + "!std::is_constructible, std::size_t, int*>"); +static_assert(!std::is_constructible, std::size_t, std::size_t>::value, + "!std::is_constructible, std::size_t, std::size_t>"); +static_assert(!std::is_constructible, std::array&>::value, + "!std::is_constructible, std::array&>"); +static_assert(!std::is_constructible, std::array&>::value, + "!std::is_constructible, std::array&>"); +static_assert(!std::is_constructible, const std::array&>::value, + "!std::is_constructible, const std::array&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); + +static_assert(!std::is_constructible, double (&)[3]>::value, + "!std::is_constructible, double(&)[3]>"); +static_assert(!std::is_constructible, std::array&>::value, + "!std::is_constructible, std::array&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); + +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert( + !std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); + +static_assert(!std::is_constructible, Derived (&)[3]>::value, + "!std::is_constructible, Derived(&)[3]>"); +static_assert(!std::is_constructible, std::array&>::value, + "!std::is_constructible, std::array&>"); +static_assert(!std::is_constructible, std::vector&>::value, + "!std::is_constructible, std::vector&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); + +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, Derived (&)[3]>::value, + "!std::is_constructible, Derived(&)[3]>"); +static_assert(!std::is_constructible, std::array&>::value, + "!std::is_constructible, std::array&>"); + +static_assert(!std::is_constructible, Derived (&)[3]>::value, + "!std::is_constructible, Derived(&)[3]>"); +static_assert(!std::is_constructible, const Derived (&)[3]>::value, + "!std::is_constructible, const Derived(&)[3]>"); +static_assert(!std::is_constructible, std::array&>::value, + "!std::is_constructible, std::array&>"); +static_assert(!std::is_constructible, const std::array&>::value, + "!std::is_constructible, const std::array&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert( + !std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); + +static_assert(!std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); +static_assert( + !std::is_constructible, const gsl::span&>::value, + "!std::is_constructible, const gsl::span&>"); + +static_assert(!std::is_constructible, std::array&>::value, + "!std::is_constructible, std::array&>"); +static_assert(!std::is_constructible, const std::array&>::value, + "!std::is_constructible, const std::array&>"); + +// Explicit construction enabled in P1976R2 +static_assert(std::is_constructible, const gsl::span&>::value, + "std::is_constructible, const gsl::span&>"); +static_assert(std::is_constructible, const gsl::span&>::value, + "std::is_constructible, const gsl::span&>"); +static_assert(std::is_constructible, const gsl::span&>::value, + "std::is_constructible, const gsl::span&>"); + +// no throw copy constructor +static_assert(std::is_nothrow_copy_constructible>::value, + "std::is_nothrow_copy_constructible>"); +static_assert(std::is_nothrow_copy_constructible>::value, + "std::is_nothrow_copy_constructible>"); +static_assert(std::is_nothrow_copy_constructible>::value, + "std::is_nothrow_copy_constructible>"); +static_assert(std::is_nothrow_copy_constructible>::value, + "std::is_nothrow_copy_constructible>"); + +// no throw copy assignment +static_assert(std::is_nothrow_copy_assignable>::value, + "std::is_nothrow_copy_assignable>"); +static_assert(std::is_nothrow_copy_assignable>::value, + "std::is_nothrow_copy_assignable>"); +static_assert(std::is_nothrow_copy_assignable>::value, + "std::is_nothrow_copy_assignable>"); +static_assert(std::is_nothrow_copy_assignable>::value, + "std::is_nothrow_copy_assignable>"); + +// no throw destruction +static_assert(std::is_nothrow_destructible>::value, + "std::is_nothrow_destructible>"); +static_assert(std::is_nothrow_destructible>::value, + "std::is_nothrow_destructible>"); +static_assert(std::is_nothrow_destructible>::value, + "std::is_nothrow_destructible>"); + +// conversions +static_assert(std::is_convertible>::value, + "std::is_convertible>"); +static_assert(std::is_convertible>::value, + "std::is_convertible>"); +static_assert(std::is_convertible>::value, + "std::is_convertible>"); + +static_assert(std::is_convertible>::value, + "std::is_convertible>"); + +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); + +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); + +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); + +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); + +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); + +static_assert(std::is_convertible&, gsl::span>::value, + "std::is_convertible&, gsl::span>"); + +#if __cplusplus >= 201703l +template +static constexpr bool AsWritableBytesCompilesFor = false; + +template +static constexpr bool + AsWritableBytesCompilesFor()))>> = true; + +static_assert(AsWritableBytesCompilesFor>, + "AsWritableBytesCompilesFor>"); +static_assert(AsWritableBytesCompilesFor>, + "AsWritableBytesCompilesFor>"); +static_assert(!AsWritableBytesCompilesFor>, + "!AsWritableBytesCompilesFor>"); +static_assert(!AsWritableBytesCompilesFor>, + "!AsWritableBytesCompilesFor>"); +#endif // __cplusplus >= 201703l diff --git a/deps/GSL/tests/span_ext_tests.cpp b/deps/GSL/tests/span_ext_tests.cpp new file mode 100644 index 0000000..bc29007 --- /dev/null +++ b/deps/GSL/tests/span_ext_tests.cpp @@ -0,0 +1,380 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include + +#include // for span and span_ext +#include // for narrow_cast, at + +#include // for array +#include // for terminate +#include // for cerr +#include // for vector + +using namespace std; +using namespace gsl; + +#include "deathTestCommon.h" + +TEST(span_ext_test, make_span_from_pointer_length_constructor) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. from_pointer_length_constructor"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + int arr[4] = {1, 2, 3, 4}; + + { + auto s = make_span(&arr[0], 2); + EXPECT_TRUE(s.size() == 2); + EXPECT_TRUE(s.data() == &arr[0]); + EXPECT_TRUE(s[0] == 1); + EXPECT_TRUE(s[1] == 2); + } + + { + int* p = nullptr; + auto s = make_span(p, narrow_cast::size_type>(0)); + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == nullptr); + } + + { + int* p = nullptr; + auto workaround_macro = [=]() { make_span(p, 2); }; + EXPECT_DEATH(workaround_macro(), expected); + } +} + +TEST(span_ext_test, make_span_from_pointer_pointer_construction) +{ + int arr[4] = {1, 2, 3, 4}; + + { + auto s = make_span(&arr[0], &arr[2]); + EXPECT_TRUE(s.size() == 2); + EXPECT_TRUE(s.data() == &arr[0]); + EXPECT_TRUE(s[0] == 1); + EXPECT_TRUE(s[1] == 2); + } + + { + auto s = make_span(&arr[0], &arr[0]); + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == &arr[0]); + } + + { + int* p = nullptr; + auto s = make_span(p, p); + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == nullptr); + } +} + +TEST(span_ext_test, make_span_from_array_constructor) +{ + int arr[5] = {1, 2, 3, 4, 5}; + int arr2d[2][3] = {1, 2, 3, 4, 5, 6}; + int arr3d[2][3][2] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; + + { + const auto s = make_span(arr); + EXPECT_TRUE(s.size() == 5); + EXPECT_TRUE(s.data() == std::addressof(arr[0])); + } + + { + const auto s = make_span(std::addressof(arr2d[0]), 1); + EXPECT_TRUE(s.size() == 1); + EXPECT_TRUE(s.data() == std::addressof(arr2d[0])); + } + + { + const auto s = make_span(std::addressof(arr3d[0]), 1); + EXPECT_TRUE(s.size() == 1); + EXPECT_TRUE(s.data() == std::addressof(arr3d[0])); + } +} + +TEST(span_ext_test, make_span_from_dynamic_array_constructor) +{ + double(*arr)[3][4] = new double[100][3][4]; + + { + auto s = make_span(&arr[0][0][0], 10); + EXPECT_TRUE(s.size() == 10); + EXPECT_TRUE(s.data() == &arr[0][0][0]); + } + + delete[] arr; +} + +TEST(span_ext_test, make_span_from_std_array_constructor) +{ + std::array arr = {1, 2, 3, 4}; + + { + auto s = make_span(arr); + EXPECT_TRUE(s.size() == arr.size()); + EXPECT_TRUE(s.data() == arr.data()); + } + + // This test checks for the bug found in gcc 6.1, 6.2, 6.3, 6.4, 6.5 7.1, 7.2, 7.3 - issue #590 + { + gsl::span s1 = make_span(arr); + + static gsl::span s2; + s2 = s1; + +#if defined(__GNUC__) && __GNUC__ == 6 && (__GNUC_MINOR__ == 4 || __GNUC_MINOR__ == 5) && \ + __GNUC_PATCHLEVEL__ == 0 && defined(__OPTIMIZE__) + // Known to be broken in gcc 6.4 and 6.5 with optimizations + // Issue in gcc: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=83116 + EXPECT_TRUE(s1.size() == 4); + EXPECT_TRUE(s2.size() == 0); +#else + EXPECT_TRUE(s1.size() == s2.size()); +#endif + } +} + +TEST(span_ext_test, make_span_from_const_std_array_constructor) +{ + const std::array arr = {1, 2, 3, 4}; + + { + auto s = make_span(arr); + EXPECT_TRUE(s.size() == arr.size()); + EXPECT_TRUE(s.data() == arr.data()); + } +} + +TEST(span_ext_test, make_span_from_std_array_const_constructor) +{ + std::array arr = {1, 2, 3, 4}; + + { + auto s = make_span(arr); + EXPECT_TRUE(s.size() == arr.size()); + EXPECT_TRUE(s.data() == arr.data()); + } +} + +TEST(span_ext_test, make_span_from_container_constructor) +{ + std::vector v = {1, 2, 3}; + const std::vector cv = v; + + { + auto s = make_span(v); + EXPECT_TRUE(s.size() == v.size()); + EXPECT_TRUE(s.data() == v.data()); + + auto cs = make_span(cv); + EXPECT_TRUE(cs.size() == cv.size()); + EXPECT_TRUE(cs.data() == cv.data()); + } +} + +TEST(span_test, interop_with_gsl_at) +{ + std::vector vec{1, 2, 3, 4, 5}; + gsl::span sp{vec}; + + std::vector cvec{1, 2, 3, 4, 5}; + gsl::span csp{cvec}; + + for (gsl::index i = 0; i < gsl::narrow_cast(vec.size()); ++i) + { + EXPECT_TRUE(&gsl::at(sp, i) == &vec[gsl::narrow_cast(i)]); + EXPECT_TRUE(&gsl::at(csp, i) == &cvec[gsl::narrow_cast(i)]); + } + + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. interop_with_gsl_at"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + EXPECT_DEATH(gsl::at(sp, -1), expected); + EXPECT_DEATH(gsl::at(sp, gsl::narrow_cast(sp.size())), expected); + EXPECT_DEATH(gsl::at(csp, -1), expected); + EXPECT_DEATH(gsl::at(csp, gsl::narrow_cast(sp.size())), expected); +} + +TEST(span_ext_test, iterator_free_functions) +{ + int a[] = {1, 2, 3, 4}; + gsl::span s{a}; + + EXPECT_TRUE((std::is_same::value)); + EXPECT_TRUE((std::is_same::value)); + + EXPECT_TRUE((std::is_same::value)); + EXPECT_TRUE((std::is_same::value)); + + EXPECT_TRUE((std::is_same::value)); + EXPECT_TRUE((std::is_same::value)); + + EXPECT_TRUE((std::is_same::value)); + EXPECT_TRUE((std::is_same::value)); + + EXPECT_TRUE(s.begin() == begin(s)); + EXPECT_TRUE(s.end() == end(s)); + + EXPECT_TRUE(s.rbegin() == rbegin(s)); + EXPECT_TRUE(s.rend() == rend(s)); + + EXPECT_TRUE(s.begin() == cbegin(s)); + EXPECT_TRUE(s.end() == cend(s)); + + EXPECT_TRUE(s.rbegin() == crbegin(s)); + EXPECT_TRUE(s.rend() == crend(s)); +} + +TEST(span_ext_test, ssize_free_function) +{ + int a[] = {1, 2, 3, 4}; + gsl::span s{a}; + + EXPECT_FALSE((std::is_same::value)); + EXPECT_TRUE(s.size() == static_cast(ssize(s))); +} + +#ifndef GSL_KERNEL_MODE +TEST(span_ext_test, comparison_operators) +{ + { + gsl::span s1; + gsl::span s2; + EXPECT_TRUE(s1 == s2); + EXPECT_FALSE(s1 != s2); + EXPECT_FALSE(s1 < s2); + EXPECT_TRUE(s1 <= s2); + EXPECT_FALSE(s1 > s2); + EXPECT_TRUE(s1 >= s2); + EXPECT_TRUE(s2 == s1); + EXPECT_FALSE(s2 != s1); + EXPECT_FALSE(s2 != s1); + EXPECT_TRUE(s2 <= s1); + EXPECT_FALSE(s2 > s1); + EXPECT_TRUE(s2 >= s1); + } + + { + int arr[] = {2, 1}; + gsl::span s1 = arr; + gsl::span s2 = arr; + + EXPECT_TRUE(s1 == s2); + EXPECT_FALSE(s1 != s2); + EXPECT_FALSE(s1 < s2); + EXPECT_TRUE(s1 <= s2); + EXPECT_FALSE(s1 > s2); + EXPECT_TRUE(s1 >= s2); + EXPECT_TRUE(s2 == s1); + EXPECT_FALSE(s2 != s1); + EXPECT_FALSE(s2 < s1); + EXPECT_TRUE(s2 <= s1); + EXPECT_FALSE(s2 > s1); + EXPECT_TRUE(s2 >= s1); + } + + { + int arr[] = {2, 1}; // bigger + + gsl::span s1; + gsl::span s2 = arr; + + EXPECT_TRUE(s1 != s2); + EXPECT_TRUE(s2 != s1); + EXPECT_FALSE(s1 == s2); + EXPECT_FALSE(s2 == s1); + EXPECT_TRUE(s1 < s2); + EXPECT_FALSE(s2 < s1); + EXPECT_TRUE(s1 <= s2); + EXPECT_FALSE(s2 <= s1); + EXPECT_TRUE(s2 > s1); + EXPECT_FALSE(s1 > s2); + EXPECT_TRUE(s2 >= s1); + EXPECT_FALSE(s1 >= s2); + } + + { + int arr1[] = {1, 2}; + int arr2[] = {1, 2}; + gsl::span s1 = arr1; + gsl::span s2 = arr2; + + EXPECT_TRUE(s1 == s2); + EXPECT_FALSE(s1 != s2); + EXPECT_FALSE(s1 < s2); + EXPECT_TRUE(s1 <= s2); + EXPECT_FALSE(s1 > s2); + EXPECT_TRUE(s1 >= s2); + EXPECT_TRUE(s2 == s1); + EXPECT_FALSE(s2 != s1); + EXPECT_FALSE(s2 < s1); + EXPECT_TRUE(s2 <= s1); + EXPECT_FALSE(s2 > s1); + EXPECT_TRUE(s2 >= s1); + } + + { + int arr[] = {1, 2, 3}; + + gsl::span s1 = {&arr[0], 2}; // shorter + gsl::span s2 = arr; // longer + + EXPECT_TRUE(s1 != s2); + EXPECT_TRUE(s2 != s1); + EXPECT_FALSE(s1 == s2); + EXPECT_FALSE(s2 == s1); + EXPECT_TRUE(s1 < s2); + EXPECT_FALSE(s2 < s1); + EXPECT_TRUE(s1 <= s2); + EXPECT_FALSE(s2 <= s1); + EXPECT_TRUE(s2 > s1); + EXPECT_FALSE(s1 > s2); + EXPECT_TRUE(s2 >= s1); + EXPECT_FALSE(s1 >= s2); + } + + { + int arr1[] = {1, 2}; // smaller + int arr2[] = {2, 1}; // bigger + + gsl::span s1 = arr1; + gsl::span s2 = arr2; + + EXPECT_TRUE(s1 != s2); + EXPECT_TRUE(s2 != s1); + EXPECT_FALSE(s1 == s2); + EXPECT_FALSE(s2 == s1); + EXPECT_TRUE(s1 < s2); + EXPECT_FALSE(s2 < s1); + EXPECT_TRUE(s1 <= s2); + EXPECT_FALSE(s2 <= s1); + EXPECT_TRUE(s2 > s1); + EXPECT_FALSE(s1 > s2); + EXPECT_TRUE(s2 >= s1); + EXPECT_FALSE(s1 >= s2); + } +} +#endif // GSL_KERNEL_MODE diff --git a/deps/GSL/tests/span_tests.cpp b/deps/GSL/tests/span_tests.cpp new file mode 100644 index 0000000..44ae205 --- /dev/null +++ b/deps/GSL/tests/span_tests.cpp @@ -0,0 +1,1383 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include + +#include // for byte +#include // for span, span_iterator, operator==, operator!= +#include // for narrow_cast, at + +#include // for array +#include // for ptrdiff_t +#include // for ptrdiff_t +#include // for reverse_iterator, operator-, operator== +#include // for unique_ptr, shared_ptr, make_unique, allo... +#include // for match_results, sub_match, match_results<>... +#include // for string +#include // for integral_constant<>::value, is_default_co... +#include +#include // for vector + +// the string_view include and macro are used in the deduction guide verification +#if (defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L)) +#ifdef __has_include +#if __has_include() +#include +#define HAS_STRING_VIEW +#endif // __has_include() +#endif // __has_include +#endif // (defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L)) +#if defined(__cplusplus) && __cplusplus >= 202002L +#include +#endif // __cplusplus >= 202002L + +#include "deathTestCommon.h" + +using namespace gsl; + +namespace +{ + +struct BaseClass +{ +}; +struct DerivedClass : BaseClass +{ +}; +struct AddressOverloaded +{ +#if (__cplusplus > 201402L) + [[maybe_unused]] +#endif + AddressOverloaded + operator&() const + { + return {}; + } +}; +} // namespace + +TEST(span_test, constructors) +{ + span s; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == nullptr); + + span cs; + EXPECT_TRUE(cs.size() == 0); + EXPECT_TRUE(cs.data() == nullptr); +} + +TEST(span_test, constructors_with_extent) +{ + span s; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == nullptr); + + span cs; + EXPECT_TRUE(cs.size() == 0); + EXPECT_TRUE(cs.data() == nullptr); +} + +TEST(span_test, constructors_with_bracket_init) +{ + span s{}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == nullptr); + + span cs{}; + EXPECT_TRUE(cs.size() == 0); + EXPECT_TRUE(cs.data() == nullptr); +} + +TEST(span_test, size_optimization) +{ + span s; + EXPECT_TRUE(sizeof(s) == sizeof(int*) + sizeof(ptrdiff_t)); + + span se; + EXPECT_TRUE(sizeof(se) == sizeof(int*)); +} + +TEST(span_test, from_nullptr_size_constructor) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. from_nullptr_size_constructor"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + { + span s{nullptr, narrow_cast::size_type>(0)}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == nullptr); + + span cs{nullptr, narrow_cast::size_type>(0)}; + EXPECT_TRUE(cs.size() == 0); + EXPECT_TRUE(cs.data() == nullptr); + } + { + auto workaround_macro = []() { + const span s{nullptr, narrow_cast::size_type>(0)}; + }; + EXPECT_DEATH(workaround_macro(), expected); + } + { + auto workaround_macro = []() { const span s{nullptr, 1}; }; + EXPECT_DEATH(workaround_macro(), expected); + + auto const_workaround_macro = []() { const span s{nullptr, 1}; }; + EXPECT_DEATH(const_workaround_macro(), expected); + } + { + auto workaround_macro = []() { const span s{nullptr, 1}; }; + EXPECT_DEATH(workaround_macro(), expected); + + auto const_workaround_macro = []() { const span s{nullptr, 1}; }; + EXPECT_DEATH(const_workaround_macro(), expected); + } + { + span s{nullptr, narrow_cast::size_type>(0)}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == nullptr); + + span cs{nullptr, narrow_cast::size_type>(0)}; + EXPECT_TRUE(cs.size() == 0); + EXPECT_TRUE(cs.data() == nullptr); + } +} + +TEST(span_test, from_pointer_length_constructor) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. from_pointer_length_constructor"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + int arr[4] = {1, 2, 3, 4}; + + { + for (int i = 0; i < 4; ++i) + { + { + span s = {&arr[0], narrow_cast(i)}; + EXPECT_TRUE(s.size() == narrow_cast(i)); + EXPECT_TRUE(s.data() == &arr[0]); + EXPECT_TRUE(s.empty() == (i == 0)); + for (int j = 0; j < i; ++j) EXPECT_TRUE(arr[j] == s[narrow_cast(j)]); + } + { + span s = {&arr[i], 4 - narrow_cast(i)}; + EXPECT_TRUE(s.size() == 4 - narrow_cast(i)); + EXPECT_TRUE(s.data() == &arr[i]); + EXPECT_TRUE(s.empty() == ((4 - i) == 0)); + + for (int j = 0; j < 4 - i; ++j) + EXPECT_TRUE(arr[j + i] == s[narrow_cast(j)]); + } + } + } + + { + span s{&arr[0], 2}; + EXPECT_TRUE(s.size() == 2); + EXPECT_TRUE(s.data() == &arr[0]); + EXPECT_TRUE(s[0] == 1); + EXPECT_TRUE(s[1] == 2); + } + + { + int* p = nullptr; + span s{p, narrow_cast::size_type>(0)}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == nullptr); + } + + { + int* p = nullptr; + auto workaround_macro = [=]() { const span s{p, 2}; }; + EXPECT_DEATH(workaround_macro(), expected); + } +} + +TEST(span_test, from_pointer_pointer_construction) +{ + int arr[4] = {1, 2, 3, 4}; + + { + span s{&arr[0], &arr[2]}; + EXPECT_TRUE(s.size() == 2); + EXPECT_TRUE(s.data() == &arr[0]); + EXPECT_TRUE(s[0] == 1); + EXPECT_TRUE(s[1] == 2); + } + { + span s{&arr[0], &arr[2]}; + EXPECT_TRUE(s.size() == 2); + EXPECT_TRUE(s.data() == &arr[0]); + EXPECT_TRUE(s[0] == 1); + EXPECT_TRUE(s[1] == 2); + } + + { + span s{&arr[0], &arr[0]}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == &arr[0]); + } + + { + span s{&arr[0], &arr[0]}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == &arr[0]); + } + + // this will fail the std::distance() precondition, which asserts on MSVC debug builds + //{ + // auto workaround_macro = [&]() { span s{&arr[1], &arr[0]}; }; + // EXPECT_DEATH(workaround_macro(), expected); + //} + + // this will fail the std::distance() precondition, which asserts on MSVC debug builds + //{ + // int* p = nullptr; + // auto workaround_macro = [&]() { span s{&arr[0], p}; }; + // EXPECT_DEATH(workaround_macro(), expected); + //} + + { + int* p = nullptr; + span s{p, p}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == nullptr); + } + + { + int* p = nullptr; + span s{p, p}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == nullptr); + } + + // this will fail the std::distance() precondition, which asserts on MSVC debug builds + //{ + // int* p = nullptr; + // auto workaround_macro = [&]() { span s{&arr[0], p}; }; + // EXPECT_DEATH(workaround_macro(), expected); + //} +} + +TEST(span_test, from_array_constructor) +{ + int arr[5] = {1, 2, 3, 4, 5}; + + { + const span s{arr}; + EXPECT_TRUE(s.size() == 5); + EXPECT_TRUE(s.data() == &arr[0]); + } + + { + const span s{arr}; + EXPECT_TRUE(s.size() == 5); + EXPECT_TRUE(s.data() == &arr[0]); + } + + int arr2d[2][3] = {1, 2, 3, 4, 5, 6}; + +#ifdef CONFIRM_COMPILATION_ERRORS + { + span s{arr}; + } + + { + span s{arr}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == &arr[0]); + } + + { + span s{arr2d}; + EXPECT_TRUE(s.size() == 6); + EXPECT_TRUE(s.data() == &arr2d[0][0]); + EXPECT_TRUE(s[0] == 1); + EXPECT_TRUE(s[5] == 6); + } + + { + span s{arr2d}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == &arr2d[0][0]); + } + + { + span s{arr2d}; + } +#endif + { + const span s{std::addressof(arr2d[0]), 1}; + EXPECT_TRUE(s.size() == 1); + EXPECT_TRUE(s.data() == std::addressof(arr2d[0])); + } + + int arr3d[2][3][2] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12}; + +#ifdef CONFIRM_COMPILATION_ERRORS + { + span s{arr3d}; + EXPECT_TRUE(s.size() == 12); + EXPECT_TRUE(s.data() == &arr3d[0][0][0]); + EXPECT_TRUE(s[0] == 1); + EXPECT_TRUE(s[11] == 12); + } + + { + span s{arr3d}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == &arr3d[0][0][0]); + } + + { + span s{arr3d}; + } + + { + span s{arr3d}; + EXPECT_TRUE(s.size() == 12); + EXPECT_TRUE(s.data() == &arr3d[0][0][0]); + EXPECT_TRUE(s[0] == 1); + EXPECT_TRUE(s[5] == 6); + } +#endif + { + const span s{std::addressof(arr3d[0]), 1}; + EXPECT_TRUE(s.size() == 1); + } + + AddressOverloaded ao_arr[5] = {}; + + { + const span s{ao_arr}; + EXPECT_TRUE(s.size() == 5); + EXPECT_TRUE(s.data() == std::addressof(ao_arr[0])); + } +} + +TEST(span_test, from_dynamic_array_constructor) +{ + double(*arr)[3][4] = new double[100][3][4]; + + { + span s(&arr[0][0][0], 10); + EXPECT_TRUE(s.size() == 10); + EXPECT_TRUE(s.data() == &arr[0][0][0]); + } + + delete[] arr; +} + +TEST(span_test, from_std_array_constructor) +{ + std::array arr = {1, 2, 3, 4}; + + { + span s{arr}; + EXPECT_TRUE(s.size() == arr.size()); + EXPECT_TRUE(s.data() == arr.data()); + + span cs{arr}; + EXPECT_TRUE(cs.size() == arr.size()); + EXPECT_TRUE(cs.data() == arr.data()); + } + + { + span s{arr}; + EXPECT_TRUE(s.size() == arr.size()); + EXPECT_TRUE(s.data() == arr.data()); + + span cs{arr}; + EXPECT_TRUE(cs.size() == arr.size()); + EXPECT_TRUE(cs.data() == arr.data()); + } + + { + std::array empty_arr{}; + span s{empty_arr}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.empty()); + } + + std::array ao_arr{}; + + { + span fs{ao_arr}; + EXPECT_TRUE(fs.size() == ao_arr.size()); + EXPECT_TRUE(ao_arr.data() == fs.data()); + } + +#ifdef CONFIRM_COMPILATION_ERRORS + { + span s{arr}; + EXPECT_TRUE(s.size() == 2); + EXPECT_TRUE(s.data() == arr.data()); + + span cs{arr}; + EXPECT_TRUE(cs.size() == 2); + EXPECT_TRUE(cs.data() == arr.data()); + } + + { + span s{arr}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == arr.data()); + + span cs{arr}; + EXPECT_TRUE(cs.size() == 0); + EXPECT_TRUE(cs.data() == arr.data()); + } + + { + span s{arr}; + } + + { + auto get_an_array = []() -> std::array { return {1, 2, 3, 4}; }; + auto take_a_span = [](span s) { static_cast(s); }; + // try to take a temporary std::array + take_a_span(get_an_array()); + } +#endif + + { + auto get_an_array = []() -> std::array { return {1, 2, 3, 4}; }; + auto take_a_span = [](span s) { static_cast(s); }; + // try to take a temporary std::array + take_a_span(get_an_array()); + } +} + +TEST(span_test, from_const_std_array_constructor) +{ + const std::array arr = {1, 2, 3, 4}; + + { + span s{arr}; + EXPECT_TRUE(s.size() == arr.size()); + EXPECT_TRUE(s.data() == arr.data()); + } + + { + span s{arr}; + EXPECT_TRUE(s.size() == arr.size()); + EXPECT_TRUE(s.data() == arr.data()); + } + + const std::array ao_arr{}; + + { + span s{ao_arr}; + EXPECT_TRUE(s.size() == ao_arr.size()); + EXPECT_TRUE(s.data() == ao_arr.data()); + } + +#ifdef CONFIRM_COMPILATION_ERRORS + { + span s{arr}; + EXPECT_TRUE(s.size() == 2); + EXPECT_TRUE(s.data() == arr.data()); + } + + { + span s{arr}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == arr.data()); + } + + { + span s{arr}; + } +#endif + + { + auto get_an_array = []() -> const std::array { return {1, 2, 3, 4}; }; + auto take_a_span = [](span s) { static_cast(s); }; + // try to take a temporary std::array + take_a_span(get_an_array()); + } +} + +TEST(span_test, from_std_array_const_constructor) +{ + std::array arr = {1, 2, 3, 4}; + + { + span s{arr}; + EXPECT_TRUE(s.size() == arr.size()); + EXPECT_TRUE(s.data() == arr.data()); + } + + { + span s{arr}; + EXPECT_TRUE(s.size() == arr.size()); + EXPECT_TRUE(s.data() == arr.data()); + } + +#ifdef CONFIRM_COMPILATION_ERRORS + { + span s{arr}; + EXPECT_TRUE(s.size() == 2); + EXPECT_TRUE(s.data() == arr.data()); + } + + { + span s{arr}; + EXPECT_TRUE(s.size() == 0); + EXPECT_TRUE(s.data() == arr.data()); + } + + { + span s{arr}; + } + + { + span s{arr}; + } +#endif +} + +TEST(span_test, from_container_constructor) +{ + std::vector v = {1, 2, 3}; + const std::vector cv = v; + + { + span s{v}; + EXPECT_TRUE(s.size() == v.size()); + EXPECT_TRUE(s.data() == v.data()); + + span cs{v}; + EXPECT_TRUE(cs.size() == v.size()); + EXPECT_TRUE(cs.data() == v.data()); + } + + std::string str = "hello"; + const std::string cstr = "hello"; + + { +#ifdef CONFIRM_COMPILATION_ERRORS + span s{str}; + EXPECT_TRUE(s.size() == str.size()); + EXPECT_TRUE(s.data() == str.data())); +#endif + span cs{str}; + EXPECT_TRUE(cs.size() == str.size()); + EXPECT_TRUE(cs.data() == str.data()); + } + + { +#ifdef CONFIRM_COMPILATION_ERRORS + span s{cstr}; +#endif + span cs{cstr}; + EXPECT_TRUE(cs.size() == cstr.size()); + EXPECT_TRUE(cs.data() == cstr.data()); + } + + { +#ifdef CONFIRM_COMPILATION_ERRORS + auto get_temp_vector = []() -> std::vector { return {}; }; + auto use_span = [](span s) { static_cast(s); }; + use_span(get_temp_vector()); +#endif + } + + { + auto get_temp_vector = []() -> std::vector { return {}; }; + auto use_span = [](span s) { static_cast(s); }; + use_span(get_temp_vector()); + } + + { +#ifdef CONFIRM_COMPILATION_ERRORS + auto get_temp_string = []() -> std::string { return {}; }; + auto use_span = [](span s) { static_cast(s); }; + use_span(get_temp_string()); +#endif + } + + { + auto get_temp_string = []() -> std::string { return {}; }; + auto use_span = [](span s) { static_cast(s); }; + use_span(get_temp_string()); + } + + { +#ifdef CONFIRM_COMPILATION_ERRORS + auto get_temp_vector = []() -> const std::vector { return {}; }; + auto use_span = [](span s) { static_cast(s); }; + use_span(get_temp_vector()); +#endif + } + + { + auto get_temp_string = []() -> const std::string { return {}; }; + auto use_span = [](span s) { static_cast(s); }; + use_span(get_temp_string()); + } + + { +#ifdef CONFIRM_COMPILATION_ERRORS + std::map m; + span s{m}; +#endif + } +} + +TEST(span_test, from_convertible_span_constructor) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. from_convertible_span_constructor"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + { + span avd; + span avcd = avd; + static_cast(avcd); + } + + { + std::array arr{}; + span avd{arr}; + span avcd = avd; + static_cast(avcd); + } + + { + std::array arr{}; + span avd{arr}; + span avcd = avd; + static_cast(avcd); + } + + { + std::array arr{}; + span avd{arr}; + span avcd{avd}; + static_cast(avcd); + } + + { + std::array arr{}; + span avd{arr}; + using T = span; + EXPECT_DEATH(T{avd}, expected); + } + + { + std::array arr{}; + span avd{arr}; + using T = span; + EXPECT_DEATH(T{avd}, expected); + } + +#ifdef CONFIRM_COMPILATION_ERRORS + { + std::array arr{}; + span avd{arr}; + span avcd = avd; + static_cast(avcd); + } + + { + std::array arr{}; + span avd{arr}; + span avcd = avd; + static_cast(avcd); + } + + { + std::array arr{}; + span avd{arr}; + span avcd = avd; + static_cast(avcd); + } + + { + span avd; + span avb = avd; + static_cast(avb); + } + + { + span s; + span s2 = s; + static_cast(s2); + } + + { + span s; + span s2 = s; + static_cast(s2); + } + + { + span s; + span s2 = s; + static_cast(s2); + } +#endif +} + +TEST(span_test, copy_move_and_assignment) +{ + span s1; + EXPECT_TRUE(s1.empty()); + + int arr[] = {3, 4, 5}; + + span s2 = arr; + EXPECT_TRUE(s2.size() == 3); + EXPECT_TRUE(s2.data() == &arr[0]); + + s2 = s1; + EXPECT_TRUE(s2.empty()); + + auto get_temp_span = [&]() -> span { return {&arr[1], 2}; }; + auto use_span = [&](span s) { + EXPECT_TRUE(s.size() == 2); + EXPECT_TRUE(s.data() == &arr[1]); + }; + use_span(get_temp_span()); + + s1 = get_temp_span(); + EXPECT_TRUE(s1.size() == 2); + EXPECT_TRUE(s1.data() == &arr[1]); +} + +TEST(span_test, first) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. first"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + int arr[5] = {1, 2, 3, 4, 5}; + + { + span av = arr; + EXPECT_TRUE(av.first<2>().size() == 2); + EXPECT_TRUE(av.first(2).size() == 2); + } + + { + span av = arr; + EXPECT_TRUE(av.first<0>().size() == 0); + EXPECT_TRUE(av.first(0).size() == 0); + } + + { + span av = arr; + EXPECT_TRUE(av.first<5>().size() == 5); + EXPECT_TRUE(av.first(5).size() == 5); + } + + { + span av = arr; +#ifdef CONFIRM_COMPILATION_ERRORS + EXPECT_TRUE(av.first<6>().size() == 6); + EXPECT_TRUE(av.first<-1>().size() == -1); +#endif + EXPECT_DEATH(av.first(6).size(), expected); + } + + { + span av; + EXPECT_TRUE(av.first<0>().size() == 0); + EXPECT_TRUE(av.first(0).size() == 0); + } +} + +TEST(span_test, last) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. last"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + int arr[5] = {1, 2, 3, 4, 5}; + + { + span av = arr; + EXPECT_TRUE(av.last<2>().size() == 2); + EXPECT_TRUE(av.last(2).size() == 2); + } + + { + span av = arr; + EXPECT_TRUE(av.last<0>().size() == 0); + EXPECT_TRUE(av.last(0).size() == 0); + } + + { + span av = arr; + EXPECT_TRUE(av.last<5>().size() == 5); + EXPECT_TRUE(av.last(5).size() == 5); + } + + { + span av = arr; +#ifdef CONFIRM_COMPILATION_ERRORS + EXPECT_TRUE(av.last<6>().size() == 6); +#endif + EXPECT_DEATH(av.last(6).size(), expected); + } + + { + span av; + EXPECT_TRUE(av.last<0>().size() == 0); + EXPECT_TRUE(av.last(0).size() == 0); + } +} + +TEST(span_test, subspan) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. subspan"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + int arr[5] = {1, 2, 3, 4, 5}; + + { + span av = arr; + EXPECT_TRUE((av.subspan<2, 2>().size()) == 2); + EXPECT_TRUE(decltype(av.subspan<2, 2>())::extent == 2); + EXPECT_TRUE(av.subspan(2, 2).size() == 2); + EXPECT_TRUE(av.subspan(2, 3).size() == 3); + } + + { + span av = arr; + EXPECT_TRUE((av.subspan<0, 0>().size()) == 0); + EXPECT_TRUE(decltype(av.subspan<0, 0>())::extent == 0); + EXPECT_TRUE(av.subspan(0, 0).size() == 0); + } + + { + span av = arr; + EXPECT_TRUE((av.subspan<0, 5>().size()) == 5); + EXPECT_TRUE(decltype(av.subspan<0, 5>())::extent == 5); + EXPECT_TRUE(av.subspan(0, 5).size() == 5); + + EXPECT_DEATH(av.subspan(0, 6).size(), expected); + EXPECT_DEATH(av.subspan(1, 5).size(), expected); + } + + { + span av = arr; + EXPECT_TRUE((av.subspan<4, 0>().size()) == 0); + EXPECT_TRUE(decltype(av.subspan<4, 0>())::extent == 0); + EXPECT_TRUE(av.subspan(4, 0).size() == 0); + EXPECT_TRUE(av.subspan(5, 0).size() == 0); + EXPECT_DEATH(av.subspan(6, 0).size(), expected); + } + + { + span av = arr; + EXPECT_TRUE(av.subspan<1>().size() == 4); + EXPECT_TRUE(decltype(av.subspan<1>())::extent == 4); + } + + { + span av; + EXPECT_TRUE((av.subspan<0, 0>().size()) == 0); + EXPECT_TRUE(decltype(av.subspan<0, 0>())::extent == 0); + EXPECT_TRUE(av.subspan(0, 0).size() == 0); + EXPECT_DEATH((av.subspan<1, 0>().size()), expected); + } + + { + span av; + EXPECT_TRUE(av.subspan(0).size() == 0); + EXPECT_DEATH(av.subspan(1).size(), expected); + } + + { + span av = arr; + EXPECT_TRUE(av.subspan(0).size() == 5); + EXPECT_TRUE(av.subspan(1).size() == 4); + EXPECT_TRUE(av.subspan(4).size() == 1); + EXPECT_TRUE(av.subspan(5).size() == 0); + EXPECT_DEATH(av.subspan(6).size(), expected); + const auto av2 = av.subspan(1); + for (std::size_t i = 0; i < 4; ++i) EXPECT_TRUE(av2[i] == static_cast(i) + 2); + } + + { + span av = arr; + EXPECT_TRUE(av.subspan(0).size() == 5); + EXPECT_TRUE(av.subspan(1).size() == 4); + EXPECT_TRUE(av.subspan(4).size() == 1); + EXPECT_TRUE(av.subspan(5).size() == 0); + EXPECT_DEATH(av.subspan(6).size(), expected); + const auto av2 = av.subspan(1); + for (std::size_t i = 0; i < 4; ++i) EXPECT_TRUE(av2[i] == static_cast(i) + 2); + } +} + +TEST(span_test, iterator_default_init) +{ + span::iterator it1; + span::iterator it2; + EXPECT_TRUE(it1 == it2); +} + +TEST(span_test, iterator_comparisons) +{ + int a[] = {1, 2, 3, 4}; + { + span s = a; + span::iterator it = s.begin(); + auto it2 = it + 1; + + EXPECT_TRUE(it == it); + EXPECT_TRUE(it == s.begin()); + EXPECT_TRUE(s.begin() == it); + + EXPECT_TRUE(it != it2); + EXPECT_TRUE(it2 != it); + EXPECT_TRUE(it != s.end()); + EXPECT_TRUE(it2 != s.end()); + EXPECT_TRUE(s.end() != it); + + EXPECT_TRUE(it < it2); + EXPECT_TRUE(it <= it2); + EXPECT_TRUE(it2 <= s.end()); + EXPECT_TRUE(it < s.end()); + + EXPECT_TRUE(it2 > it); + EXPECT_TRUE(it2 >= it); + EXPECT_TRUE(s.end() > it2); + EXPECT_TRUE(s.end() >= it2); + } +} + +TEST(span_test, incomparable_iterators) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. incomparable_iterators"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + int a[] = {1, 2, 3, 4}; + int b[] = {1, 2, 3, 4}; + { + span s = a; + span s2 = b; +#if (__cplusplus > 201402L) + EXPECT_DEATH([[maybe_unused]] bool _ = (s.begin() == s2.begin()), expected); + EXPECT_DEATH([[maybe_unused]] bool _ = (s.begin() <= s2.begin()), expected); +#else + EXPECT_DEATH(bool _ = (s.begin() == s2.begin()), expected); + EXPECT_DEATH(bool _ = (s.begin() <= s2.begin()), expected); +#endif + } +} + +TEST(span_test, begin_end) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. begin_end"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + { + int a[] = {1, 2, 3, 4}; + span s = a; + + span::iterator it = s.begin(); + span::iterator it2 = std::begin(s); + EXPECT_TRUE(it == it2); + + it = s.end(); + it2 = std::end(s); + EXPECT_TRUE(it == it2); + } + + { + int a[] = {1, 2, 3, 4}; + span s = a; + + auto it = s.begin(); + auto first = it; + EXPECT_TRUE(it == first); + EXPECT_TRUE(*it == 1); + + auto beyond = s.end(); + EXPECT_TRUE(it != beyond); + EXPECT_DEATH(*beyond, expected); + + EXPECT_TRUE(beyond - first == 4); + EXPECT_TRUE(first - first == 0); + EXPECT_TRUE(beyond - beyond == 0); + + ++it; + EXPECT_TRUE(it - first == 1); + EXPECT_TRUE(*it == 2); + *it = 22; + EXPECT_TRUE(*it == 22); + EXPECT_TRUE(beyond - it == 3); + + it = first; + EXPECT_TRUE(it == first); + while (it != s.end()) + { + *it = 5; + ++it; + } + + EXPECT_TRUE(it == beyond); + EXPECT_TRUE(it - beyond == 0); + + for (const auto& n : s) { EXPECT_TRUE(n == 5); } + } +} + +TEST(span_test, rbegin_rend) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. rbegin_rend"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + { + int a[] = {1, 2, 3, 4}; + span s = a; + + auto it = s.rbegin(); + auto first = it; + EXPECT_TRUE(it == first); + EXPECT_TRUE(*it == 4); + + auto beyond = s.rend(); + EXPECT_TRUE(it != beyond); +#if (__cplusplus > 201402L) + EXPECT_DEATH([[maybe_unused]] auto _ = *beyond, expected); +#else + EXPECT_DEATH(auto _ = *beyond, expected); +#endif + + EXPECT_TRUE(beyond - first == 4); + EXPECT_TRUE(first - first == 0); + EXPECT_TRUE(beyond - beyond == 0); + + ++it; + EXPECT_TRUE(it - s.rbegin() == 1); + EXPECT_TRUE(*it == 3); + *it = 22; + EXPECT_TRUE(*it == 22); + EXPECT_TRUE(beyond - it == 3); + + it = first; + EXPECT_TRUE(it == first); + while (it != s.rend()) + { + *it = 5; + ++it; + } + + EXPECT_TRUE(it == beyond); + EXPECT_TRUE(it - beyond == 0); + + for (const auto& n : s) { EXPECT_TRUE(n == 5); } + } +} + +TEST(span_test, as_bytes) +{ + int a[] = {1, 2, 3, 4}; + { + const span s = a; + EXPECT_TRUE(s.size() == 4); + const span bs = as_bytes(s); + EXPECT_TRUE(static_cast(bs.data()) == static_cast(s.data())); + EXPECT_TRUE(bs.size() == s.size_bytes()); + } + + { + span s; + const auto bs = as_bytes(s); + EXPECT_TRUE(bs.size() == s.size()); + EXPECT_TRUE(bs.size() == 0); + EXPECT_TRUE(bs.size_bytes() == 0); + EXPECT_TRUE(static_cast(bs.data()) == static_cast(s.data())); + EXPECT_TRUE(bs.data() == nullptr); + } + + { + span s = a; + const auto bs = as_bytes(s); + EXPECT_TRUE(static_cast(bs.data()) == static_cast(s.data())); + EXPECT_TRUE(bs.size() == s.size_bytes()); + } +} + +TEST(span_test, as_writable_bytes) +{ + int a[] = {1, 2, 3, 4}; + + { +#ifdef CONFIRM_COMPILATION_ERRORS + // you should not be able to get writeable bytes for const objects + span s = a; + EXPECT_TRUE(s.size() == 4); + span bs = as_writable_bytes(s); + EXPECT_TRUE(static_cast(bs.data()) == static_cast(s.data())); + EXPECT_TRUE(bs.size() == s.size_bytes()); +#endif + } + + { + span s; + const auto bs = as_writable_bytes(s); + EXPECT_TRUE(bs.size() == s.size()); + EXPECT_TRUE(bs.size() == 0); + EXPECT_TRUE(bs.size_bytes() == 0); + EXPECT_TRUE(static_cast(bs.data()) == static_cast(s.data())); + EXPECT_TRUE(bs.data() == nullptr); + } + + { + span s = a; + const auto bs = as_writable_bytes(s); + EXPECT_TRUE(static_cast(bs.data()) == static_cast(s.data())); + EXPECT_TRUE(bs.size() == s.size_bytes()); + } +} + +TEST(span_test, fixed_size_conversions) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. fixed_size_conversions"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + int arr[] = {1, 2, 3, 4}; + + // converting to an span from an equal size array is ok + span s4 = arr; + EXPECT_TRUE(s4.size() == 4); + + // converting to dynamic_range is always ok + { + span s = s4; + EXPECT_TRUE(s.size() == s4.size()); + static_cast(s); + } + +// initialization or assignment to static span that REDUCES size is NOT ok +#ifdef CONFIRM_COMPILATION_ERRORS + { + span s = arr; + } + { + span s2 = s4; + static_cast(s2); + } +#endif + + // even when done dynamically + { + /* + // this now results in a compile-time error, rather than runtime. + // There is no suitable conversion from dynamic span to fixed span. + span s = arr; + auto f = [&]() { + const span s2 = s; + static_cast(s2); + }; + EXPECT_DEATH(f(), expected); + */ + } + + // but doing so explicitly is ok + + // you can convert statically + { + const span s2{&arr[0], 2}; + static_cast(s2); + } + { + const span s1 = s4.first<1>(); + static_cast(s1); + } + + /* + // this is not a legal operation in std::span, so we are no longer supporting it + // conversion from span to span via call to `first` + // then convert from span to span + // The dynamic to fixed extents are not supported in the standard + // to make this work, span would need to be span. + { + + // NB: implicit conversion to span from span + span s1 = s4.first(1); + static_cast(s1); + } + */ + + // initialization or assignment to static span that requires size INCREASE is not ok. + int arr2[2] = {1, 2}; + +#ifdef CONFIRM_COMPILATION_ERRORS + { + span s3 = arr2; + } + { + span s2 = arr2; + span s4a = s2; + } +#endif + { + auto f = [&]() { + const span _s4{arr2, 2}; + static_cast(_s4); + }; + EXPECT_DEATH(f(), expected); + } + + /* + // This no longer compiles. There is no suitable conversion from dynamic span to a fixed size + span. + // this should fail - we are trying to assign a small dynamic span to a fixed_size larger one + span av = arr2; auto f = [&]() { + const span _s4 = av; + static_cast(_s4); + }; + EXPECT_DEATH(f(), expected); + */ +} + +TEST(span_test, interop_with_std_regex) +{ + char lat[] = {'1', '2', '3', '4', '5', '6', 'E', 'F', 'G'}; + span s = lat; + const auto f_it = s.begin() + 7; + + std::match_results::iterator> match; + + std::regex_match(s.begin(), s.end(), match, std::regex(".*")); + EXPECT_TRUE(match.ready()); + EXPECT_FALSE(match.empty()); + EXPECT_TRUE(match[0].matched); + EXPECT_TRUE(match[0].first == s.begin()); + EXPECT_TRUE(match[0].second == s.end()); + + std::regex_search(s.begin(), s.end(), match, std::regex("F")); + EXPECT_TRUE(match.ready()); + EXPECT_FALSE(match.empty()); + EXPECT_TRUE(match[0].matched); + EXPECT_TRUE(match[0].first == f_it); + EXPECT_TRUE(match[0].second == (f_it + 1)); +} + +TEST(span_test, default_constructible) +{ + EXPECT_TRUE((std::is_default_constructible>::value)); + EXPECT_TRUE((std::is_default_constructible>::value)); + EXPECT_FALSE((std::is_default_constructible>::value)); +} + +TEST(span_test, std_container_ctad) +{ +#if (defined(__cpp_deduction_guides) && (__cpp_deduction_guides >= 201611L)) + // this test is just to verify that these compile + { + std::vector v{1, 2, 3, 4}; + gsl::span sp{v}; + static_assert(std::is_same>::value); + } + { + std::string str{"foo"}; + gsl::span sp{str}; + static_assert(std::is_same>::value); + } +#ifdef HAS_STRING_VIEW + { + std::string_view sv{"foo"}; + gsl::span sp{sv}; + static_assert(std::is_same>::value); + } +#endif +#endif +} + +TEST(span_test, front_back) +{ + int arr[5] = {1, 2, 3, 4, 5}; + span s{arr}; + EXPECT_TRUE(s.front() == 1); + EXPECT_TRUE(s.back() == 5); + + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. front_back"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + span s2; + EXPECT_DEATH(s2.front(), expected); + EXPECT_DEATH(s2.back(), expected); +} + +#if defined(FORCE_STD_SPAN_TESTS) || defined(__cpp_lib_span) && __cpp_lib_span >= 202002L +TEST(span_test, std_span) +{ + // make sure std::span can be constructed from gsl::span + int arr[5] = {1, 2, 3, 4, 5}; + gsl::span gsl_span{arr}; +#if defined(__cpp_lib_ranges) || (defined(_MSVC_STL_VERSION) && defined(__cpp_lib_concepts)) + EXPECT_TRUE(std::to_address(gsl_span.begin()) == gsl_span.data()); + EXPECT_TRUE(std::to_address(gsl_span.end()) == gsl_span.data() + gsl_span.size()); +#endif // __cpp_lib_ranges + + std::span std_span = gsl_span; + EXPECT_TRUE(std_span.data() == gsl_span.data()); + EXPECT_TRUE(std_span.size() == gsl_span.size()); +} +#endif // defined(FORCE_STD_SPAN_TESTS) || defined(__cpp_lib_span) && __cpp_lib_span >= 202002L + +#if defined(__cpp_lib_span) && defined(__cpp_lib_ranges) +// This test covers the changes in PR #1100 +TEST(span_test, msvc_compile_error_PR1100) +{ + int arr[]{1, 7, 2, 9}; + gsl::span sp{arr, std::size(arr)}; + std::ranges::sort(sp); + for (const auto& e : sp) { + (void)e; + } +} +#endif // defined(__cpp_lib_span) && defined(__cpp_lib_ranges) diff --git a/deps/GSL/tests/strict_notnull_tests.cpp b/deps/GSL/tests/strict_notnull_tests.cpp new file mode 100644 index 0000000..c1b1f54 --- /dev/null +++ b/deps/GSL/tests/strict_notnull_tests.cpp @@ -0,0 +1,304 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include // for not_null, operator<, operator<=, operator> +#include + +#include "deathTestCommon.h" + +using namespace gsl; + +namespace +{ +// clang-format off +GSL_SUPPRESS(f.4) // NO-FORMAT: attribute +// clang-format on +bool helper(not_null p) { return *p == 12; } + +// clang-format off +GSL_SUPPRESS(f.4) // NO-FORMAT: attribute +// clang-format on +bool helper_const(not_null p) { return *p == 12; } + +// clang-format off +GSL_SUPPRESS(f.4) // NO-FORMAT: attribute +// clang-format on +bool strict_helper(strict_not_null p) { return *p == 12; } + +// clang-format off +GSL_SUPPRESS(f.4) // NO-FORMAT: attribute +// clang-format on +bool strict_helper_const(strict_not_null p) { return *p == 12; } + +#ifdef CONFIRM_COMPILATION_ERRORS +int* return_pointer() { return nullptr; } +const int* return_pointer_const() { return nullptr; } +#endif +} // namespace + +TEST(strict_notnull_tests, TestStrictNotNull) +{ + { + // raw ptr <-> strict_not_null + int x = 42; + +#ifdef CONFIRM_COMPILATION_ERRORS + strict_not_null snn = &x; + strict_helper(&x); + strict_helper_const(&x); + strict_helper(return_pointer()); + strict_helper_const(return_pointer_const()); +#endif + + const strict_not_null snn1{&x}; + + helper(snn1); + helper_const(snn1); + + EXPECT_TRUE(*snn1 == 42); + } + + { + // raw ptr <-> strict_not_null + const int x = 42; + +#ifdef CONFIRM_COMPILATION_ERRORS + strict_not_null snn = &x; + strict_helper(&x); + strict_helper_const(&x); + strict_helper(return_pointer()); + strict_helper_const(return_pointer_const()); +#endif + + const strict_not_null snn1{&x}; + +#ifdef CONFIRM_COMPILATION_ERRORS + helper(snn1); +#endif + helper_const(snn1); + + EXPECT_TRUE(*snn1 == 42); + } + + { + // strict_not_null -> strict_not_null + int x = 42; + + strict_not_null snn1{&x}; + const strict_not_null snn2{&x}; + + strict_helper(snn1); + strict_helper_const(snn1); + strict_helper_const(snn2); + + EXPECT_TRUE(snn1 == snn2); + } + + { + // strict_not_null -> strict_not_null + const int x = 42; + + strict_not_null snn1{&x}; + const strict_not_null snn2{&x}; + +#ifdef CONFIRM_COMPILATION_ERRORS + strict_helper(snn1); +#endif + strict_helper_const(snn1); + strict_helper_const(snn2); + + EXPECT_TRUE(snn1 == snn2); + } + + { + // strict_not_null -> not_null + int x = 42; + + strict_not_null snn{&x}; + + const not_null nn1 = snn; + const not_null nn2{snn}; + + helper(snn); + helper_const(snn); + + EXPECT_TRUE(snn == nn1); + EXPECT_TRUE(snn == nn2); + } + + { + // strict_not_null -> not_null + const int x = 42; + + strict_not_null snn{&x}; + + const not_null nn1 = snn; + const not_null nn2{snn}; + +#ifdef CONFIRM_COMPILATION_ERRORS + helper(snn); +#endif + helper_const(snn); + + EXPECT_TRUE(snn == nn1); + EXPECT_TRUE(snn == nn2); + } + + { + // not_null -> strict_not_null + int x = 42; + + not_null nn{&x}; + + const strict_not_null snn1{nn}; + const strict_not_null snn2{nn}; + + strict_helper(nn); + strict_helper_const(nn); + + EXPECT_TRUE(snn1 == nn); + EXPECT_TRUE(snn2 == nn); + + std::hash> hash_snn; + std::hash> hash_nn; + + EXPECT_TRUE(hash_nn(snn1) == hash_nn(nn)); + EXPECT_TRUE(hash_snn(snn1) == hash_nn(nn)); + EXPECT_TRUE(hash_nn(snn1) == hash_nn(snn2)); + EXPECT_TRUE(hash_snn(snn1) == hash_snn(nn)); + } + + { + // not_null -> strict_not_null + const int x = 42; + + not_null nn{&x}; + + const strict_not_null snn1{nn}; + const strict_not_null snn2{nn}; + +#ifdef CONFIRM_COMPILATION_ERRORS + strict_helper(nn); +#endif + strict_helper_const(nn); + + EXPECT_TRUE(snn1 == nn); + EXPECT_TRUE(snn2 == nn); + + std::hash> hash_snn; + std::hash> hash_nn; + + EXPECT_TRUE(hash_nn(snn1) == hash_nn(nn)); + EXPECT_TRUE(hash_snn(snn1) == hash_nn(nn)); + EXPECT_TRUE(hash_nn(snn1) == hash_nn(snn2)); + EXPECT_TRUE(hash_snn(snn1) == hash_snn(nn)); + } + +#ifdef CONFIRM_COMPILATION_ERRORS + { + strict_not_null p{nullptr}; + } +#endif +} + +#if defined(__cplusplus) && (__cplusplus >= 201703L) + +TEST(strict_notnull_tests, TestStrictNotNullConstructorTypeDeduction) +{ + const auto terminateHandler = std::set_terminate([] { + std::cerr << "Expected Death. TestStrictNotNullConstructorTypeDeduction"; + std::abort(); + }); + const auto expected = GetExpectedDeathString(terminateHandler); + + { + int i = 42; + + strict_not_null x{&i}; + helper(strict_not_null{&i}); + helper_const(strict_not_null{&i}); + + EXPECT_TRUE(*x == 42); + } + + { + const int i = 42; + + strict_not_null x{&i}; +#ifdef CONFIRM_COMPILATION_ERRORS + helper(strict_not_null{&i}); +#endif + helper_const(strict_not_null{&i}); + + EXPECT_TRUE(*x == 42); + } + + { + int i = 42; + int* p = &i; + + strict_not_null x{p}; + helper(strict_not_null{p}); + helper_const(strict_not_null{p}); + + EXPECT_TRUE(*x == 42); + } + + { + const int i = 42; + const int* p = &i; + + strict_not_null x{p}; +#ifdef CONFIRM_COMPILATION_ERRORS + helper(strict_not_null{p}); +#endif + helper_const(strict_not_null{p}); + + EXPECT_TRUE(*x == 42); + } + + { + auto workaround_macro = []() { + int* p1 = nullptr; + const strict_not_null x{p1}; + }; + EXPECT_DEATH(workaround_macro(), expected); + } + + { + auto workaround_macro = []() { + const int* p1 = nullptr; + const strict_not_null x{p1}; + }; + EXPECT_DEATH(workaround_macro(), expected); + } + + { + int* p = nullptr; + + EXPECT_DEATH(helper(strict_not_null{p}), expected); + EXPECT_DEATH(helper_const(strict_not_null{p}), expected); + } + +#ifdef CONFIRM_COMPILATION_ERRORS + { + strict_not_null x{nullptr}; + helper(strict_not_null{nullptr}); + helper_const(strict_not_null{nullptr}); + } +#endif +} +#endif // #if defined(__cplusplus) && (__cplusplus >= 201703L) diff --git a/deps/GSL/tests/utils_tests.cpp b/deps/GSL/tests/utils_tests.cpp new file mode 100644 index 0000000..5b64e20 --- /dev/null +++ b/deps/GSL/tests/utils_tests.cpp @@ -0,0 +1,165 @@ +/////////////////////////////////////////////////////////////////////////////// +// +// Copyright (c) 2015 Microsoft Corporation. All rights reserved. +// +// This code is licensed under the MIT License (MIT). +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +// THE SOFTWARE. +// +/////////////////////////////////////////////////////////////////////////////// + +#include + +#include // for move +#include +#include // for std::ptrdiff_t +#include // for uint32_t, int32_t +#include // for reference_wrapper, _Bind_helper<>::type +#include // for narrow, narrowing_error +#include // finally, narrow_cast +#include // for numeric_limits +#include // for is_same + +using namespace gsl; + +namespace +{ +void f(int& i) { i += 1; } +static int j = 0; +void g() { j += 1; } +} // namespace + +TEST(utils_tests, sanity_check_for_gsl_index_typedef) +{ + static_assert(std::is_same::value, + "gsl::index represents wrong arithmetic type"); +} + +TEST(utils_tests, finally_lambda) +{ + int i = 0; + { + auto _ = finally([&]() { f(i); }); + EXPECT_TRUE(i == 0); + } + EXPECT_TRUE(i == 1); +} + +TEST(utils_tests, finally_lambda_move) +{ + int i = 0; + { + auto _1 = finally([&]() { f(i); }); + { + auto _2 = std::move(_1); + EXPECT_TRUE(i == 0); + } + EXPECT_TRUE(i == 1); + { + auto _2 = std::move(_1); + EXPECT_TRUE(i == 1); + } + EXPECT_TRUE(i == 1); + } + EXPECT_TRUE(i == 1); +} + +TEST(utils_tests, finally_const_lvalue_lambda) +{ + int i = 0; + { + const auto const_lvalue_lambda = [&]() { f(i); }; + auto _ = finally(const_lvalue_lambda); + EXPECT_TRUE(i == 0); + } + EXPECT_TRUE(i == 1); +} + +TEST(utils_tests, finally_mutable_lvalue_lambda) +{ + int i = 0; + { + auto mutable_lvalue_lambda = [&]() { f(i); }; + auto _ = finally(mutable_lvalue_lambda); + EXPECT_TRUE(i == 0); + } + EXPECT_TRUE(i == 1); +} + +TEST(utils_tests, finally_function_with_bind) +{ + int i = 0; + { + auto _ = finally([&i] { return f(i); }); + EXPECT_TRUE(i == 0); + } + EXPECT_TRUE(i == 1); +} + +TEST(utils_tests, finally_function_ptr) +{ + j = 0; + { + auto _ = finally(&g); + EXPECT_TRUE(j == 0); + } + EXPECT_TRUE(j == 1); +} + +TEST(utils_tests, finally_function) +{ + j = 0; + { + auto _ = finally(g); + EXPECT_TRUE(j == 0); + } + EXPECT_TRUE(j == 1); +} + +TEST(utils_tests, narrow_cast) +{ + int n = 120; + char c = narrow_cast(n); + EXPECT_TRUE(c == 120); + + n = 300; + unsigned char uc = narrow_cast(n); + EXPECT_TRUE(uc == 44); +} + +#ifndef GSL_KERNEL_MODE +TEST(utils_tests, narrow) +{ + int n = 120; + const char c = narrow(n); + EXPECT_TRUE(c == 120); + + n = 300; + EXPECT_THROW(narrow(n), narrowing_error); + + const auto int32_max = std::numeric_limits::max(); + const auto int32_min = std::numeric_limits::min(); + + EXPECT_TRUE(narrow(int32_t(0)) == 0); + EXPECT_TRUE(narrow(int32_t(1)) == 1); + EXPECT_TRUE(narrow(int32_max) == static_cast(int32_max)); + + EXPECT_THROW(narrow(int32_t(-1)), narrowing_error); + EXPECT_THROW(narrow(int32_min), narrowing_error); + + n = -42; + EXPECT_THROW(narrow(n), narrowing_error); + + EXPECT_TRUE( + narrow>(std::complex(4, 2)) == std::complex(4, 2)); + EXPECT_THROW(narrow>(std::complex(4.2)), narrowing_error); + + EXPECT_TRUE(narrow(float(1)) == 1); +} +#endif // GSL_KERNEL_MODE diff --git a/deps/curl b/deps/curl deleted file mode 160000 index 7161cb1..0000000 --- a/deps/curl +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 7161cb17c01dcff1dc5bf89a18437d9d729f1ecd diff --git a/deps/curl/.azure-pipelines.yml b/deps/curl/.azure-pipelines.yml new file mode 100644 index 0000000..bc3c98c --- /dev/null +++ b/deps/curl/.azure-pipelines.yml @@ -0,0 +1,249 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# https://dev.azure.com/daniel0244/curl/_build?view=runs +# +# Azure Pipelines configuration: +# https://aka.ms/yaml + +trigger: + branches: + include: + - 'master' + - '*/ci' + paths: + exclude: + - '.circleci/*' + - '.cirrus.yml' + - '.github/*' + - '.github/workflows/*' + - 'appveyor.yml' + - 'packages/*' + - 'plan9/*' + +pr: + branches: + include: + - 'master' + paths: + exclude: + - '.circleci/*' + - '.cirrus.yml' + - '.github/*' + - '.github/workflows/*' + - 'appveyor.yml' + - 'packages/*' + - 'plan9/*' + +variables: + MAKEFLAGS: '-j 2' + +stages: + +########################################## +### Linux jobs first +########################################## + +- stage: linux + dependsOn: [] + jobs: + - job: ubuntu + # define defaults to make sure variables are always expanded/replaced + variables: + install: '' + configure: '' + tests: '!433' + timeoutInMinutes: 60 + pool: + vmImage: 'ubuntu-latest' + strategy: + matrix: + default: + name: default + install: + configure: --enable-debug --with-openssl + disable_ipv6: + name: w/o IPv6 + configure: --disable-ipv6 --with-openssl + disable_http_smtp_imap: + name: w/o HTTP/SMTP/IMAP + configure: --disable-http --disable-smtp --disable-imap --without-ssl + disable_thredres: + name: sync resolver + configure: --disable-threaded-resolver --with-openssl + https_only: + name: HTTPS only + configure: --disable-dict --disable-file --disable-ftp --disable-gopher --disable-imap --disable-ldap --disable-pop3 --disable-rtmp --disable-rtsp --disable-scp --disable-sftp --disable-smb --disable-smtp --disable-telnet --disable-tftp --with-openssl + torture: + name: torture + install: libnghttp2-dev + configure: --enable-debug --disable-shared --disable-threaded-resolver --with-openssl + tests: -n -t --shallow=25 !FTP + steps: + - script: sudo apt-get update && sudo apt-get install -y stunnel4 python3-impacket libzstd-dev libbrotli-dev $(install) + displayName: 'apt install' + retryCountOnTaskFailure: 3 + + - script: autoreconf -fi && ./configure --enable-warnings --enable-werror $(configure) + displayName: 'configure $(name)' + + - script: make V=1 && make V=1 examples && cd tests && make V=1 + displayName: 'compile' + + - script: make V=1 test-ci + displayName: 'test' + env: + AZURE_ACCESS_TOKEN: "$(System.AccessToken)" + TFLAGS: "-ac /usr/bin/curl -r $(tests)" + +- stage: scanbuild + dependsOn: [] + jobs: + - job: ubuntu + timeoutInMinutes: 30 + pool: + vmImage: 'ubuntu-latest' + steps: + - script: sudo apt-get update && sudo apt-get install -y clang-tools clang libssl-dev libssh2-1-dev libpsl-dev libbrotli-dev libzstd-dev + displayName: 'apt install' + retryCountOnTaskFailure: 3 + + - script: autoreconf -fi + displayName: 'autoreconf' + + - script: scan-build ./configure --enable-debug --enable-werror --with-openssl --with-libssh2 + displayName: 'configure' + env: + CC: "clang" + CCX: "clang++" + + - script: scan-build --status-bugs make + displayName: 'make' + + - script: scan-build --status-bugs make examples + displayName: 'make examples' + +########################################## +### Windows jobs below +########################################## + +- stage: windows + dependsOn: [] + variables: + agent.preferPowerShellOnContainers: true + jobs: + - job: msys2 + # define defaults to make sure variables are always expanded/replaced + variables: + container_img: '' + container_cmd: '' + configure: '' + tests: '' + timeoutInMinutes: 120 + pool: + vmImage: 'windows-2019' + strategy: + matrix: + mingw32_openssl: + name: 32-bit OpenSSL/libssh2 + container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw32:ltsc2019 + container_cmd: C:\msys64\usr\bin\sh + prepare: pacman -S --needed --noconfirm --noprogressbar libssh2-devel mingw-w64-i686-libssh2 + configure: --host=i686-w64-mingw32 --build=i686-w64-mingw32 --prefix=/mingw32 --enable-debug --enable-werror --with-libssh2 --with-openssl + tests: "~571" + mingw64_openssl: + name: 64-bit OpenSSL/libssh2 + container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw64:ltsc2019 + container_cmd: C:\msys64\usr\bin\sh + prepare: pacman -S --needed --noconfirm --noprogressbar libssh2-devel mingw-w64-x86_64-libssh2 + configure: --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/mingw64 --enable-debug --enable-werror --with-libssh2 --with-openssl + tests: "~571" + mingw64_libssh: + name: 64-bit OpenSSL/libssh + container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw64:ltsc2019 + container_cmd: C:\msys64\usr\bin\sh + prepare: pacman -S --needed --noconfirm --noprogressbar libssh-devel mingw-w64-x86_64-libssh + configure: --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/mingw64 --enable-debug --enable-werror --with-libssh --with-openssl + tests: "~571 ~614" + mingw32: + name: 32-bit w/o zlib + container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw32:ltsc2019 + container_cmd: C:\msys64\usr\bin\sh + configure: --host=i686-w64-mingw32 --build=i686-w64-mingw32 --prefix=/mingw32 --enable-debug --enable-werror --without-zlib --without-ssl + tests: "!203 !1143" + mingw64: + name: 64-bit w/o zlib + container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw64:ltsc2019 + container_cmd: C:\msys64\usr\bin\sh + configure: --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/mingw64 --enable-debug --enable-werror --without-zlib --without-ssl + tests: "!203 !1143" + mingw32_schannel: + name: 32-bit Schannel/SSPI/WinIDN/libssh2 + container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw32:ltsc2019 + container_cmd: C:\msys64\usr\bin\sh + prepare: pacman -S --needed --noconfirm --noprogressbar libssh2-devel mingw-w64-i686-libssh2 + configure: --host=i686-w64-mingw32 --build=i686-w64-mingw32 --prefix=/mingw32 --enable-debug --enable-werror --enable-sspi --with-schannel --with-winidn --with-libssh2 + tests: "~571" + mingw64_schannel: + name: 64-bit Schannel/SSPI/WinIDN/libssh2 + container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw64:ltsc2019 + container_cmd: C:\msys64\usr\bin\sh + prepare: pacman -S --needed --noconfirm --noprogressbar libssh2-devel mingw-w64-x86_64-libssh2 + configure: --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/mingw64 --enable-debug --enable-werror --enable-sspi --with-schannel --with-winidn --with-libssh2 + tests: "~571" + mingw32_schannel_nozlib: + name: 32-bit Schannel/SSPI/WinIDN w/o zlib + container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw32:ltsc2019 + container_cmd: C:\msys64\usr\bin\sh + configure: --host=i686-w64-mingw32 --build=i686-w64-mingw32 --prefix=/mingw32 --enable-debug --enable-werror --enable-sspi --with-schannel --with-winidn --without-zlib + tests: "!203 !1143" + mingw64_schannel_nozlib: + name: 64-bit Schannel/SSPI/WinIDN w/o zlib + container_img: ghcr.io/mback2k/curl-docker-winbuildenv/msys2-mingw64:ltsc2019 + container_cmd: C:\msys64\usr\bin\sh + configure: --host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --prefix=/mingw64 --enable-debug --enable-werror --enable-sspi --with-schannel --with-winidn --without-zlib + tests: "!203 !1143" + container: + image: $(container_img) + env: + MSYS2_PATH_TYPE: inherit + steps: + - script: $(container_cmd) -l -c "cd $(echo '%cd%') && $(prepare)" + displayName: 'prepare' + condition: variables.prepare + retryCountOnTaskFailure: 3 + + - script: $(container_cmd) -l -c "cd $(echo '%cd%') && autoreconf -fi && ./configure $(configure)" + displayName: 'configure $(name)' + + - script: $(container_cmd) -l -c "cd $(echo '%cd%') && make V=1 && make V=1 examples && cd tests && make V=1" + displayName: 'compile' + + - script: $(container_cmd) -l -c "cd $(echo '%cd%') && make V=1 install && PATH=/usr/bin:/bin find . -type f -path '*/.libs/*.exe' -print -execdir mv -t .. {} \;" + displayName: 'install' + + - script: $(container_cmd) -l -c "cd $(echo '%cd%') && make V=1 test-ci" + displayName: 'test' + env: + AZURE_ACCESS_TOKEN: "$(System.AccessToken)" + TFLAGS: "-ac /usr/bin/curl.exe !IDN !SCP ~612 $(tests)" diff --git a/deps/curl/.circleci/config.yml b/deps/curl/.circleci/config.yml new file mode 100644 index 0000000..11bb0ef --- /dev/null +++ b/deps/curl/.circleci/config.yml @@ -0,0 +1,540 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +# View these jobs in the browser: https://app.circleci.com/pipelines/github/curl/curl + +# Use the latest 2.1 version of CircleCI pipeline process engine. See: https://circleci.com/docs/2.0/configuration-reference +version: 2.1 + +commands: + configure: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-werror --with-openssl + + configure-openssl-no-verbose: + steps: + - run: + command: | + autoreconf -fi + ./configure --disable-verbose --enable-werror --with-openssl + + configure-no-proxy: + steps: + - run: + command: | + autoreconf -fi + ./configure --disable-proxy --enable-werror --with-openssl + + configure-macos-normal: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --without-ssl CFLAGS='-Wno-vla -mmacosx-version-min=10.9' + + configure-macos-debug: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --without-ssl --enable-debug CFLAGS='-Wno-vla -mmacosx-version-min=10.9' + + configure-macos-libssh2: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --without-ssl --with-libssh2=/opt/homebrew/opt/libssh2 --enable-debug CFLAGS='-Wno-vla -mmacosx-version-min=10.9' + + configure-macos-libssh-c-ares: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --with-openssl --with-libssh --enable-ares --enable-debug PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' + + configure-macos-libssh: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --with-openssl --with-libssh --enable-debug PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' + + configure-macos-c-ares: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --without-ssl --enable-ares --enable-debug CFLAGS='-Wno-vla -mmacosx-version-min=10.9' + + configure-macos-http-only: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-maintainer-mode --disable-dict --disable-file --disable-ftp --disable-gopher --disable-imap --disable-ldap --disable-pop3 --disable-rtmp --disable-rtsp --disable-scp --disable-sftp --disable-smb --disable-smtp --disable-telnet --disable-tftp --disable-unix-sockets --disable-shared --without-brotli --without-gssapi --without-libidn2 --without-libpsl --without-librtmp --without-libssh2 --without-nghttp2 --without-ntlm-auth --without-ssl --without-zlib --enable-debug CFLAGS='-Wno-vla -mmacosx-version-min=10.15' + + configure-macos-securetransport-http2: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --with-secure-transport CFLAGS='-Wno-vla -mmacosx-version-min=10.8' + + configure-macos-openssl-http2: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --with-openssl --enable-debug PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' + + configure-macos-libressl-http2: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --with-openssl --enable-debug PKG_CONFIG_PATH="$(brew --prefix libressl)/lib/pkgconfig" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' + + configure-macos-torture: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --disable-shared --disable-threaded-resolver --with-openssl --enable-debug PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' + + configure-macos-torture-ftp: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-websockets --disable-shared --disable-threaded-resolver --with-openssl --enable-debug PKG_CONFIG_PATH="$(brew --prefix openssl)/lib/pkgconfig" CFLAGS='-Wno-vla -mmacosx-version-min=10.9' + + install-cares: + steps: + - run: + command: | + sudo apt-get update && sudo apt-get install -y libc-ares-dev + + install-libssh: + steps: + - run: + command: | + sudo apt-get update && sudo apt-get install -y libssh-dev + + install-deps: + steps: + - run: + command: | + sudo apt-get update && sudo apt-get install -y libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev python3-pip + sudo python3 -m pip install impacket + + install-deps-brew: + steps: + - run: + command: | + # Drop libressl as long as we're not trying to build it + echo libtool autoconf automake pkg-config nghttp2 libssh2 openssl libssh c-ares | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile + while [ $? -eq 0 ]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done + sudo python3 -m pip install impacket + + configure-libssh: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-werror --with-openssl --with-libssh + + install-wolfssl: + steps: + - run: + command: | + WOLFSSL_VER=5.6.0 + curl -LOsSf --retry 6 --retry-connrefused --max-time 999 https://github.com/wolfSSL/wolfssl/archive/v$WOLFSSL_VER-stable.tar.gz + tar -xzf v$WOLFSSL_VER-stable.tar.gz + cd wolfssl-$WOLFSSL_VER-stable + ./autogen.sh + ./configure --enable-tls13 --enable-all --enable-harden --prefix=$HOME/wssl + make install + + install-wolfssh: + steps: + - run: + command: | + WOLFSSH_VER=1.4.12 + curl -LOsSf --retry 6 --retry-connrefused --max-time 999 https://github.com/wolfSSL/wolfssh/archive/v$WOLFSSH_VER-stable.tar.gz + tar -xzf v$WOLFSSH_VER-stable.tar.gz + cd wolfssh-$WOLFSSH_VER-stable + ./autogen.sh + ./configure --with-wolfssl=$HOME/wssl --prefix=$HOME/wssh --enable-scp --enable-sftp --disable-examples + make install + + configure-cares: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-warnings --enable-werror --with-openssl --enable-ares + + configure-wolfssh: + steps: + - run: + command: | + autoreconf -fi + LDFLAGS="-Wl,-rpath,$HOME/wssh/lib" ./configure --enable-warnings --enable-werror --with-wolfssl=$HOME/wssl --with-wolfssh=$HOME/wssh + + configure-cares-debug: + steps: + - run: + command: | + autoreconf -fi + ./configure --enable-debug --enable-werror --with-openssl --enable-ares + + build: + steps: + - run: make -j3 V=1 + - run: make -j3 V=1 examples + + build-macos: + steps: + - run: make -j7 V=1 + - run: make -j7 V=1 examples + + test: + steps: + - run: make -j3 V=1 test-ci + + test-macos: + steps: + - run: make -j7 V=1 test-ci + + test-torture: + steps: + - run: make -j5 V=1 test-ci TFLAGS="-n -t --shallow=25 !FTP" + + test-torture-ftp: + steps: + - run: make -j5 V=1 test-ci TFLAGS="-n -t --shallow=20 FTP" + +executors: + ubuntu: + machine: + image: ubuntu-2004:202010-01 + +jobs: + basic: + executor: ubuntu + steps: + - checkout + - configure + - build + - test + + no-verbose: + executor: ubuntu + steps: + - checkout + - install-deps + - configure-openssl-no-verbose + - build + + wolfssh: + executor: ubuntu + steps: + - checkout + - install-deps + - install-wolfssl + - install-wolfssh + - configure-wolfssh + - build + + no-proxy: + executor: ubuntu + steps: + - checkout + - install-deps + - configure-no-proxy + - build + - test + + cares: + executor: ubuntu + steps: + - checkout + - install-cares + - configure-cares + - build + - test + + libssh: + executor: ubuntu + steps: + - checkout + - install-libssh + - configure-libssh + - build + - test + + arm: + machine: + image: ubuntu-2004:202101-01 + resource_class: arm.medium + steps: + - checkout + - configure + - build + - test + + arm-cares: + machine: + image: ubuntu-2004:202101-01 + resource_class: arm.medium + steps: + - checkout + - install-cares + - configure-cares-debug + - build + - test + + # TODO: All builds with "macos.x86.medium.gen2" must be changed to + # "macos.m1.medium.gen1" in January 2024 because the former will be removed + # (the names should also be changed from macos-x86-* to macos-arm-*). We + # want the M1 (ARM) machines anyway, for platform diversity. + # See https://circleci.com/docs/configuration-reference/#macos-execution-environment + macos-x86-normal: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-normal + - build-macos + - test-macos + + macos-x86-debug: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-debug + - build-macos + - test-macos + + macos-x86-libssh2: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-libssh2 + - build-macos + - test-macos + + macos-x86-libssh-c-ares: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-libssh-c-ares + - build-macos + - test-macos + + macos-x86-libssh: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-libssh + - build-macos + - test-macos + + macos-x86-c-ares: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-c-ares + - build-macos + - test-macos + + macos-x86-http-only: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-http-only + - build-macos + - test-macos + + macos-x86-http-securetransport-http2: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-securetransport-http2 + - build-macos + - test-macos + + macos-x86-http-openssl-http2: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-openssl-http2 + - build-macos + - test-macos + + macos-x86-http-libressl-http2: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-libressl-http2 + - build-macos + - test-macos + + macos-x86-http-torture: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-torture + - build-macos + - test-torture + + macos-x86-http-torture-ftp: + macos: + xcode: 15.0.0 + resource_class: macos.x86.medium.gen2 + steps: + - checkout + - install-deps-brew + - configure-macos-torture-ftp + - build-macos + - test-torture-ftp + +workflows: + x86-openssl: + jobs: + - basic + + openssl-c-ares: + jobs: + - cares + + openssl-libssh: + jobs: + - libssh + + openssl-no-proxy: + jobs: + - no-proxy + + openssl-no-verbose: + jobs: + - no-verbose + + wolfssl-wolfssh: + jobs: + - wolfssh + + arm-openssl: + jobs: + - arm + + arm-openssl-c-ares: + jobs: + - arm-cares + + macos-x86-normal: + jobs: + - macos-x86-normal + + macos-x86-debug: + jobs: + - macos-x86-debug + + macos-x86-libssh2: + jobs: + - macos-x86-libssh2 + + macos-x86-libssh-c-ares: + jobs: + - macos-x86-libssh-c-ares + + macos-x86-libssh: + jobs: + - macos-x86-libssh + + macos-x86-c-ares: + jobs: + - macos-x86-c-ares + + macos-x86-http-only: + jobs: + - macos-x86-http-only + + macos-x86-http-securetransport-http2: + jobs: + - macos-x86-http-securetransport-http2 + + macos-x86-http-openssl-http2: + jobs: + - macos-x86-http-openssl-http2 + + # There are problem linking with LibreSSL on the CI boxes that prevent this + # from working. + #macos-x86-http-libressl-http2: + # jobs: + # - macos-x86-http-libressl-http2 + + macos-x86-http-torture: + jobs: + - macos-x86-http-torture + + macos-x86-http-torture-ftp: + jobs: + - macos-x86-http-torture-ftp diff --git a/deps/curl/.cirrus.yml b/deps/curl/.cirrus.yml new file mode 100644 index 0000000..27b4659 --- /dev/null +++ b/deps/curl/.cirrus.yml @@ -0,0 +1,85 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# https://cirrus-ci.com/github/curl/curl +# +# Cirrus CI configuration: +# https://cirrus-ci.org/guide/writing-tasks/ + +freebsd_task: + skip: "changesIncludeOnly( + '**/CMakeLists.txt', + '.azure-pipelines.yml', + '.circleci/**', + '.github/**', + 'appveyor.yml', + 'CMake/**', + 'packages/**', + 'plan9/**', + 'projects/**', + 'winbuild/**' + )" + + name: FreeBSD + + matrix: + - name: FreeBSD 14.0 + freebsd_instance: + image_family: freebsd-14-0 + + env: + CIRRUS_CLONE_DEPTH: 10 + CRYPTOGRAPHY_DONT_BUILD_RUST: 1 + MAKEFLAGS: -j 3 + + pkginstall_script: + - pkg update -f + - pkg install -y autoconf automake libtool pkgconf brotli openldap26-client heimdal libpsl libssh2 libidn2 librtmp libnghttp2 nghttp2 stunnel py39-openssl py39-impacket py39-cryptography + - pkg delete -y curl + configure_script: + - autoreconf -fi + # Building with the address sanitizer is causing unexplainable test issues due to timeouts + #- case `uname -r` in + # 12.2*) + # export CC=clang; + # export CFLAGS="-fsanitize=address,undefined,signed-integer-overflow -fno-sanitize-recover=undefined,integer -Wformat -Werror=format-security -Werror=array-bounds -g"; + # export CXXFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined,integer -Wformat -Werror=format-security -Werror=array-bounds -g"; + # export LDFLAGS="-fsanitize=address,undefined -fno-sanitize-recover=undefined,integer" ;; + # esac + - ./configure --prefix="${HOME}"/install --enable-debug --with-openssl --with-libssh2 --with-brotli --with-gssapi --with-libidn2 --enable-manual --enable-ldap --enable-ldaps --with-librtmp --with-libpsl --with-nghttp2 || { tail -300 config.log; false; } + compile_script: + - make V=1 && make V=1 examples && cd tests && make V=1 + test_script: + # blackhole? + - sysctl net.inet.tcp.blackhole + # make sure we don't run blackhole != 0 + - sudo sysctl net.inet.tcp.blackhole=0 + # Some tests won't run if run as root so run them as another user. + # Make directories world writable so the test step can write wherever it needs. + - find . -type d -exec chmod 777 {} \; + # The OpenSSH server instance for the testsuite cannot be started on FreeBSD, + # therefore the SFTP and SCP tests are disabled right away from the beginning. + # + - sudo -u nobody make V=1 TFLAGS="-n !SFTP !SCP" test-ci + install_script: + - make V=1 install diff --git a/deps/curl/.dcignore b/deps/curl/.dcignore new file mode 100644 index 0000000..e33af3e --- /dev/null +++ b/deps/curl/.dcignore @@ -0,0 +1,7 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +tests/** +docs/** +docs/examples/** diff --git a/deps/curl/.dir-locals.el b/deps/curl/.dir-locals.el new file mode 100644 index 0000000..f6248c2 --- /dev/null +++ b/deps/curl/.dir-locals.el @@ -0,0 +1,33 @@ +;;;*************************************************************************** +;;; _ _ ____ _ +;;; Project ___| | | | _ \| | +;;; / __| | | | |_) | | +;;; | (__| |_| | _ <| |___ +;;; \___|\___/|_| \_\_____| +;;; +;;; Copyright (C) Daniel Stenberg, , et al. +;;; +;;; This software is licensed as described in the file COPYING, which +;;; you should have received as part of this distribution. The terms +;;; are also available at https://curl.se/docs/copyright.html. +;;; +;;; You may opt to use, copy, modify, merge, publish, distribute and/or sell +;;; copies of the Software, and permit persons to whom the Software is +;;; furnished to do so, under the terms of the COPYING file. +;;; +;;; This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +;;; KIND, either express or implied. +;;; +;;; SPDX-License-Identifier: curl +;;; +;;;*************************************************************************** +;;; Directory Local Variables +;;; See Info node `(emacs) Directory Variables' for more information. + +((nil . ((indent-tabs-mode . nil) + (show-trailing-whitespace . t))) + (c-mode . ((c-basic-offset . 2) + )) + (c++-mode . ((c-basic-offset . 2) + )) + ) diff --git a/deps/curl/.git-blame-ignore-revs b/deps/curl/.git-blame-ignore-revs new file mode 100644 index 0000000..c627bfd --- /dev/null +++ b/deps/curl/.git-blame-ignore-revs @@ -0,0 +1,6 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +# Make repository REUSE compliant +ad9bc5976d6661cd5b03ebc379313bf657701c14 diff --git a/deps/curl/.gitattributes b/deps/curl/.gitattributes new file mode 100644 index 0000000..481fd5c --- /dev/null +++ b/deps/curl/.gitattributes @@ -0,0 +1,18 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +*.dsw -crlf +buildconf eol=lf +configure.ac eol=lf +*.m4 eol=lf +*.in eol=lf +*.am eol=lf +*.sh eol=lf +*.[ch] whitespace=tab-in-indent + +# Batch files (bat,btm,cmd) must be run with CRLF line endings. +# Refer to https://github.com/curl/curl/pull/6442 +*.bat text eol=crlf +*.btm text eol=crlf +*.cmd text eol=crlf diff --git a/deps/curl/.github/CODEOWNERS b/deps/curl/.github/CODEOWNERS new file mode 100644 index 0000000..7e1eea5 --- /dev/null +++ b/deps/curl/.github/CODEOWNERS @@ -0,0 +1,3 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl diff --git a/deps/curl/.github/CONTRIBUTING.md b/deps/curl/.github/CONTRIBUTING.md new file mode 100644 index 0000000..18be9ed --- /dev/null +++ b/deps/curl/.github/CONTRIBUTING.md @@ -0,0 +1,29 @@ + + +How to contribute to curl +========================= + +Join the community +------------------ + + 1. Click 'watch' on the GitHub repo + + 2. Subscribe to the suitable [mailing lists](https://curl.se/mail/) + +Read [CONTRIBUTE](../docs/CONTRIBUTE.md) +--------------------------------------- + +Send your suggestions using one of these methods: +------------------------------------------------- + + 1. in a mail to the mailing list + + 2. as a [pull request](https://github.com/curl/curl/pulls) + + 3. as an [issue](https://github.com/curl/curl/issues) + +/ The curl team! diff --git a/deps/curl/.github/FUNDING.yml b/deps/curl/.github/FUNDING.yml new file mode 100644 index 0000000..f02b2d3 --- /dev/null +++ b/deps/curl/.github/FUNDING.yml @@ -0,0 +1,6 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +github: curl +open_collective: curl diff --git a/deps/curl/.github/ISSUE_TEMPLATE/bug_report.yml b/deps/curl/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 0000000..e74ac08 --- /dev/null +++ b/deps/curl/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,55 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: Bug Report +description: Create a report to help us improve + +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + + Only file bugs here! Ask questions on the mailing lists https://curl.se/mail/ + + **SECURITY RELATED?** Post it here: https://hackerone.com/curl + + There are collections of known issues to be aware of: + + - https://curl.se/docs/knownbugs.html + - https://curl.se/docs/todo.html + + - type: textarea + id: reproducer + attributes: + label: I did this + validations: + required: false + + - type: textarea + id: expected-behaviour + attributes: + label: I expected the following + validations: + required: false + + - type: textarea + id: version + attributes: + label: curl/libcurl version + description: | + Please paste the output of `curl -V` here. + placeholder: 'curl 8.2.0' + validations: + required: true + + - type: textarea + id: os + attributes: + label: operating system + description: | + On Unix please post the output of `uname -a` here. + placeholder: 'Fedora Linux 38' + validations: + required: true diff --git a/deps/curl/.github/ISSUE_TEMPLATE/config.yml b/deps/curl/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..9ca2c8f --- /dev/null +++ b/deps/curl/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,15 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +blank_issues_enabled: false +contact_links: + - name: Feature request + url: https://curl.se/mail/ + about: To propose new features or enhancements, please bring that discussion to a suitable curl mailing list. + - name: Question + url: https://curl.se/mail/ + about: Questions should go to the mailing list + - name: Commercial support + url: https://curl.se/support.html + about: Several companies are offering paid support for curl/libcurl diff --git a/deps/curl/.github/labeler.yml b/deps/curl/.github/labeler.yml new file mode 100644 index 0000000..be585a6 --- /dev/null +++ b/deps/curl/.github/labeler.yml @@ -0,0 +1,493 @@ +# Copyright (C) Daniel Fandrich, , et al. +# +# SPDX-License-Identifier: curl + +# The workflow configures the .github/workflows/label.yml action +# to add labels to pull requests. This is not (yet?) a replacement for human +# triaging, but is intended to add labels to the easy cases. If the matching +# language becomes more powerful, more cases should be able to be handled. +# +# Labels are added in two ways: the any-glob-to-all-files ones are added if all +# the files fit into the category, and the any-glob-to-any-file ones are added +# as long as any file matches. The first ones are for "major" categories (the +# PR is all about that one topic, like HTTP/3), while the second ones are +# "addendums" that give useful information about a PR that's really mostly +# something else (e.g. CI if the PR also touches CI jobs). + +appleOS: +- all: + - changed-files: + - any-glob-to-all-files: + - '.github/workflows/macos.yml' + - 'lib/config-mac.h' + - 'lib/macos*' + - 'lib/vtls/sectransp*' + - 'm4/curl-sectransp.m4' + - 'MacOSX-Framework' + +authentication: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/mk-ca-bundle.1' + - 'docs/libcurl/opts/CURLINFO_HTTPAUTH*' + - 'docs/libcurl/opts/CURLINFO_PROXYAUTH*' + - 'docs/libcurl/opts/CURLOPT_KRB*' + - 'docs/libcurl/opts/CURLOPT_SASL*' + - 'docs/libcurl/opts/CURLOPT_SERVICE_NAME*' + - 'docs/libcurl/opts/CURLOPT_USERNAME*' + - 'docs/libcurl/opts/CURLOPT_USERPWD*' + - 'docs/libcurl/opts/CURLOPT_XOAUTH*' + - 'lib/*gssapi*' + - 'lib/*krb5*' + - 'lib/*ntlm*' + - 'lib/curl_sasl.*' + - 'lib/http_aws*' + - 'lib/http_digest.*' + - 'lib/http_negotiate.*' + - 'lib/vauth/**' + - 'tests/server/fake_ntlm.c' + +build: +- all: + - changed-files: + - any-glob-to-all-files: + - '**/CMakeLists.txt' + - '**/Makefile.am' + - '**/Makefile.inc' + - '**/Makefile.mk' + - '**/*.m4' + - '**/*.mk' + - '*.m4' + - 'docs/INSTALL.cmake' + - 'lib/curl_config.h.cmake' + - 'lib/libcurl*.in' + - 'CMake/**' + - 'CMakeLists.txt' + - 'configure.ac' + - 'm4/**' + - 'MacOSX-Framework' + - 'Makefile.*' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + - 'libcurl.def' + +CI: +- all: + - changed-files: + - any-glob-to-any-file: + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - '.github/**' + - 'appveyor.yml' + - 'scripts/ci*' + - 'tests/azure.pm' + - 'tests/appveyor.pm' + - 'tests/CI.md' + +cmake: +- all: + - changed-files: + - any-glob-to-all-files: + - '**/CMakeLists.txt' + - 'CMake/**' + - 'docs/INSTALL.cmake' + - 'lib/curl_config.h.cmake' + +cmdline tool: +- all: + - changed-files: + - any-glob-to-any-file: + - 'docs/cmdline-opts/**' + - 'src/**' + +connecting & proxies: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/CONNECTION-FILTERS.md' + - 'docs/examples/ipv6.c' + - 'docs/libcurl/opts/CURLINFO_CONNECT*' + - 'docs/libcurl/opts/CURLINFO_PROXY*' + - 'docs/libcurl/opts/CURLOPT_ADDRESS*' + - 'docs/libcurl/opts/CURLOPT_CONNECT*' + - 'docs/libcurl/opts/CURLOPT_HAPROXY*' + - 'docs/libcurl/opts/CURLOPT_OPENSOCKET*' + - 'docs/libcurl/opts/CURLOPT_PRE_PROXY*' + - 'docs/libcurl/opts/CURLOPT_PROXY*' + - 'docs/libcurl/opts/CURLOPT_SOCKOPT*' + - 'docs/libcurl/opts/CURLOPT_SOCKS*' + - 'docs/libcurl/opts/CURLOPT_TCP*' + - 'docs/libcurl/opts/CURLOPT_TIMEOUT*' + - 'lib/cf-*proxy.*' + - 'lib/cf-socket.*' + - 'lib/cfilters.*' + - 'lib/conncache.*' + - 'lib/connect.*' + - 'lib/http_proxy.*' + - 'lib/if2ip.*' + - 'lib/noproxy.*' + - 'lib/socks.*' + - 'tests/server/socksd.c' + +cookies: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/HTTP-COOKIES.md' + - 'docs/cmdline-opts/cookie*' + - 'docs/cmdline-opts/junk-session-cookies.d' + - 'docs/libcurl/opts/CURLINFO_COOKIE*' + - 'docs/libcurl/opts/CURLOPT_COOKIE*' + - 'docs/examples/cookie_interface.c' + - 'lib/cookie.*' + - 'lib/psl.*' + +cryptography: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/CIPHERS.md' + - 'docs/RUSTLS.md' + - 'docs/libcurl/opts/CURLOPT_EGDSOCKET*' + - 'lib/*sha256*' + - 'lib/curl_des.*' + - 'lib/curl_hmac.*' + - 'lib/curl_md?.*' + - 'lib/md?.*' + - 'lib/rand.*' + +DICT: +- all: + - changed-files: + - any-glob-to-all-files: + - 'lib/dict.*' + - 'tests/dictserver.py' + +documentation: +- all: + - changed-files: + - any-glob-to-all-files: + - '**/*.md' + - '**/*.txt' + - '**/*.1' + - '**/*.3' + - 'CHANGES' + - 'docs/**' + - 'GIT-INFO' + - 'LICENSES/**' + - 'README' + - 'RELEASE-NOTES' + - AllGlobsToAllFiles: + # negative matches + - '!**/CMakeLists.txt' + - '!**/Makefile.am' + +FTP: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/libcurl/opts/CURLINFO_FTP*' + - 'docs/libcurl/opts/CURLOPT_FTP*' + - 'docs/libcurl/opts/CURLOPT_WILDCARDMATCH*' + - 'docs/examples/ftp*' + - 'lib/curl_fnmatch.*' + - 'lib/curl_range.*' + - 'lib/ftp*' + - 'tests/ftp*' + +GOPHER: +- all: + - changed-files: + - any-glob-to-all-files: + - 'lib/gopher*' + +HTTP: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/examples/hsts*' + - 'docs/examples/http-*' + - 'docs/examples/httpput*' + - 'docs/examples/https*' + - 'docs/examples/*post*' + - 'docs/HSTS.md' + - 'docs/HTTP-COOKIES.md' + - 'docs/libcurl/opts/CURLINFO_COOKIE*' + - 'docs/libcurl/opts/CURLOPT_COOKIE*' + - 'docs/libcurl/opts/CURLINFO_HTTP_**' + - 'docs/libcurl/opts/CURLINFO_REDIRECT*' + - 'docs/libcurl/opts/CURLINFO_REFER*' + - 'docs/libcurl/opts/CURLOPT_FOLLOWLOCATION*' + - 'docs/libcurl/opts/CURLOPT_HSTS*' + - 'docs/libcurl/opts/CURLOPT_HTTP*' + - 'docs/libcurl/opts/CURLOPT_POST.*' + - 'docs/libcurl/opts/CURLOPT_POSTFIELD*' + - 'docs/libcurl/opts/CURLOPT_POSTREDIR*' + - 'docs/libcurl/opts/CURLOPT_REDIR*' + - 'docs/libcurl/opts/CURLOPT_REFER*' + - 'docs/libcurl/opts/CURLOPT_TRAILER*' + - 'docs/libcurl/opts/CURLOPT_TRANSFER_ENCODING*' + - 'lib/cf-https*' + - 'lib/cf-h1*' + - 'lib/cf-h2*' + - 'lib/cookie.*' + - 'lib/http*' + - 'tests/http*' + - 'tests/http-server.pl' + - 'tests/http/*' + - 'tests/nghttp*' + +HTTP/2: +- all: + - changed-files: + - any-glob-to-all-files: + - 'CMake/FindNGHTTP2.cmake' + - 'CMake/FindQUICHE.cmake' + - 'docs/HTTP2.md' + - 'docs/libcurl/opts/CURLOPT_STREAM*' + - 'docs/examples/http2*' + - 'lib/http2*' + - 'tests/http2-server.pl' + +HTTP/3: +- all: + - changed-files: + - any-glob-to-all-files: + - '.github/workflows/ngtcp2*' + - '.github/workflows/quiche*' + - 'CMake/FindMSH3.cmake' + - 'CMake/FindNGHTTP3.cmake' + - 'CMake/FindNGTCP2.cmake' + - 'docs/HTTP3.md' + - 'docs/examples/http3*' + - 'lib/vquic/**' + - 'tests/http3-server.pl' + - 'tests/nghttpx.conf' + +Hyper: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/HYPER.md' + - 'lib/c-hyper.*' + +IMAP: +- all: + - changed-files: + - any-glob-to-all-files: + - 'lib/imap*' + - 'docs/examples/imap*' + +LDAP: +- all: + - changed-files: + - any-glob-to-all-files: + - 'lib/*ldap*' + +libcurl API: +- all: + - changed-files: + - any-glob-to-any-file: + - 'docs/libcurl/ABI.md' + - 'docs/libcurl/curl_*.3' + - 'include/curl/**' + +logging: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/cmdline-opts/trace*' + - 'docs/libcurl/curl_global_trace*' + - 'lib/curl_trc*' + - 'tests/http/test_15_tracing.py' + +MIME: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/libcurl/curl_form*' + - 'docs/libcurl/curl_mime_*' + - 'docs/libcurl/opts/CURLOPT_MIME*' + - 'docs/libcurl/opts/CURLOPT_HTTPPOST*' + - 'lib/formdata*' + - 'lib/mime*' + - 'src/tool_formparse.*' + +MQTT: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/MQTT.md' + - 'lib/mqtt*' + - 'tests/server/mqttd.c' + +name lookup: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/examples/resolve.c' + - 'docs/libcurl/opts/CURLINFO_NAMELOOKUP*' + - 'docs/libcurl/opts/CURLOPT_DNS*' + - 'docs/libcurl/opts/CURLOPT_DOH*' + - 'docs/libcurl/opts/CURLOPT_RESOLVE*' + - 'lib/asyn*' + - 'lib/curl_gethostname.*' + - 'lib/doh*' + - 'lib/host*' + - 'lib/idn*' + - 'lib/inet_pton.*' + - 'lib/socketpair*' + - 'tests/server/resolve.c' + +POP3: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/examples/pop3*' + - 'lib/pop3.*' + +RTMP: +- all: + - changed-files: + - any-glob-to-all-files: + - 'lib/curl_rtmp.*' + +RTSP: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/libcurl/opts/CURLINFO_RTSP*' + - 'docs/libcurl/opts/CURLOPT_RTSP*' + - 'lib/rtsp.*' + - 'tests/rtspserver.pl' + - 'tests/server/rtspd.c' + +SCP/SFTP: +- all: + - changed-files: + - any-glob-to-all-files: + - 'CMake/FindLibSSH2.cmake' + - 'docs/libcurl/opts/CURLOPT_SSH*' + - 'docs/examples/sftp*' + - 'lib/vssh/**' + - 'tests/sshhelp.pm' + - 'tests/sshserver.pl' + +script: +- all: + - changed-files: + - any-glob-to-all-files: + - '**/*.pl' + - '**/*.sh' + - 'curl-config.in' + - 'docs/curl-config.1' + - 'docs/mk-ca-bundle.1' + - 'docs/THANKS-filter' + - 'scripts/**' + +SMB: +- all: + - changed-files: + - any-glob-to-all-files: + - 'lib/smb.*' + - 'tests/smbserver.py' + +SMTP: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/examples/smtp-*' + - 'docs/libcurl/opts/CURLOPT_MAIL*' + - 'lib/smtp.*' + +tests: +- all: + - changed-files: + - any-glob-to-any-file: + - 'tests/**' + +TFTP: +- all: + - changed-files: + - any-glob-to-all-files: + - 'lib/tftp.*' + - 'tests/tftpserver.pl' + - 'tests/server/tftp*' + +TLS: +- all: + - changed-files: + - any-glob-to-all-files: + - 'CMake/FindBearSSL.cmake' + - 'CMake/FindMbedTLS.cmake' + - 'CMake/FindWolfSSL.cmake' + - 'docs/examples/ssl*' + - 'docs/examples/*ssl.*' + - 'docs/examples/*tls.*' + - 'docs/SSL*' + - 'docs/libcurl/curl_global_sslset*' + - 'docs/libcurl/opts/CURLINFO_CA*' + - 'docs/libcurl/opts/CURLINFO_CERT*' + - 'docs/libcurl/opts/CURLINFO_SSL*' + - 'docs/libcurl/opts/CURLINFO_TLS*' + - 'docs/libcurl/opts/CURLOPT_CA*' + - 'docs/libcurl/opts/CURLOPT_CERT*' + - 'docs/libcurl/opts/CURLOPT_PINNEDPUBLICKEY*' + - 'docs/libcurl/opts/CURLOPT_SSL*' + - 'docs/libcurl/opts/CURLOPT_TLS*' + - 'docs/libcurl/opts/CURLOPT_USE_SSL*' + - 'lib/vtls/**' + - 'm4/curl-bearssl.m4' + - 'm4/curl-gnutls.m4' + - 'm4/curl-mbedtls.m4' + - 'm4/curl-openssl.m4' + - 'm4/curl-rustls.m4' + - 'm4/curl-schannel.m4' + - 'm4/curl-sectransp.m4' + - 'm4/curl-wolfssl.m4' + +URL: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/libcurl/curl_url*' + - 'docs/URL-SYNTAX.md' + - 'docs/examples/parseurl*' + - 'include/curl/urlapi.h' + - 'lib/urlapi*' + +WebSocket: +- all: + - changed-files: + - any-glob-to-all-files: + - 'docs/WEBSOCKET.md*' + - 'docs/examples/websocket*' + - 'docs/libcurl/curl_ws_*' + - 'docs/libcurl/libcurl-ws*' + - 'docs/libcurl/opts/CURLOPT_WS_*' + - 'include/curl/websockets.h' + - 'lib/ws.*' + - 'tests/http/clients/ws*' + - 'tests/http/test_20_websockets.py' + - 'tests/http/testenv/ws*' + +Windows: +- all: + - changed-files: + - any-glob-to-all-files: + - '**/Makefile.mk' + - 'appveyor.yml' + - 'CMake/Platforms/WindowsCache.cmake' + - 'lib/*win32*' + - 'lib/curl_multibyte.*' + - 'lib/rename.*' + - 'lib/vtls/schannel*' + - 'm4/curl-schannel.m4' + - 'projects/**' + - 'src/tool_doswin.c' + - 'winbuild/**' + - 'libcurl.def' diff --git a/deps/curl/.github/lock.yml b/deps/curl/.github/lock.yml new file mode 100644 index 0000000..ab30d2a --- /dev/null +++ b/deps/curl/.github/lock.yml @@ -0,0 +1,12 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +# Configuration for lock-threads - https://github.com/dessant/lock-threads + +# Number of days of inactivity before a closed issue or pull request is locked +daysUntilLock: 90 +# Comment to post before locking. Set to `false` to disable +lockComment: false +# Limit to only `issues` or `pulls` +# only: issues diff --git a/deps/curl/.github/scripts/cleanspell.pl b/deps/curl/.github/scripts/cleanspell.pl new file mode 100644 index 0000000..329a972 --- /dev/null +++ b/deps/curl/.github/scripts/cleanspell.pl @@ -0,0 +1,79 @@ +#!/usr/bin/perl +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl +# +# Input: a libcurl nroff man page +# Output: the same file, minus the SYNOPSIS and the EXAMPLE sections +# + +my $f = $ARGV[0]; +my $o = $ARGV[1]; + +open(F, "<$f") or die; +open(O, ">$o") or die; + +my $ignore = 0; +while() { + if($_ =~ /^.SH (SYNOPSIS|EXAMPLE|\"SEE ALSO\"|SEE ALSO)/) { + $ignore = 1; + } + elsif($ignore && ($_ =~ /^.SH/)) { + $ignore = 0; + } + elsif(!$ignore) { + # filter out mentioned CURLE_ names + $_ =~ s/CURL(M|SH|U|H)code//g; + $_ =~ s/CURL_(READ|WRITE)FUNC_[A-Z0-9_]*//g; + $_ =~ s/CURL_CSELECT_[A-Z0-9_]*//g; + $_ =~ s/CURL_DISABLE_[A-Z0-9_]*//g; + $_ =~ s/CURL_FORMADD_[A-Z0-9_]*//g; + $_ =~ s/CURL_HET_DEFAULT//g; + $_ =~ s/CURL_IPRESOLVE_[A-Z0-9_]*//g; + $_ =~ s/CURL_PROGRESSFUNC_CONTINUE//g; + $_ =~ s/CURL_REDIR_[A-Z0-9_]*//g; + $_ =~ s/CURL_RTSPREQ_[A-Z0-9_]*//g; + $_ =~ s/CURL_TIMECOND_[A-Z0-9_]*//g; + $_ =~ s/CURL_VERSION_[A-Z0-9_]*//g; + $_ =~ s/CURLALTSVC_[A-Z0-9_]*//g; + $_ =~ s/CURLAUTH_[A-Z0-9_]*//g; + $_ =~ s/CURLE_[A-Z0-9_]*//g; + $_ =~ s/CURLFORM_[A-Z0-9_]*//g; + $_ =~ s/CURLFTP_[A-Z0-9_]*//g; + $_ =~ s/CURLFTPAUTH_[A-Z0-9_]*//g; + $_ =~ s/CURLFTPMETHOD_[A-Z0-9_]*//g; + $_ =~ s/CURLFTPSSL_[A-Z0-9_]*//g; + $_ =~ s/CURLGSSAPI_[A-Z0-9_]*//g; + $_ =~ s/CURLHEADER_[A-Z0-9_]*//g; + $_ =~ s/CURLINFO_[A-Z0-9_]*//g; + $_ =~ s/CURLM_[A-Z0-9_]*//g; + $_ =~ s/CURLMIMEOPT_[A-Z0-9_]*//g; + $_ =~ s/CURLMOPT_[A-Z0-9_]*//g; + $_ =~ s/CURLOPT_[A-Z0-9_]*//g; + $_ =~ s/CURLPIPE_[A-Z0-9_]*//g; + $_ =~ s/CURLPROTO_[A-Z0-9_]*//g; + $_ =~ s/CURLPROXY_[A-Z0-9_]*//g; + $_ =~ s/CURLPX_[A-Z0-9_]*//g; + $_ =~ s/CURLSHE_[A-Z0-9_]*//g; + $_ =~ s/CURLSHOPT_[A-Z0-9_]*//g; + $_ =~ s/CURLSSH_[A-Z0-9_]*//g; + $_ =~ s/CURLSSLBACKEND_[A-Z0-9_]*//g; + $_ =~ s/CURLU_[A-Z0-9_]*//g; + $_ =~ s/CURLUE_[A-Z0-9_]*//g; + $_ =~ s/CURLUPART_[A-Z0-9_]*//g; + $_ =~ s/CURLUSESSL_[A-Z0-9_]*//g; + $_ =~ s/curl_global_(init_mem|sslset|cleanup)//g; + $_ =~ s/curl_(strequal|strnequal|formadd|waitfd|formget|getdate|formfree)//g; + $_ =~ s/curl_easy_(nextheader|duphandle)//g; + $_ =~ s/curl_multi_fdset//g; + $_ =~ s/curl_mime_(subparts|addpart|filedata|data_cb)//g; + $_ =~ s/curl_ws_(send|recv|meta)//g; + $_ =~ s/curl_url_(dup)//g; + $_ =~ s/curl_pushheader_by(name|num)//g; + $_ =~ s/libcurl-(env|ws)//g; + $_ =~ s/(^|\W)((tftp|https|http|ftp):\/\/[a-z0-9\-._~%:\/?\#\[\]\@!\$&'()*+,;=]+)//gi; + print O $_; + } +} +close(F); +close(O); diff --git a/deps/curl/.github/scripts/codespell-ignore.txt b/deps/curl/.github/scripts/codespell-ignore.txt new file mode 100644 index 0000000..3832cec --- /dev/null +++ b/deps/curl/.github/scripts/codespell-ignore.txt @@ -0,0 +1,15 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl +clen +te +wont +statics +nome +wast +numer +anull +inout +msdos +ba +fo diff --git a/deps/curl/.github/scripts/spellcheck.words b/deps/curl/.github/scripts/spellcheck.words new file mode 100644 index 0000000..4bee9bf --- /dev/null +++ b/deps/curl/.github/scripts/spellcheck.words @@ -0,0 +1,921 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl +# +ABI +accessor +ACK +AES +AIA +AIX +al +Alessandro +allocator +alnum +ALPN +Altera +AltSvc +ALTSVC +amiga +AmigaOS +AmiSSL +anyauth +anycast +apache +Apache +API +APIs +APOP +AppVeyor +archivers +Archos +Arntsen +Aros +ascii +asynch +AsynchDNS +atime +auth +autobuild +autobuilds +Autoconf +Automake +Autotools +autotools +AVR +AWS +AWS-LC +axTLS +backend +backends +backoff +backticks +Baratov +basename +bashrc +BDFL +BearSSL +Benoit +BeOS +bitmask +bitwise +Björn +Bjørn +bool +boolean +BoringSSL +boringssl +Boukris +Broadcom +brotli +bufq +bufref +bugfix +bugfixes +buildable +buildbot +buildconf +Caddy +calloc +CAPA +capath +CCC +CDN +CentOS +CFLAGS +CGI's +CHACHA +chacha +Chaffraix +changelog +changeset +CharConv +charset +charsets +checksrc +checksums +chgrp +chmod +chown +ChromeOS +CI's +CIDR +CIFS +CLA +CLAs +cleartext +CLI +clientp +cliget +closesocket +CMake +cmake +cmake's +CMakeLists +CodeQL +codeql +CODESET +codeset +Comcast +Config +config +conncache +connectdata +CookieInfo +Coverity +CPUs +CR +CRL +CRLF +crt +crypto +cryptographic +cryptographically +CSEQ +CSeq +csh +cshrc +CTRL +cURL +CURLcode +CURLE +CURLH +CURLINFO +curlimages +curlrc +curltest +customizable +CVE +CVSS +CWD +CWE +cyassl +Cygwin +daniel +datatracker +dbg +Debian +DEBUGBUILD +decrypt +deepcode +DELE +DER +deselectable +Deserialized +deserialization +destructor +detections +dev +devcpp +DevOps +devtools +DHCP +dir +distro +distro's +distros +DJGPP +dlist +DLL +dll +DLLs +DNS +dns +dnsop +DoH +doxygen +drftpd +dsa +Dudka +Dymond +dynbuf +EAGAIN +EBCDIC +ECC +ECDHE +ECH +ECONNREFUSED +eCOS +EFnet +EGD +EHLO +EINTR +else's +encodings +enctype +endianness +Engler +enum +epoll +EPRT +EPSV +ERRNO +errno +ESNI +et +etag +ETag +ETags +exe +executables +EXPN +extensibility +failsafe +Falkeborn +Fandrich +Fastly +fcpp +Fedora +Feltzing +ffi +filesize +filesystem +FLOSS +fnmatch +formpost +formposts +Fortnite +FOSS +FPL +fread +FreeBSD +FreeDOS +FreeRTOS +freshmeat +Frexx +FS +fseek +FTPing +fuzzer +fwrite +Garmin +gcc +GCM +gdb +Genode +Gentoo +Gergely +getaddrinfo +getenv +gethostbyname +gethostname +Getinfo +getinfo +GETing +getpwuid +ggcov +Ghedini +Gisle +Glesys +globbed +globbing +gmail +GnuTLS +gnutls +Golemon +GOST +GPG +GPL +GPLed +Greear +groff +GSKit +gskit +GSS +GSSAPI +GTFO +Guenter +Gunderson +Gustafsson +gzip +Gzipped +gzipped +HackerOne +HackerOne's +HAProxy +HardenedBSD +Hards +Haxx +haxx +Heimdal +HELO +HH +HMAC +Hoersken +Holme +homebrew +hostname +hostnames +Housley +Hruska +HSTS +hsts +HTC +html +http +HTTPAUTH +httpd +HTTPD +httpget +HttpGet +HTTPS +https +hyper's +Högskolan +IANA +Icecast +ICONV +iconv +IDN +IDNA +IETF +ietf +ifdef +ifdefed +Ifdefs +ifdefs +IIS +ILE +Illumos +IMAP +imap +IMAPS +imaps +impacket +init +initializer +inlined +interop +interoperable +interoperates +IoT +ipadOS +IPFS +IPNS +ipld +trustless +IPCXN +IPv +IPv4 +IPv4/6 +IPv6 +IRIs +IRIX +Itanium +iX +Jakub +Jiri +jo +jpeg +jq +JSON +json +Julien +Kamil +Kaufmann +kB +KDE +keepalive +Keil +kerberos +Keychain +keychain +KiB +kickstart +Kirei +Knauf +kqueue +Krb +krb +Kubernetes +Kuhrt +Kungliga +Largefile +LDAP +ldap +LDAPS +ldaps +LF +LGTM +libbrotlidec +libc +libcurl +libcurl's +libcurls +libera +libev +libevent +libgsasl +libidn +libnssckbi +libnsspem +libpsl +Libre +libre +LibreSSL +libressl +librtmp +libs +libssh +libSSH +libssh2 +Libtool +libuv +libWebSocket +libz +libzstd +LineageOS +linux +ln +localhost +LOGDIR +logfile +lookups +loopback +LPRT +LSB +lseek +Lua +lwIP +macdef +macOS +macos +Makefile +makefiles +malloc +mallocs +maprintf +Marek +Mavrogiannopoulos +Mbed +mbedTLS +Meglio +memdebug +MesaLink +mesalink +Metalink +mfprintf +Michal +Micrium +MicroBlaze +MicroOS +mingw +MinGW +MINIX +misconfigured +Mishyn +mitigations +MITM +mk +mkdir +mktime +Monnerat +monospace +MorphOS +MPE +MPL +mprintf +MQTT +mqtt +mqtts +MSB +MSGSENT +msh +MSIE +msnprintf +msprintf +msquic +mstate +MSVC +MSYS +msys +mtime +mTLS +MUA +multicwd +multiparts +MultiSSL +mumbo +musedev +mutex +mvaprintf +mvfprintf +mvprintf +mvsnprintf +mvsprintf +MX +Nagel +Nagle +NAMELOOKUP +Natively +NATs +nc +NCR +NDK +NEC +Necko +NetBSD +netrc +netstat +Netware +NFS +nghttp +nghttpx +ngtcp +Nikos +Nios +nitems +NixOS +NLST +nmake +nmemb +nocwd +NODELAY +NonStop +NOOP +Novell +NPN +nroff +nslookup +NSS +nss +NTLM +NTLMUSER +NTLMv +NUM +NuttX +OAuth +objcopy +OCSP +Ok +OpenBSD +OpenLDAP +OpenRISC +OpenSSF +OpenSSF's +OpenSSH +OpenSSL +OpenStep +openSUSE +openwall +Orbis +ORing +Osipov +OSS +pac +pacman +parser's +parsers +PASE +PASV +PEM +pem +perl +permafailing +PINGs +pipelining +PKCS +pkcs +PKGBUILD +PKI +pluggable +PolarSSL +Polhem +pollset +POSIX +Postfix +POSTing +POSTs +PowerShell +pre +prebuilt +precompiled +prepend +prepended +prepending +prepends +preprocess +preprocessed +Preprocessing +preprocessor +Prereq +PRET +pretransfer +printf +printf's +PSL +pthreads +PTR +ptr +punycode +PWD +pwd +py +pycurl +pytest +Pytest +QNX +QoS +Qubes +QUIC +quictls +quicwg +Raad +radix +RAS +RBS +ReactOS +README +realloc +Realtime +rebase +RECV +recv +Redhat +redirections +redirs +redistributable +Redox +reentrant +Referer +referer +reinitializes +Relatedly +repo +reprioritized +resending +resends +RETR +retransmit +retrigger +RHEL +RICS +Rikard +rmdir +ROADMAP +Roadmap +Rockbox +roffit +RPG +RSA +RTMP +rtmp +RTMPE +RTMPS +RTMPT +RTMPTE +RTMPTS +RTOS +RTP +RTSP +rtsp +RTT +runtests +runtime +Ruslan +rustc +rustls +Sagula +SanDisk +SAS +SASL +Satiro +Schannel +Schindelin +SCO +SCP +scp +SDK +se +SEB +SEK +selectable +Serv +setopt +setsockopt +setuid +SFTP +sftp +sha +SHOUTcast +SIGALRM +SIGCHLD +SIGPIPE +singlecwd +SINIX +Sintonen +sizeof +SLE +slist +sln +SMB +smb +SMBS +smbs +SMBv +SMTP +smtp +smtps +SMTPS +SNI +socketopen +socketpair +sockopt +SOCKOPT +SOCKSv +Solaris +SONAME +Soref +SPARC +SPDX +SPNEGO +Spotify +sprintf +src +SRP +SRWLOCK +SSL +ssl +SSLeay +SSLKEYLOGFILE +sslv +SSLv +SSLVERSION +SSPI +stackoverflow +STARTTLS +STARTTRANSFER +stateful +statvfs +stderr +stdin +stdout +Steinar +Stenberg +STOR +strcat +strcpy +strdup +strerror +strlen +strncat +struct +structs +Structs +stunnel +subdirectories +subdirectory +submitters +substring +substrings +SunOS +SunSSH +superset +svc +svcb +Svyatoslav +Swisscom +sws +Symbian +symlink +symlinks +syntaxes +Szakats +TABs +Tatsuhiro +TBD +TCP +tcpdump +Tekniska +testability +TFTP +tftp +Tizen +TLS +tlsv +TLSv +TODO +Tomtom +toolchain +toolchains +toolset +toplevel +TPF +TrackMemory +transcode +Tru +Tse +Tsujikawa +TTL +tvOS +txt +typedef +typedefed +Ubuntu +ucLinux +UDP +UI +UID +UIDL +Ultrix +Unary +unassign +UNC +uncompress +unencoded +unencrypted +unescape +Unglobbed +UNICOS +unix +UnixSockets +UnixWare +unlink +unpause +unpaused +unpauses +unpausing +unsanitized +Unshare +unsharing +untrusted +UPN +upstreaming +URI +URIs +url +URL's +urlencoded +urlget +USD +userdata +Userinfo +userinfo +USERPROFILE +UTF +UX +valgrind +Vanem +vararg +VC +vcpkg +vexxhost +Viktor +VM +VMS +VMware +vnd +VRF +VRFY +VSE +vsprintf +vt +vtls +vxWorks +wakeup +Warta +watchOS +WAV +WB +web page +WebDAV +WebOS +WebSocket +WEBSOCKET +WHATWG +whitespace +Whitespaces +winbind +WinBind +winbuild +winidn +WinIDN +WinLDAP +WinSock +winsock +WinSSL +winssl +Wireshark +wolfSSH +wolfSSL +ws +WS +WSS +www +Xbox +XDG +xdigit +Xilinx +XP +Xtensa +XYZ +Youtube +YYYY +YYYYMMDD +Zakrzewski +Zitzmann +zlib +zsh +zstd +Zuul +zuul diff --git a/deps/curl/.github/scripts/spellcheck.yaml b/deps/curl/.github/scripts/spellcheck.yaml new file mode 100644 index 0000000..4e4e13d --- /dev/null +++ b/deps/curl/.github/scripts/spellcheck.yaml @@ -0,0 +1,32 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl +# +# Docs: https://github.com/UnicornGlobal/spellcheck-github-actions +matrix: +- name: Markdown + expect_match: false + apsell: + mode: en + dictionary: + wordlists: + - wordlist.txt + output: wordlist.dic + encoding: utf-8 + pipeline: + - pyspelling.filters.markdown: + markdown_extensions: + - markdown.extensions.extra: + - pyspelling.filters.html: + comments: true + attributes: + - title + - alt + ignores: + - ':matches(code, pre)' + - 'code' + - 'pre' + - 'strong' + - 'em' + sources: + - '**/*.md|!docs/BINDINGS.md' diff --git a/deps/curl/.github/scripts/verify-examples.pl b/deps/curl/.github/scripts/verify-examples.pl new file mode 100644 index 0000000..ff27556 --- /dev/null +++ b/deps/curl/.github/scripts/verify-examples.pl @@ -0,0 +1,93 @@ +#!/usr/bin/env perl +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +my @files = @ARGV; +my $cfile = "test.c"; +my $check = "./scripts/checksrc.pl"; + +if($files[0] eq "-h") { + print "Usage: verify-synopsis [man pages]\n"; + exit; +} + +sub testcompile { + my $rc = system("gcc -c test.c -DCURL_DISABLE_TYPECHECK -DCURL_ALLOW_OLD_MULTI_SOCKET -DCURL_DISABLE_DEPRECATION -Wunused -Werror -Wno-unused-but-set-variable -I include") >> 8; + return $rc; +} + +sub checksrc { + my $rc = system("$check test.c") >> 8; + return $rc; +} + +sub extract { + my($f) = @_; + my $syn = 0; + my $l = 0; + my $iline = 0; + open(F, "<$f"); + open(O, ">$cfile"); + print O "#include \n"; + while() { + $iline++; + if(/^.SH EXAMPLE/) { + $syn = 1 + } + elsif($syn == 1) { + if(/^.nf/) { + $syn++; + print O "/* !checksrc! disable UNUSEDIGNORE all */\n"; + print O "/* !checksrc! disable COPYRIGHT all */\n"; + print O "/* !checksrc! disable FOPENMODE all */\n"; + printf O "#line %d \"$f\"\n", $iline+1; + } + } + elsif($syn == 2) { + if(/^.fi/) { + last; + } + # two backslashes become one + $_ =~ s/\\\\/\\/g; + print O $_; + $l++; + } + } + close(F); + close(O); + + return $l; +} + +my $error; +for my $m (@files) { + print "Verify $m\n"; + my $out = extract($m); + if($out) { + $error |= testcompile($m); + $error |= checksrc($m); + } +} +exit $error; + diff --git a/deps/curl/.github/scripts/verify-synopsis.pl b/deps/curl/.github/scripts/verify-synopsis.pl new file mode 100644 index 0000000..34f15a8 --- /dev/null +++ b/deps/curl/.github/scripts/verify-synopsis.pl @@ -0,0 +1,81 @@ +#!/usr/bin/env perl +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +my @files = @ARGV; +my $cfile = "test.c"; + +if($files[0] eq "-h") { + print "Usage: verify-synopsis [man pages]\n"; + exit; +} + +sub testcompile { + my $rc = system("gcc -c test.c -DCURL_DISABLE_TYPECHECK -DCURL_ALLOW_OLD_MULTI_SOCKET -I include") >> 8; + return $rc; +} + + +sub extract { + my($f) = @_; + my $syn = 0; + my $l = 0; + my $iline = 0; + open(F, "<$f"); + open(O, ">$cfile"); + while() { + $iline++; + if(/^.SH SYNOPSIS/) { + $syn = 1 + } + elsif($syn == 1) { + if(/^.nf/) { + $syn++; + print O "#line $iline \"$f\"\n"; + } + } + elsif($syn == 2) { + if(/^.fi/) { + last; + } + # turn the vararg argument into vararg + $_ =~ s/, parameter\)\;/, ...);/; + print O $_; + $l++; + } + } + close(F); + close(O); + + return 0; +} + +my $error; +for my $m (@files) { + print "Verify $m\n"; + extract($m); + $error |= testcompile($m); +} +exit $error; + diff --git a/deps/curl/.github/stale.yml b/deps/curl/.github/stale.yml new file mode 100644 index 0000000..dc239b5 --- /dev/null +++ b/deps/curl/.github/stale.yml @@ -0,0 +1,21 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 180 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 14 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security +# Label to use when marking an issue as stale +staleLabel: stale +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/deps/curl/.github/workflows/appveyor-status.yml b/deps/curl/.github/workflows/appveyor-status.yml new file mode 100644 index 0000000..df54422 --- /dev/null +++ b/deps/curl/.github/workflows/appveyor-status.yml @@ -0,0 +1,41 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: AppVeyor Status Report + +on: + status + +concurrency: + group: ${{ github.workflow }}-${{ github.event.sha }}-${{ github.event.target_url }} + cancel-in-progress: true + +permissions: {} + +jobs: + split: + runs-on: ubuntu-latest + if: ${{ github.event.sender.login == 'appveyor[bot]' }} + permissions: + statuses: write + steps: + - name: Create individual AppVeyor build statuses + if: ${{ github.event.sha && github.event.target_url }} + env: + APPVEYOR_COMMIT_SHA: ${{ github.event.sha }} + APPVEYOR_TARGET_URL: ${{ github.event.target_url }} + APPVEYOR_REPOSITORY: ${{ github.event.repository.full_name }} + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + echo ${APPVEYOR_TARGET_URL} | sed 's/\/project\//\/api\/projects\//' | xargs -t -n1 curl -s | \ + jq -c '.build.jobs[] | {target_url: ($target_url + "/job/" + .jobId), + context: (.name | sub("^(Environment: )?"; "AppVeyor / ")), + state: (.status | sub("queued"; "pending") + | sub("starting"; "pending") + | sub("running"; "pending") + | sub("failed"; "failure") + | sub("cancelled"; "error")), + description: .status}' \ + --arg target_url ${APPVEYOR_TARGET_URL} | tee /dev/stderr | parallel --pipe -j 1 -N 1 \ + gh api --silent --input - repos/${APPVEYOR_REPOSITORY}/statuses/${APPVEYOR_COMMIT_SHA} diff --git a/deps/curl/.github/workflows/awslc.yml b/deps/curl/.github/workflows/awslc.yml new file mode 100644 index 0000000..2c38ca0 --- /dev/null +++ b/deps/curl/.github/workflows/awslc.yml @@ -0,0 +1,152 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: Linux AWS-LC + +on: + push: + branches: + - master + - '*/ci' + paths-ignore: + - '**/*.md' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + pull_request: + branches: + - master + paths-ignore: + - '**/*.md' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + +concurrency: + # Hardcoded workflow filename as workflow name above is just Linux again + group: awslc-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +env: + MAKEFLAGS: -j 3 + awslc-version: 1.13.0 + +jobs: + autoconf: + name: awslc (autoconf) + runs-on: 'ubuntu-latest' + timeout-minutes: 30 + + steps: + - run: | + sudo apt-get update --yes + sudo apt-get install --yes libtool autoconf automake pkg-config stunnel4 + # ensure we don't pick up openssl in this build + sudo apt remove --yes libssl-dev + sudo python3 -m pip install impacket + name: 'install prereqs and impacket' + + - name: cache awslc + uses: actions/cache@v3 + id: cache-awslc + env: + cache-name: cache-awslc + with: + path: /home/runner/awslc + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.awslc-version }} + + - name: build awslc + if: steps.cache-awslc.outputs.cache-hit != 'true' + run: | + curl -LOsSf --retry 6 --retry-connrefused --max-time 999 \ + https://github.com/awslabs/aws-lc/archive/refs/tags/v${{ env.awslc-version }}.tar.gz + tar xzf v${{ env.awslc-version }}.tar.gz + mkdir aws-lc-${{ env.awslc-version }}-build + cd aws-lc-${{ env.awslc-version }}-build + cmake -DCMAKE_INSTALL_PREFIX=$HOME/awslc ../aws-lc-${{ env.awslc-version }} + cmake --build . --parallel + cmake --install . + + - uses: actions/checkout@v4 + + - run: autoreconf -fi + name: 'autoreconf' + + - run: | + mkdir build + cd build + ../configure --enable-warnings --enable-werror --with-openssl=$HOME/awslc + cd .. + name: 'configure out-of-tree' + + - run: make -C build V=1 + name: 'make' + + - run: make -C build V=1 examples + name: 'make examples' + + - run: make -C build V=1 -C tests + name: 'make tests' + + - run: make -C build V=1 test-ci + name: 'run tests' + + cmake: + name: awslc (cmake) + runs-on: 'ubuntu-latest' + timeout-minutes: 15 + + steps: + - run: | + sudo apt-get update + sudo apt-get install cmake stunnel4 + # ensure we don't pick up openssl in this build + sudo apt remove --yes libssl-dev + sudo python3 -m pip install impacket + name: 'install prereqs and impacket' + + - name: cache awslc + uses: actions/cache@v3 + id: cache-awslc + env: + cache-name: cache-awslc + with: + path: /home/runner/awslc + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.awslc-version }} + + - name: build awslc + if: steps.cache-awslc.outputs.cache-hit != 'true' + run: | + curl -LOsSf --retry 6 --retry-connrefused --max-time 999 \ + https://github.com/awslabs/aws-lc/archive/refs/tags/v${{ env.awslc-version }}.tar.gz + tar xzf v${{ env.awslc-version }}.tar.gz + mkdir aws-lc-${{ env.awslc-version }}-build + cd aws-lc-${{ env.awslc-version }}-build + cmake -DCMAKE_INSTALL_PREFIX=$HOME/awslc ../aws-lc-${{ env.awslc-version }} + cmake --build . --parallel + cmake --install . + + - uses: actions/checkout@v4 + + # CMAKE_COMPILE_WARNING_AS_ERROR is available in cmake 3.24 or later + - run: cmake -Bbuild -DOPENSSL_ROOT_DIR=$HOME/awslc -DBUILD_SHARED_LIBS=ON -DCMAKE_COMPILE_WARNING_AS_ERROR=ON . + name: 'cmake generate out-of-tree' + + - run: cmake --build build --parallel + name: 'cmake build' + + - run: cmake --install build --prefix $HOME/curl --strip + name: 'cmake install' diff --git a/deps/curl/.github/workflows/codeql-analysis.yml b/deps/curl/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..f5f9694 --- /dev/null +++ b/deps/curl/.github/workflows/codeql-analysis.yml @@ -0,0 +1,80 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: CodeQL + +on: + push: + branches: + - master + - '*/ci' + paths-ignore: + - '**/*.md' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'docs/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'tests/data/**' + - 'winbuild/**' + pull_request: + branches: + - master + paths-ignore: + - '**/*.md' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'docs/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'tests/data/**' + - 'winbuild/**' + schedule: + - cron: '0 0 * * 4' + +concurrency: + group: ${{ github.workflow }} + +permissions: {} + +jobs: + codeql: + runs-on: ubuntu-latest + permissions: + security-events: write + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: cpp + queries: security-extended + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # â„¹ï¸ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # âœï¸ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 diff --git a/deps/curl/.github/workflows/codespell.yml b/deps/curl/.github/workflows/codespell.yml new file mode 100644 index 0000000..405d639 --- /dev/null +++ b/deps/curl/.github/workflows/codespell.yml @@ -0,0 +1,36 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: Codespell + +on: + push: + branches: + - master + - '*/ci' + paths: + - 'lib/**' + - 'src/**' + - 'include/**' + pull_request: + branches: + - master + - 'lib/**' + - 'src/**' + - 'include/**' + +jobs: + codespell: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: install + run: | + sudo apt-get update + sudo apt-get install codespell + + - name: spellcheck + run: codespell --skip src/tool_hugehelp.c -I .github/scripts/codespell-ignore.txt include src lib diff --git a/deps/curl/.github/workflows/configure-vs-cmake.yml b/deps/curl/.github/workflows/configure-vs-cmake.yml new file mode 100644 index 0000000..3131bc1 --- /dev/null +++ b/deps/curl/.github/workflows/configure-vs-cmake.yml @@ -0,0 +1,45 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: configure-vs-cmake +on: + push: + branches: + - master + paths: + - '*.ac' + - '**/*.m4' + - '**/CMakeLists.txt' + - 'lib/curl_config.h.cmake' + - 'scripts/cmp-config.pl' + + pull_request: + branches: + - master + paths: + - '*.ac' + - '**/*.m4' + - '**/CMakeLists.txt' + - 'lib/curl_config.h.cmake' + - 'scripts/cmp-config.pl' + +permissions: {} + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: run configure --with-openssl + run: | + autoreconf -fi + ./configure --with-openssl + + - name: run cmake + run: | + mkdir build && cd build && cmake .. + + - name: compare generated curl_config.h files + run: ./scripts/cmp-config.pl lib/curl_config.h build/lib/curl_config.h diff --git a/deps/curl/.github/workflows/distcheck.yml b/deps/curl/.github/workflows/distcheck.yml new file mode 100644 index 0000000..26c4da2 --- /dev/null +++ b/deps/curl/.github/workflows/distcheck.yml @@ -0,0 +1,122 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: dist + +on: + push: + branches: + - master + - '*/ci' + pull_request: + branches: + - master + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +jobs: + maketgz-and-verify-in-tree: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v4 + + - run: sudo apt-get purge -y curl libcurl4 libcurl4-doc + name: 'remove preinstalled curl libcurl4{-doc}' + + - run: autoreconf -fi + name: 'autoreconf' + + - run: ./configure --without-ssl + name: 'configure' + + - run: make V=1 && make V=1 clean + name: 'make and clean' + + - run: ./maketgz 99.98.97 + name: 'maketgz' + + - uses: actions/upload-artifact@v3 + with: + name: 'release-tgz' + path: 'curl-99.98.97.tar.gz' + + - run: | + echo "::stop-commands::$(uuidgen)" + tar xvf curl-99.98.97.tar.gz + pushd curl-99.98.97 + ./configure --prefix=$HOME/temp --without-ssl + make + make TFLAGS=1 test + make install + popd + # basic check of the installed files + bash scripts/installcheck.sh $HOME/temp + rm -rf curl-99.98.97 + name: 'verify in-tree configure build including install' + + verify-out-of-tree-docs: + runs-on: ubuntu-latest + timeout-minutes: 30 + needs: maketgz-and-verify-in-tree + steps: + - uses: actions/download-artifact@v3 + with: + name: 'release-tgz' + + - run: | + echo "::stop-commands::$(uuidgen)" + tar xvf curl-99.98.97.tar.gz + touch curl-99.98.97/docs/{cmdline-opts,libcurl}/Makefile.inc + mkdir build + pushd build + ../curl-99.98.97/configure --without-ssl + make + make TFLAGS='-p 1 1139' test + popd + rm -rf build + rm -rf curl-99.98.97 + name: 'verify out-of-tree configure build including docs' + + verify-out-of-tree-autotools-debug: + runs-on: ubuntu-latest + timeout-minutes: 30 + needs: maketgz-and-verify-in-tree + steps: + - uses: actions/download-artifact@v3 + with: + name: 'release-tgz' + + - run: | + echo "::stop-commands::$(uuidgen)" + tar xvf curl-99.98.97.tar.gz + pushd curl-99.98.97 + mkdir build + pushd build + ../configure --without-ssl --enable-debug "--prefix=${PWD}/pkg" + make -j3 + make -j3 TFLAGS=1279 test + make -j3 install + name: 'verify out-of-tree autotools debug build' + + verify-out-of-tree-cmake: + runs-on: ubuntu-latest + timeout-minutes: 30 + needs: maketgz-and-verify-in-tree + steps: + - uses: actions/download-artifact@v3 + with: + name: 'release-tgz' + + - run: | + echo "::stop-commands::$(uuidgen)" + tar xvf curl-99.98.97.tar.gz + pushd curl-99.98.97 + mkdir build + pushd build + cmake .. + make + name: 'verify out-of-tree cmake build' diff --git a/deps/curl/.github/workflows/fuzz.yml b/deps/curl/.github/workflows/fuzz.yml new file mode 100644 index 0000000..695e0de --- /dev/null +++ b/deps/curl/.github/workflows/fuzz.yml @@ -0,0 +1,50 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: Fuzzer + +on: + push: + branches: + - master + - '*/ci' + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'tests/data/**' + - 'winbuild/**' + pull_request: + branches: + - master + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'tests/data/**' + - 'winbuild/**' + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +jobs: + Fuzzing: + uses: curl/curl-fuzzer/.github/workflows/ci.yml@master diff --git a/deps/curl/.github/workflows/hacktoberfest-accepted.yml b/deps/curl/.github/workflows/hacktoberfest-accepted.yml new file mode 100644 index 0000000..6363d1c --- /dev/null +++ b/deps/curl/.github/workflows/hacktoberfest-accepted.yml @@ -0,0 +1,67 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: Hacktoberfest + +on: + # this must not ever run on any other branch than master + push: + branches: + - master + +concurrency: + # this should not run in parallel, so just run one at a time + group: ${{ github.workflow }} + +permissions: {} + +jobs: + # add hacktoberfest-accepted label to PRs opened starting from September 30th + # till November 1st which are closed via commit reference from master branch. + merged: + runs-on: ubuntu-latest + permissions: + # requires issues AND pull-requests write permissions to edit labels on PRs! + issues: write + pull-requests: write + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 100 + + - name: Check whether repo participates in Hacktoberfest + run: | + gh config set prompt disabled && echo "label=$( + gh repo view --json repositoryTopics --jq '.repositoryTopics[].name' | grep '^hacktoberfest$')" >> $GITHUB_OUTPUT + id: check + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Search relevant commit message lines starting with Closes/Merges + run: | + git log --format=email ${{ github.event.before }}..${{ github.event.after }} | \ + grep -Ei "^Close[sd]? " | sort | uniq | tee log + if: steps.check.outputs.label == 'hacktoberfest' + + - name: Search for Number-based PR references + run: | + grep -Eo "#([0-9]+)" log | cut -d# -f2 | sort | uniq | xargs -t -n1 -I{} \ + gh pr view {} --json number,createdAt \ + --jq '{number, opened: .createdAt} | [.number, .opened] | join(":")' | tee /dev/stderr | \ + grep -Eo '^([0-9]+):[0-9]{4}-(09-30T|10-|11-01T)' | cut -d: -f1 | sort | uniq | xargs -t -n1 -I {} \ + gh pr edit {} --add-label 'hacktoberfest-accepted' + if: steps.check.outputs.label == 'hacktoberfest' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Search for URL-based PR references + run: | + grep -Eo "github.com/(.+)/(.+)/pull/([0-9]+)" log | sort | uniq | xargs -t -n1 -I{} \ + gh pr view "https://{}" --json number,createdAt \ + --jq '{number, opened: .createdAt} | [.number, .opened] | join(":")' | tee /dev/stderr | \ + grep -Eo '^([0-9]+):[0-9]{4}-(09-30T|10-|11-01T)' | cut -d: -f1 | sort | uniq | xargs -t -n1 -I {} \ + gh pr edit {} --add-label 'hacktoberfest-accepted' + if: steps.check.outputs.label == 'hacktoberfest' + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/deps/curl/.github/workflows/label.yml b/deps/curl/.github/workflows/label.yml new file mode 100644 index 0000000..df841cf --- /dev/null +++ b/deps/curl/.github/workflows/label.yml @@ -0,0 +1,26 @@ +# Copyright (C) Daniel Fandrich, , et al. +# +# SPDX-License-Identifier: curl + +# This workflow will triage pull requests and apply a label based on the +# paths that are modified in the pull request. +# +# To use this workflow, you will need to set up a .github/labeler.yml +# file with configuration. For more information, see: +# https://github.com/actions/labeler + +name: Labeler +on: [pull_request_target] + +jobs: + label: + + runs-on: ubuntu-latest + permissions: + contents: read + pull-requests: write + + steps: + - uses: actions/labeler@v5 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" diff --git a/deps/curl/.github/workflows/linkcheck.yml b/deps/curl/.github/workflows/linkcheck.yml new file mode 100644 index 0000000..2301e30 --- /dev/null +++ b/deps/curl/.github/workflows/linkcheck.yml @@ -0,0 +1,36 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: Markdown links + +on: + push: + branches: + - master + - '*/ci' + paths: + - '.github/workflows/linkcheck.yml' + - '**.md' + pull_request: + branches: + - master + paths: + - '.github/workflows/linkcheck.yml' + - '**.md' + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +jobs: + # Docs: https://github.com/marketplace/actions/markdown-link-check + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: gaurav-nelson/github-action-markdown-link-check@v1 + with: + use-quiet-mode: 'yes' diff --git a/deps/curl/.github/workflows/linux.yml b/deps/curl/.github/workflows/linux.yml new file mode 100644 index 0000000..aaa8abc --- /dev/null +++ b/deps/curl/.github/workflows/linux.yml @@ -0,0 +1,434 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: Linux + +on: + push: + branches: + - master + - '*/ci' + paths-ignore: + - '**/*.md' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + pull_request: + branches: + - master + paths-ignore: + - '**/*.md' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +env: + MAKEFLAGS: -j 3 + bearssl-version: 0.6 + libressl-version: v3.7.3 + mbedtls-version: v3.5.0 + mod_h2-version: v2.0.25 + msh3-version: v0.6.0 + openssl3-version: openssl-3.1.3 + quictls-version: 3.1.4+quic + rustls-version: v0.10.0 + +jobs: + autotools: + name: ${{ matrix.build.name }} + runs-on: 'ubuntu-latest' + container: ${{ matrix.build.container }} + timeout-minutes: 90 + strategy: + fail-fast: false + matrix: + build: + - name: bearssl + install_packages: zlib1g-dev valgrind + install_steps: bearssl pytest + configure: LDFLAGS="-Wl,-rpath,$HOME/bearssl/lib" --with-bearssl=$HOME/bearssl --enable-debug + singleuse: --unit + + - name: bearssl-clang + install_packages: zlib1g-dev clang + install_steps: bearssl + configure: CC=clang LDFLAGS="-Wl,-rpath,$HOME/bearssl/lib" --with-bearssl=$HOME/bearssl --enable-debug + singleuse: --unit + + - name: libressl + install_packages: zlib1g-dev valgrind + install_steps: libressl pytest + configure: LDFLAGS="-Wl,-rpath,$HOME/libressl/lib" --with-openssl=$HOME/libressl --enable-debug + singleuse: --unit + + - name: libressl-clang + install_packages: zlib1g-dev clang + install_steps: libressl + configure: CC=clang LDFLAGS="-Wl,-rpath,$HOME/libressl/lib" --with-openssl=$HOME/libressl --enable-debug + singleuse: --unit + + - name: mbedtls + install_packages: libnghttp2-dev valgrind + install_steps: mbedtls pytest + configure: LDFLAGS="-Wl,-rpath,$HOME/mbedtls/lib" --with-mbedtls=$HOME/mbedtls --enable-debug + singleuse: --unit + + - name: mbedtls-clang + install_packages: libnghttp2-dev clang + install_steps: mbedtls + configure: CC=clang LDFLAGS="-Wl,-rpath,$HOME/mbedtls/lib" --with-mbedtls=$HOME/mbedtls --enable-debug + singleuse: --unit + + - name: msh3 + install_packages: zlib1g-dev valgrind + install_steps: quictls msh3 + configure: LDFLAGS="-Wl,-rpath,$HOME/msh3/lib -Wl,-rpath,$HOME/quictls/lib" --with-msh3=$HOME/msh3 --with-openssl=$HOME/quictls --enable-debug + singleuse: --unit + + - name: openssl3 + install_packages: zlib1g-dev valgrind + install_steps: gcc-11 openssl3 pytest + configure: CFLAGS=-std=gnu89 LDFLAGS="-Wl,-rpath,$HOME/openssl3/lib64" --with-openssl=$HOME/openssl3 --enable-debug --enable-websockets + singleuse: --unit + + - name: openssl3-O3 + install_packages: zlib1g-dev valgrind + install_steps: gcc-11 openssl3 + configure: CFLAGS=-O3 LDFLAGS="-Wl,-rpath,$HOME/openssl3/lib64" --with-openssl=$HOME/openssl3 --enable-debug --enable-websockets + singleuse: --unit + + - name: openssl3-clang + install_packages: zlib1g-dev clang + install_steps: openssl3 + configure: CC=clang LDFLAGS="-Wl,-rpath,$HOME/openssl3/lib64" --with-openssl=$HOME/openssl3 --enable-debug --enable-websockets + singleuse: --unit + + - name: address-sanitizer + install_packages: zlib1g-dev libssh2-1-dev clang libssl-dev libubsan1 libasan8 libtsan2 + install_steps: pytest + configure: > + CC=clang + 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" + --with-openssl --enable-debug --enable-websockets + singleuse: --unit + + - name: memory-sanitizer + install_packages: clang + install_steps: + configure: > + CC=clang + CFLAGS="-fsanitize=memory -Wformat -Werror=format-security -Werror=array-bounds -g" + LDFLAGS="-fsanitize=memory" + LIBS="-ldl" + --without-ssl --without-zlib --without-brotli --without-zstd --without-libpsl --without-nghttp2 --enable-debug --enable-websocketsx + singleuse: --unit + + - name: event-based + install_packages: libssh-dev valgrind + configure: --enable-debug --disable-shared --disable-threaded-resolver --with-libssh --with-openssl + tflags: -n -e '!TLS-SRP' + singleuse: --unit + + - name: hyper + install_steps: rust hyper valgrind + configure: LDFLAGS="-Wl,-rpath,$HOME/hyper/target/debug" --with-openssl --with-hyper=$HOME/hyper --enable-debug --enable-websockets + singleuse: --unit + + - name: rustls + install_steps: rust rustls pytest valgrind + configure: --with-rustls=$HOME/rustls --enable-debug + singleuse: --unit + + - name: Intel compiler - without SSL + install_packages: zlib1g-dev valgrind + install_steps: intel + configure: CC=icc --enable-debug --without-ssl + singleuse: --unit + + - name: Intel compiler - OpenSSL + install_packages: zlib1g-dev libssl-dev valgrind + install_steps: intel + configure: CC=icc --enable-debug --with-openssl + singleuse: --unit + + - name: Slackware-openssl-with-gssapi-gcc + # These are essentially the same flags used to build the curl Slackware package + # https://ftpmirror.infania.net/slackware/slackware64-current/source/n/curl/curl.SlackBuild + configure: --with-openssl --with-libssh2 --with-gssapi --enable-ares --enable-static=no --without-ca-bundle --with-ca-path=/etc/ssl/certs + # Docker Hub image that `container-job` executes in + container: 'andy5995/slackware-build-essential:15.0' + + - name: Alpine MUSL + configure: --enable-debug --enable-websockets --with-ssl --with-libssh2 --with-libidn2 --with-gssapi --enable-ldap --with-libpsl + container: 'alpine:3.18' + singleuse: --unit + + steps: + - if: matrix.build.container == null + run: | + sudo apt-get update + sudo apt-get install libtool autoconf automake pkg-config stunnel4 libpsl-dev libbrotli-dev libzstd-dev ${{ matrix.build.install_packages }} + sudo python3 -m pip install impacket + name: 'install prereqs and impacket' + + - if: startsWith(matrix.build.container, 'alpine') + run: | + apk add --no-cache build-base autoconf automake libtool perl openssl-dev libssh2-dev zlib-dev brotli-dev zstd-dev libidn2-dev openldap-dev heimdal-dev libpsl-dev py3-impacket py3-asn1 py3-six py3-pycryptodomex perl-time-hires openssh stunnel sudo git + name: 'install dependencies' + + - uses: actions/checkout@v4 + + - if: contains(matrix.build.install_steps, 'gcc-11') + run: | + sudo add-apt-repository ppa:ubuntu-toolchain-r/ppa + sudo apt-get update + sudo apt-get install gcc-11 + sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-11 100 + sudo update-alternatives --set gcc /usr/bin/gcc-11 + gcc --version + name: 'install gcc-11' + + - name: cache bearssl + if: contains(matrix.build.install_steps, 'bearssl') + uses: actions/cache@v3 + id: cache-bearssl + env: + cache-name: cache-bearssl + with: + path: /home/runner/bearssl + key: ${{ runner.os }}-build-${{ env.cache-name }}-bearssl-${{ env.bearssl-version }} + + - name: 'build bearssl' + if: contains(matrix.build.install_steps, 'bearssl') && steps.cache-bearssl.outputs.cache-hit != 'true' + run: | + curl -LOsSf --retry 6 --retry-connrefused --max-time 999 https://bearssl.org/bearssl-${{ env.bearssl-version }}.tar.gz + tar -xzf bearssl-${{ env.bearssl-version }}.tar.gz + cd bearssl-${{ env.bearssl-version }} + make + mkdir -p $HOME/bearssl/lib $HOME/bearssl/include + cp inc/*.h $HOME/bearssl/include + cp build/libbearssl.* $HOME/bearssl/lib + + - name: cache libressl + if: contains(matrix.build.install_steps, 'libressl') + uses: actions/cache@v3 + id: cache-libressl + env: + cache-name: cache-libressl + with: + path: /home/runner/libressl + key: ${{ runner.os }}-build-${{ env.cache-name }}-libressl-${{ env.libressl-version }} + + - name: 'build libressl' + if: contains(matrix.build.install_steps, 'libressl') && steps.cache-libressl.outputs.cache-hit != 'true' + run: | + git clone --quiet --depth=1 -b ${{ env.libressl-version }} https://github.com/libressl-portable/portable.git libressl-git + cd libressl-git + ./autogen.sh + ./configure --prefix=$HOME/libressl + make install + + - name: cache mbedtls + if: contains(matrix.build.install_steps, 'mbedtls') + uses: actions/cache@v3 + id: cache-mbedtls + env: + cache-name: cache-mbedtls + with: + path: /home/runner/mbedtls + key: ${{ runner.os }}-build-${{ env.cache-name }}-mbedtls-${{ env.mbedtls-version }} + + - name: 'build mbedtls' + if: contains(matrix.build.install_steps, 'mbedtls') && steps.cache-mbedtls.outputs.cache-hit != 'true' + run: | + git clone --quiet --depth=1 -b ${{ env.mbedtls-version }} https://github.com/ARMmbed/mbedtls + cd mbedtls + make DESTDIR=$HOME/mbedtls install + + - name: cache openssl3 + if: contains(matrix.build.install_steps, 'openssl3') + uses: actions/cache@v3 + id: cache-openssl3 + env: + cache-name: cache-openssl3 + with: + path: /home/runner/openssl3 + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.openssl3-version }} + + - name: 'install openssl3' + if: contains(matrix.build.install_steps, 'openssl3') && steps.cache-openssl3.outputs.cache-hit != 'true' + run: | + git clone --quiet --depth=1 -b ${{ env.openssl3-version }} https://github.com/openssl/openssl + cd openssl + ./config enable-tls1_3 --prefix=$HOME/openssl3 + make -j1 install_sw + + - name: cache quictls + if: contains(matrix.build.install_steps, 'quictls') + uses: actions/cache@v3 + id: cache-quictls + env: + cache-name: cache-quictls + with: + path: /home/runner/quictls + key: ${{ runner.os }}-build-${{ env.cache-name }}-quictls-${{ env.quictls-version }} + + - name: 'build quictls' + if: contains(matrix.build.install_steps, 'quictls') && steps.cache-quictls.outputs.cache-hit != 'true' + run: | + git clone --quiet --depth=1 -b openssl-${{ env.quictls-version }} https://github.com/quictls/openssl + cd openssl + ./config enable-tls1_3 --prefix=$HOME/quictls --libdir=$HOME/quictls/lib + make -j1 install_sw + + - name: cache msh3 + if: contains(matrix.build.install_steps, 'msh3') + uses: actions/cache@v3 + id: cache-msh3 + env: + cache-name: cache-msh3 + with: + path: /home/runner/msh3 + key: ${{ runner.os }}-build-${{ env.cache-name }}-msh3-${{ env.msh3-version }} + + - name: 'build msh3' + if: contains(matrix.build.install_steps, 'msh3') && steps.cache-msh3.outputs.cache-hit != 'true' + run: | + git clone --quiet -b ${{ env.msh3-version }} --depth=1 --recursive https://github.com/nibanks/msh3 + cd msh3 && mkdir build && cd build + cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=RelWithDebInfo -DCMAKE_INSTALL_PREFIX=$HOME/msh3 .. + cmake --build . + cmake --install . + + - if: contains(matrix.build.install_steps, 'rust') + run: | + cd $HOME + curl -sSf --compressed https://sh.rustup.rs/ | sh -s -- -y + source $HOME/.cargo/env + rustup toolchain install nightly + name: 'install rust' + + - name: cache rustls + if: contains(matrix.build.install_steps, 'rustls') + uses: actions/cache@v3 + id: cache-rustls + env: + cache-name: cache-rustls + with: + path: /home/runner/rustls + key: ${{ runner.os }}-build-${{ env.cache-name }}-rustls-${{ env.rustls-version }} + + - name: 'build rustls' + if: contains(matrix.build.install_steps, 'rustls') && steps.cache-rustls.outputs.cache-hit != 'true' + run: | + git clone --quiet --depth=1 -b ${{ env.rustls-version }} --recursive https://github.com/rustls/rustls-ffi.git + cd rustls-ffi + make DESTDIR=$HOME/rustls install + + - if: contains(matrix.build.install_steps, 'hyper') + run: | + cd $HOME + git clone --quiet --depth=1 https://github.com/hyperium/hyper.git + cd $HOME/hyper + RUSTFLAGS="--cfg hyper_unstable_ffi" cargo +nightly rustc --features client,http1,http2,ffi -Z unstable-options --crate-type cdylib + echo "LD_LIBRARY_PATH=$HOME/hyper/target/debug:/usr/local/lib" >> $GITHUB_ENV + name: 'install hyper' + + - if: contains(matrix.build.install_steps, 'intel') + run: | + cd /tmp + curl -sSf --compressed https://apt.repos.intel.com/intel-gpg-keys/GPG-PUB-KEY-INTEL-SW-PRODUCTS.PUB | sudo apt-key add - + sudo add-apt-repository "deb https://apt.repos.intel.com/oneapi all main" + sudo apt install --no-install-recommends intel-oneapi-compiler-dpcpp-cpp-and-cpp-classic + source /opt/intel/oneapi/setvars.sh + printenv >> $GITHUB_ENV + name: 'install Intel compilers' + + - if: contains(matrix.build.install_steps, 'pytest') + run: | + sudo apt-get install apache2 apache2-dev libnghttp2-dev + sudo python3 -m pip install -r tests/http/requirements.txt + name: 'install pytest and apach2-dev' + + - name: cache mod_h2 + if: contains(matrix.build.install_steps, 'pytest') + uses: actions/cache@v3 + id: cache-mod_h2 + env: + cache-name: cache-mod_h2 + with: + path: /home/runner/mod_h2 + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.mod_h2-version }} + + - name: 'build mod_h2' + if: contains(matrix.build.install_steps, 'pytest') && steps.cache-mod_h2.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b ${{ env.mod_h2-version }} https://github.com/icing/mod_h2 + cd mod_h2 + autoreconf -fi + ./configure + make + + - name: 'install mod_h2' + if: contains(matrix.build.install_steps, 'pytest') + run: | + cd $HOME/mod_h2 + sudo make install + + - run: autoreconf -fi + name: 'autoreconf' + + - run: ./configure --enable-warnings --enable-werror ${{ matrix.build.configure }} + name: 'configure' + + - run: make V=1 + name: 'make' + + - run: | + git config --global --add safe.directory "*" + ./scripts/singleuse.pl ${{ matrix.build.singleuse }} lib/.libs/libcurl.a + name: single-use function check + + - run: ./src/curl -V + name: 'check curl -V output' + + - run: make V=1 examples + name: 'make examples' + + - run: make V=1 -C tests + name: 'make tests' + + - run: make V=1 test-ci + name: 'run tests' + env: + TFLAGS: "${{ matrix.build.tflags }}" + + - if: contains(matrix.build.install_steps, 'pytest') + # run for `tests` directory, so pytest does not pick up any other + # packages we might have built here + run: + pytest -v tests + name: 'run pytest' + env: + TFLAGS: "${{ matrix.build.tflags }}" + CURL_CI: github diff --git a/deps/curl/.github/workflows/linux32.yml b/deps/curl/.github/workflows/linux32.yml new file mode 100644 index 0000000..7c2d4cb --- /dev/null +++ b/deps/curl/.github/workflows/linux32.yml @@ -0,0 +1,93 @@ +# Copyright (C) Dan Fandrich +# +# SPDX-License-Identifier: curl + +name: Linux 32-bit + +on: + push: + branches: + - master + - '*/ci' + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + pull_request: + branches: + - master + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +env: + MAKEFLAGS: -j 3 + +jobs: + linux-i686: + name: ${{ matrix.build.name }} + runs-on: 'ubuntu-22.04' + timeout-minutes: 90 + strategy: + fail-fast: false + matrix: + build: + - name: Linux i686 + install_packages: gcc-11-i686-linux-gnu libssl-dev:i386 zlib1g-dev:i386 libpsl-dev:i386 libbrotli-dev:i386 libzstd-dev:i386 + configure: --enable-debug --enable-websockets --with-openssl --host=i686-linux-gnu CC=i686-linux-gnu-gcc-11 PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig CPPFLAGS=-I/usr/include/i386-linux-gnu LDFLAGS=-L/usr/lib/i386-linux-gnu + + steps: + - run: | + sudo dpkg --add-architecture i386 + sudo apt-get update -y + sudo apt-get install -y --no-install-suggests --no-install-recommends libtool autoconf automake pkg-config stunnel4 ${{ matrix.build.install_packages }} + sudo python3 -m pip install impacket + name: 'install prereqs' + + - uses: actions/checkout@v4 + + - run: autoreconf -fi + name: 'autoreconf' + + - run: ./configure --enable-warnings --enable-werror ${{ matrix.build.configure }} + name: 'configure' + + - run: make V=1 + name: 'make' + + - run: ./src/curl -V + name: 'check curl -V output' + + - run: make V=1 examples + name: 'make examples' + + - run: make V=1 -C tests + name: 'make tests' + + - run: make V=1 test-ci + name: 'run tests' + env: + TFLAGS: "${{ matrix.build.tflags }}" diff --git a/deps/curl/.github/workflows/macos.yml b/deps/curl/.github/workflows/macos.yml new file mode 100644 index 0000000..e565f20 --- /dev/null +++ b/deps/curl/.github/workflows/macos.yml @@ -0,0 +1,242 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: macOS + +on: + push: + branches: + - master + - '*/ci' + paths-ignore: + - '**/*.md' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + pull_request: + branches: + - master + paths-ignore: + - '**/*.md' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +env: + DEVELOPER_DIR: /Applications/Xcode_14.0.1.app/Contents/Developer + MAKEFLAGS: -j 5 + +jobs: + autotools: + name: ${{ matrix.build.name }} + runs-on: 'macos-latest' + timeout-minutes: 90 + strategy: + fail-fast: false + matrix: + build: + - name: normal + install: nghttp2 + configure: --without-ssl --enable-websockets + macosx-version-min: 10.9 + - name: debug + install: nghttp2 + configure: --enable-debug --without-ssl --enable-websockets + macosx-version-min: 10.9 + - name: libssh2 + install: nghttp2 libssh2 + configure: --enable-debug --with-libssh2 --without-ssl --enable-websockets + macosx-version-min: 10.9 + - name: libssh-c-ares + install: openssl nghttp2 libssh + configure: --enable-debug --with-libssh --with-openssl=/usr/local/opt/openssl --enable-ares --enable-websockets + macosx-version-min: 10.9 + - name: libssh + install: openssl nghttp2 libssh + configure: --enable-debug --with-libssh --with-openssl=/usr/local/opt/openssl --enable-websockets + macosx-version-min: 10.9 + - name: c-ares + install: nghttp2 + configure: --enable-debug --enable-ares --without-ssl --enable-websockets + macosx-version-min: 10.9 + - name: HTTP only + install: nghttp2 + configure: | + --enable-debug \ + --enable-maintainer-mode \ + --disable-alt-svc \ + --disable-dict \ + --disable-file \ + --disable-ftp \ + --disable-gopher \ + --disable-imap \ + --disable-ldap \ + --disable-pop3 \ + --disable-rtmp \ + --disable-rtsp \ + --disable-scp \ + --disable-sftp \ + --disable-shared \ + --disable-smb \ + --disable-smtp \ + --disable-telnet \ + --disable-tftp \ + --disable-unix-sockets \ + --without-brotli \ + --without-gssapi \ + --without-libidn2 \ + --without-libpsl \ + --without-librtmp \ + --without-libssh2 \ + --without-nghttp2 \ + --without-ntlm-auth \ + --without-ssl \ + --without-zlib \ + --without-zstd + macosx-version-min: 10.15 + - name: SecureTransport http2 + install: nghttp2 + configure: --enable-debug --with-secure-transport --enable-websockets + macosx-version-min: 10.8 + - name: gcc SecureTransport + configure: CC=gcc-12 --enable-debug --with-secure-transport --enable-websockets + macosx-version-min: 10.8 + - name: OpenSSL http2 + install: nghttp2 openssl + configure: --enable-debug --with-openssl=/usr/local/opt/openssl --enable-websockets + macosx-version-min: 10.9 + - name: LibreSSL http2 + install: nghttp2 libressl + configure: --enable-debug --with-openssl=/usr/local/opt/libressl --enable-websockets + macosx-version-min: 10.9 + - name: torture + install: nghttp2 openssl + configure: --enable-debug --disable-shared --disable-threaded-resolver --with-openssl=/usr/local/opt/openssl --enable-websockets + tflags: -n -t --shallow=25 !FTP + macosx-version-min: 10.9 + - name: torture-ftp + install: nghttp2 openssl + configure: --enable-debug --disable-shared --disable-threaded-resolver --with-openssl=/usr/local/opt/openssl --enable-websockets + tflags: -n -t --shallow=20 FTP + macosx-version-min: 10.9 + - name: macOS 10.15 + install: nghttp2 libssh2 openssl + configure: --enable-debug --disable-ldap --with-openssl=/usr/local/opt/openssl --enable-websockets + macosx-version-min: 10.15 + steps: + - run: echo libtool autoconf automake pkg-config ${{ matrix.build.install }} | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile + name: 'brew bundle' + + # Run this command with retries because of spurious failures seen + # while running the tests, for example + # https://github.com/curl/curl/runs/4095721123?check_suite_focus=true + - run: "while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done" + name: 'brew install' + + - run: | + case "${{ matrix.build.install }}" in + *openssl*) + ;; + *) + if test -d /usr/local/include/openssl; then + brew unlink openssl + fi;; + esac + name: 'brew unlink openssl' + + - run: python3 -m pip install impacket + name: 'pip3 install' + + - uses: actions/checkout@v4 + + - run: autoreconf -fi + name: 'autoreconf' + + - run: ./configure --enable-warnings --enable-werror ${{ matrix.build.configure }} + name: 'configure' + env: + CFLAGS: "-mmacosx-version-min=${{ matrix.build.macosx-version-min }}" + + - run: make V=1 + name: 'make' + + - run: make V=1 examples + name: 'make examples' + + - run: make V=1 -C tests + name: 'make tests' + + - run: make V=1 test-ci + name: 'run tests' + env: + TFLAGS: "${{ matrix.build.tflags }} ~1452" + + cmake: + name: cmake ${{ matrix.compiler.CC }} ${{ matrix.build.name }} + runs-on: 'macos-latest' + env: ${{ matrix.compiler }} + strategy: + fail-fast: false + matrix: + compiler: + - CC: clang + CXX: clang++ + CFLAGS: "-mmacosx-version-min=10.15 -Wno-deprecated-declarations" + - CC: gcc-12 + CXX: g++-12 + CFLAGS: "-mmacosx-version-min=10.15 -Wno-error=undef -Wno-error=conversion" + build: + - name: OpenSSL + install: nghttp2 openssl + generate: -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DCMAKE_OSX_DEPLOYMENT_TARGET=10.9 + - name: LibreSSL + install: nghttp2 libressl + generate: -DOPENSSL_ROOT_DIR=/usr/local/opt/libressl -DCURL_DISABLE_LDAP=ON -DCURL_DISABLE_LDAPS=ON -DCMAKE_UNITY_BUILD=ON + - name: libssh2 + install: nghttp2 openssl libssh2 + generate: -DOPENSSL_ROOT_DIR=/usr/local/opt/openssl -DCURL_USE_LIBSSH2=ON -DBUILD_SHARED_LIBS=ON -DBUILD_STATIC_LIBS=ON + - name: GnuTLS + install: gnutls + generate: -DCURL_USE_GNUTLS=ON -DCURL_USE_OPENSSL=OFF -DCURL_DISABLE_LDAP=ON -DCURL_DISABLE_LDAPS=ON -DCMAKE_SHARED_LINKER_FLAGS=-L/usr/local/lib -DCMAKE_EXE_LINKER_FLAGS=-L/usr/local/lib + steps: + - run: echo libtool autoconf automake pkg-config ${{ matrix.build.install }} | xargs -Ix -n1 echo brew '"x"' > /tmp/Brewfile + name: 'brew bundle' + + - run: "while [[ $? == 0 ]]; do for i in 1 2 3; do brew update && brew bundle install --no-lock --file /tmp/Brewfile && break 2 || { echo Error: wait to try again; sleep 10; } done; false Too many retries; done" + name: 'brew install' + + - run: | + case "${{ matrix.build.install }}" in + *openssl*) + ;; + *) + if test -d /usr/local/include/openssl; then + brew unlink openssl + fi;; + esac + name: 'brew unlink openssl' + + - uses: actions/checkout@v4 + + - run: cmake -S. -Bbuild -DCURL_WERROR=ON -DPICKY_COMPILER=ON ${{ matrix.build.generate }} + name: 'cmake generate' + + - run: cmake --build build + name: 'cmake build' diff --git a/deps/curl/.github/workflows/man-examples.yml b/deps/curl/.github/workflows/man-examples.yml new file mode 100644 index 0000000..126e989 --- /dev/null +++ b/deps/curl/.github/workflows/man-examples.yml @@ -0,0 +1,30 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: manpage examples + +on: + push: + branches: + - master + - '*/ci' + paths: + - 'docs/libcurl/curl_*.3' + - 'docs/libcurl/opts/*.3' + pull_request: + branches: + - master + paths: + - 'docs/libcurl/curl_*.3' + - 'docs/libcurl/opts/*.3' + +jobs: + verify: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: verify examples + run: ./.github/scripts/verify-examples.pl docs/libcurl/curl*.3 docs/libcurl/opts/*.3 diff --git a/deps/curl/.github/workflows/ngtcp2-linux.yml b/deps/curl/.github/workflows/ngtcp2-linux.yml new file mode 100644 index 0000000..e73eba8 --- /dev/null +++ b/deps/curl/.github/workflows/ngtcp2-linux.yml @@ -0,0 +1,270 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: ngtcp2-linux + +on: + push: + branches: + - master + - '*/ci' + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + pull_request: + branches: + - master + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + +concurrency: + # Hardcoded workflow filename as workflow name above is just Linux again + group: ngtcp2-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +env: + MAKEFLAGS: -j 3 + quictls-version: 3.1.4+quic + gnutls-version: 3.8.0 + wolfssl-version: master + nghttp3-version: v1.1.0 + ngtcp2-version: v1.1.0 + nghttp2-version: v1.58.0 + mod_h2-version: v2.0.25 + +jobs: + autotools: + name: ${{ matrix.build.name }} + runs-on: 'ubuntu-latest' + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + build: + - name: quictls + configure: >- + PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib" + --with-ngtcp2=$HOME/nghttpx --enable-warnings --enable-werror --enable-debug --disable-ntlm + --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" + --with-openssl=$HOME/nghttpx + - name: gnutls + configure: >- + PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib" + --with-ngtcp2=$HOME/nghttpx --enable-warnings --enable-werror --enable-debug + --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" + --with-gnutls=$HOME/nghttpx + - name: wolfssl + configure: >- + PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib" + --with-ngtcp2=$HOME/nghttpx --enable-warnings --enable-werror --enable-debug + --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" + --with-wolfssl=$HOME/nghttpx + + steps: + - run: | + sudo apt-get update + sudo apt-get install libtool autoconf automake pkg-config stunnel4 \ + libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev \ + nettle-dev libp11-kit-dev libtspi-dev libunistring-dev guile-2.2-dev libtasn1-bin \ + libtasn1-6-dev libidn2-0-dev gawk gperf libtss2-dev dns-root-data bison gtk-doc-tools \ + texinfo texlive texlive-extra-utils autopoint libev-dev \ + apache2 apache2-dev libnghttp2-dev + name: 'install prereqs and impacket, pytest, crypto, apache2' + + - name: cache quictls + uses: actions/cache@v3 + id: cache-quictls-no-deprecated + env: + cache-name: cache-quictls-no-deprecated + with: + path: /home/runner/quictls + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.quictls-version }} + + - if: steps.cache-quictls-no-deprecated.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b openssl-${{ env.quictls-version }} https://github.com/quictls/openssl quictls + cd quictls + ./config no-deprecated --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib + make + name: 'build quictls' + + - run: | + cd $HOME/quictls + make -j1 install_sw + name: 'install quictls' + + + - name: cache gnutls + uses: actions/cache@v3 + id: cache-gnutls + env: + cache-name: cache-gnutls + with: + path: /home/runner/gnutls + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.gnutls-version }} + + - if: steps.cache-gnutls.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b ${{ env.gnutls-version }} https://github.com/gnutls/gnutls.git + cd gnutls + ./bootstrap + ./configure --prefix=$HOME/nghttpx \ + PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" LDFLAGS="-Wl,-rpath,$HOME/nghttpx/lib -L$HOME/nghttpx/lib" \ + --with-included-libtasn1 --with-included-unistring \ + --disable-guile --disable-doc --disable-tests --disable-tools + make + name: 'build gnutls' + + - run: | + cd $HOME/gnutls + make install + name: 'install gnutls' + + + - name: cache wolfssl + uses: actions/cache@v3 + id: cache-wolfssl + env: + cache-name: cache-wolfssl + with: + path: /home/runner/wolfssl + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.wolfssl-version }} + + - if: steps.cache-wolfssl.outputs.cache-hit != 'true' || ${{ env.wolfssl-version }} == 'master' + run: | + cd $HOME + rm -rf wolfssl + git clone --quiet --depth=1 -b ${{ env.wolfssl-version }} https://github.com/wolfSSL/wolfssl.git + cd wolfssl + ./autogen.sh + ./configure --enable-all --enable-quic --prefix=$HOME/nghttpx + make + name: 'build wolfssl' + + - run: | + cd $HOME/wolfssl + make install + name: 'install wolfssl' + + + - name: cache nghttp3 + uses: actions/cache@v3 + id: cache-nghttp3 + env: + cache-name: cache-nghttp3 + with: + path: /home/runner/nghttp3 + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.nghttp3-version }} + + - if: steps.cache-nghttp3.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b ${{ env.nghttp3-version }} https://github.com/ngtcp2/nghttp3 + cd nghttp3 + autoreconf -fi + ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only + make + name: 'build nghttp3' + + - run: | + cd $HOME/nghttp3 + make install + name: 'install nghttp3' + + # depends on all other cached libs built so far + - run: | + git clone --quiet --depth=1 -b ${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2 + cd ngtcp2 + autoreconf -fi + ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl --with-gnutls --with-wolfssl + make install + name: 'install ngtcp2' + + # depends on all other cached libs built so far + - run: | + git clone --quiet --depth=1 -b ${{ env.nghttp2-version }} https://github.com/nghttp2/nghttp2 + cd nghttp2 + autoreconf -fi + ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3 + make install + name: 'install nghttp2' + + - name: cache mod_h2 + uses: actions/cache@v3 + id: cache-mod_h2 + env: + cache-name: cache-mod_h2 + with: + path: /home/runner/mod_h2 + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.mod_h2-version }} + + - if: steps.cache-mod_h2.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b ${{ env.mod_h2-version }} https://github.com/icing/mod_h2 + cd mod_h2 + autoreconf -fi + ./configure + make + name: 'build mod_h2' + + - run: | + cd $HOME/mod_h2 + sudo make install + name: 'install mod_h2' + + - uses: actions/checkout@v4 + + - run: | + sudo python3 -m pip install -r tests/requirements.txt -r tests/http/requirements.txt + name: 'install python test prereqs' + + - run: autoreconf -fi + name: 'autoreconf' + + - run: ./configure ${{ matrix.build.configure }} + name: 'configure' + + - run: make V=1 + name: 'make' + + - run: make V=1 examples + name: 'make examples' + + - run: make V=1 -C tests + name: 'make tests' + + - run: make V=1 test-ci + name: 'run tests' + env: + TFLAGS: "${{ matrix.build.tflags }}" + + - run: pytest -v tests + name: 'run pytest' + env: + TFLAGS: "${{ matrix.build.tflags }}" + CURL_CI: github diff --git a/deps/curl/.github/workflows/proselint.yml b/deps/curl/.github/workflows/proselint.yml new file mode 100644 index 0000000..b01133c --- /dev/null +++ b/deps/curl/.github/workflows/proselint.yml @@ -0,0 +1,68 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: proselint + +on: + push: + branches: + - master + - '*/ci' + paths: + - '.github/workflows/proselint.yml' + - '**.md' + pull_request: + branches: + - master + paths: + - '.github/workflows/proselint.yml' + - '**.md' + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: install prereqs + run: sudo apt-get install python3-proselint + + # config file help: https://github.com/amperser/proselint/ + - name: create proselint config + run: | + cat < $HOME/.proselintrc + { + "checks": { + "typography.diacritical_marks": false, + "typography.symbols": false, + "annotations.misc": false + } + } + JSON + + - name: check prose + run: a=`git ls-files '*.md' | grep -v docs/CHECKSRC.md` && proselint $a README + + # This is for CHECKSRC and files with aggressive exclamation mark needs + - name: create second proselint config + run: | + cat < $HOME/.proselintrc + { + "checks": { + "typography.diacritical_marks": false, + "typography.symbols": false, + "typography.exclamation": false, + "annotations.misc": false + } + } + JSON + + - name: check special prose + run: a=docs/CHECKSRC.md && proselint $a diff --git a/deps/curl/.github/workflows/quiche-linux.yml b/deps/curl/.github/workflows/quiche-linux.yml new file mode 100644 index 0000000..9d43d42 --- /dev/null +++ b/deps/curl/.github/workflows/quiche-linux.yml @@ -0,0 +1,210 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: quiche + +on: + push: + branches: + - master + - '*/ci' + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + pull_request: + branches: + - master + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + +concurrency: + # Hardcoded workflow filename as workflow name above is just Linux again + group: quiche-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +env: + MAKEFLAGS: -j 3 + openssl-version: 3.1.4+quic + nghttp3-version: v1.1.0 + ngtcp2-version: v1.1.0 + nghttp2-version: v1.58.0 + quiche-version: 0.19.0 + mod_h2-version: v2.0.25 + +jobs: + autotools: + name: ${{ matrix.build.name }} + runs-on: 'ubuntu-latest' + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + build: + - name: quiche + install: >- + libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libev-dev libc-ares-dev + install_steps: pytest + configure: >- + LDFLAGS="-Wl,-rpath,/home/runner/quiche/target/release" + --with-openssl=/home/runner/quiche/quiche/deps/boringssl/src + --enable-debug + --with-quiche=/home/runner/quiche/target/release + --with-test-nghttpx="$HOME/nghttpx/bin/nghttpx" + --with-ca-fallback + + steps: + - run: | + sudo apt-get update + sudo apt-get install libtool autoconf automake pkg-config stunnel4 ${{ matrix.build.install }} + sudo apt-get install apache2 apache2-dev libnghttp2-dev + name: 'install prereqs and impacket, pytest, crypto' + + - name: cache nghttpx + uses: actions/cache@v3 + id: cache-nghttpx + env: + cache-name: cache-nghttpx + with: + path: /home/runner/nghttpx + key: ${{ runner.os }}-build-${{ env.cache-name }}-openssl-${{ env.openssl-version }}-nghttp3-${{ env.nghttp3-version }}-ngtcp2-${{ env.ngtcp2-version }}-nghttp2-${{ env.nghttp2-version }} + + - if: steps.cache-nghttpx.outputs.cache-hit != 'true' + run: | + git clone --quiet --depth=1 -b openssl-${{ env.openssl-version }} https://github.com/quictls/openssl + cd openssl + ./config --prefix=$HOME/nghttpx --libdir=$HOME/nghttpx/lib + make -j1 install_sw + name: 'install quictls' + + - if: steps.cache-nghttpx.outputs.cache-hit != 'true' + run: | + git clone --quiet --depth=1 -b ${{ env.nghttp3-version }} https://github.com/ngtcp2/nghttp3 + cd nghttp3 + autoreconf -fi + ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only + make install + name: 'install nghttp3' + + - if: steps.cache-nghttpx.outputs.cache-hit != 'true' + run: | + git clone --quiet --depth=1 -b ${{ env.ngtcp2-version }} https://github.com/ngtcp2/ngtcp2 + cd ngtcp2 + autoreconf -fi + ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-lib-only --with-openssl + make install + name: 'install ngtcp2' + + - if: steps.cache-nghttpx.outputs.cache-hit != 'true' + run: | + git clone --quiet --depth=1 -b ${{ env.nghttp2-version }} https://github.com/nghttp2/nghttp2 + cd nghttp2 + autoreconf -fi + ./configure --prefix=$HOME/nghttpx PKG_CONFIG_PATH="$HOME/nghttpx/lib/pkgconfig" --enable-http3 + make install + name: 'install nghttp2' + + - name: cache quiche + uses: actions/cache@v3 + id: cache-quiche + env: + cache-name: cache-quiche + with: + path: /home/runner/quiche + key: ${{ runner.os }}-build-${{ env.cache-name }}-quiche-${{ env.quiche-version }} + + - if: steps.cache-quiche.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b ${{ env.quiche-version }} --recursive https://github.com/cloudflare/quiche.git + cd quiche + #### Work-around https://github.com/curl/curl/issues/7927 ####### + #### See https://github.com/alexcrichton/cmake-rs/issues/131 #### + sed -i -e 's/cmake = "0.1"/cmake = "=0.1.45"/' quiche/Cargo.toml + + cargo build -v --package quiche --release --features ffi,pkg-config-meta,qlog --verbose + mkdir -v quiche/deps/boringssl/src/lib + ln -vnf $(find target/release -name libcrypto.a -o -name libssl.a) quiche/deps/boringssl/src/lib/ + + # include dir + # /home/runner/quiche/quiche/deps/boringssl/src/include + # lib dir + # /home/runner/quiche/quiche/deps/boringssl/src/lib + name: 'build quiche and boringssl' + + - name: cache mod_h2 + uses: actions/cache@v3 + id: cache-mod_h2 + env: + cache-name: cache-mod_h2 + with: + path: /home/runner/mod_h2 + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ env.mod_h2-version }} + + - if: steps.cache-mod_h2.outputs.cache-hit != 'true' + run: | + cd $HOME + git clone --quiet --depth=1 -b ${{ env.mod_h2-version }} https://github.com/icing/mod_h2 + cd mod_h2 + autoreconf -fi + ./configure + make + name: 'build mod_h2' + + - run: | + cd $HOME/mod_h2 + sudo make install + name: 'install mod_h2' + + - uses: actions/checkout@v4 + + - run: | + sudo python3 -m pip install -r tests/requirements.txt -r tests/http/requirements.txt + name: 'install python test prereqs' + + - run: autoreconf -fi + name: 'autoreconf' + + - run: ./configure ${{ matrix.build.configure }} + name: 'configure' + + - run: make V=1 + name: 'make' + + - run: make V=1 examples + name: 'make examples' + + - run: make V=1 -C tests + name: 'make tests' + + - run: make V=1 test-ci + name: 'run tests' + env: + TFLAGS: "${{ matrix.build.tflags }}" + + - run: pytest -v tests + name: 'run pytest' + env: + TFLAGS: "${{ matrix.build.tflags }}" + CURL_CI: github diff --git a/deps/curl/.github/workflows/reuse.yml b/deps/curl/.github/workflows/reuse.yml new file mode 100644 index 0000000..0cb5295 --- /dev/null +++ b/deps/curl/.github/workflows/reuse.yml @@ -0,0 +1,29 @@ +# Copyright (C) Daniel Stenberg, , et al. +# SPDX-FileCopyrightText: 2022 Free Software Foundation Europe e.V. +# +# SPDX-License-Identifier: curl + +name: REUSE compliance + +on: + push: + branches: + - master + - '*/ci' + pull_request: + branches: + - master + +concurrency: + group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - name: REUSE Compliance Check + uses: fsfe/reuse-action@v2 diff --git a/deps/curl/.github/workflows/spellcheck.yml b/deps/curl/.github/workflows/spellcheck.yml new file mode 100644 index 0000000..4793cf1 --- /dev/null +++ b/deps/curl/.github/workflows/spellcheck.yml @@ -0,0 +1,66 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: spell +on: + push: + branches: + - master + paths: + - '**.md' + - '**.3' + - '**.1' + - '**/spellcheck.yml' + - '**/spellcheck.yaml' + - '**/wordlist.txt' + pull_request: + branches: + - master + paths: + - '**.md' + - '**.3' + - '**.1' + - '**/spellcheck.yml' + - '**/spellcheck.yaml' + - '**/wordlist.txt' + +permissions: {} + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: install pandoc + run: sudo apt-get install pandoc + + - name: build curl.1 + run: | + autoreconf -fi + ./configure --without-ssl + make -C docs + + - name: strip "uncheckable" sections from .3 pages + run: find docs -name "*.3" -size +40c | sed 's/\.3//' | xargs -t -n1 -I OO ./.github/scripts/cleanspell.pl OO.3 OO.33 + + - name: convert .3 man pages to markdown + run: find docs -name "*.33" -size +40c | sed 's/\.33//' | xargs -t -n1 -I OO pandoc -f man -t markdown OO.33 -o OO.md + + - name: convert .1 man pages to markdown + run: find docs -name "*.1" -size +40c | sed 's/\.1//' | xargs -t -n1 -I OO pandoc OO.1 -o OO.md + + - name: trim the curl.1 markdown file + run: | + perl -pi -e 's/^ .*//' docs/curl.md + perl -pi -e 's/\-\-[\a-z0-9-]*//ig' docs/curl.md + perl -pi -e 's!https://[a-z0-9%/.-]*!!ig' docs/curl.md + + - name: setup the custom wordlist + run: grep -v '^#' .github/scripts/spellcheck.words > wordlist.txt + + - name: Check Spelling + uses: rojopolis/spellcheck-github-actions@v0 + with: + config_path: .github/scripts/spellcheck.yaml diff --git a/deps/curl/.github/workflows/synopsis.yml b/deps/curl/.github/workflows/synopsis.yml new file mode 100644 index 0000000..948a83a --- /dev/null +++ b/deps/curl/.github/workflows/synopsis.yml @@ -0,0 +1,28 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: SYNOPSIS + +on: + push: + branches: + - master + - '*/ci' + paths: + - 'docs/libcurl/curl_*.3' + pull_request: + branches: + - master + paths: + - 'docs/libcurl/curl_*.3' + +jobs: + verify: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: verify-synopsis + run: ./.github/scripts/verify-synopsis.pl docs/libcurl/curl*.3 diff --git a/deps/curl/.github/workflows/torture.yml b/deps/curl/.github/workflows/torture.yml new file mode 100644 index 0000000..fa70eec --- /dev/null +++ b/deps/curl/.github/workflows/torture.yml @@ -0,0 +1,92 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: Linux torture + +on: + push: + branches: + - master + - '*/ci' + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + pull_request: + branches: + - master + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + +concurrency: + # Hardcoded workflow filename as workflow name above is just Linux again + group: torture-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +env: + MAKEFLAGS: -j 3 + +jobs: + autotools: + name: ${{ matrix.build.name }} + runs-on: 'ubuntu-latest' + timeout-minutes: 90 + strategy: + fail-fast: false + matrix: + build: + - name: torture + install: libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libnghttp2-dev libssh2-1-dev libc-ares-dev + configure: --with-openssl --enable-debug --enable-ares --enable-websockets + tflags: -n -t --shallow=25 !FTP + - name: torture-ftp + install: libpsl-dev libbrotli-dev libzstd-dev zlib1g-dev libnghttp2-dev libssh2-1-dev libc-ares-dev + configure: --with-openssl --enable-debug --enable-ares + tflags: -n -t --shallow=20 FTP + + steps: + - run: | + sudo apt-get update + sudo apt-get install libtool autoconf automake pkg-config stunnel4 ${{ matrix.build.install }} + sudo python3 -m pip install impacket + name: 'install prereqs and impacket' + + - uses: actions/checkout@v4 + + - run: autoreconf -fi + name: 'autoreconf' + + - run: ./configure --enable-warnings --enable-werror ${{ matrix.build.configure }} + name: 'configure' + + - run: make V=1 + name: 'make' + + - run: make V=1 -C tests + name: 'make tests' + + - run: make V=1 test-torture + name: 'run tests' + env: + TFLAGS: "${{ matrix.build.tflags }}" diff --git a/deps/curl/.github/workflows/wolfssl.yml b/deps/curl/.github/workflows/wolfssl.yml new file mode 100644 index 0000000..48c831d --- /dev/null +++ b/deps/curl/.github/workflows/wolfssl.yml @@ -0,0 +1,105 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +name: Linux wolfSSL + +on: + push: + branches: + - master + - '*/ci' + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + pull_request: + branches: + - master + paths-ignore: + - '**/*.md' + - '**/CMakeLists.txt' + - '.azure-pipelines.yml' + - '.circleci/**' + - '.cirrus.yml' + - 'appveyor.yml' + - 'CMake/**' + - 'packages/**' + - 'plan9/**' + - 'projects/**' + - 'winbuild/**' + +concurrency: + # Hardcoded workflow filename as workflow name above is just Linux again + group: wolfssl-${{ github.event.pull_request.number || github.sha }} + cancel-in-progress: true + +permissions: {} + +env: + MAKEFLAGS: -j 3 + +jobs: + autotools: + name: ${{ matrix.build.name }} + runs-on: 'ubuntu-latest' + timeout-minutes: 60 + strategy: + fail-fast: false + matrix: + build: + - name: wolfssl (configured with --enable-all) + install: + configure: LDFLAGS="-Wl,-rpath,$HOME/wssl/lib" --with-wolfssl=$HOME/wssl --enable-debug + wolfssl-configure: --enable-all + - name: wolfssl (configured with --enable-opensslextra) + install: + configure: LDFLAGS="-Wl,-rpath,$HOME/wssl/lib" --with-wolfssl=$HOME/wssl --enable-debug + wolfssl-configure: --enable-opensslextra + + steps: + - run: | + sudo apt-get update + sudo apt-get install libtool autoconf automake pkg-config stunnel4 ${{ matrix.build.install }} + sudo python3 -m pip install impacket + name: 'install prereqs and impacket' + + - run: | + WOLFSSL_VER=5.6.3 + curl -LOsSf --retry 6 --retry-connrefused --max-time 999 https://github.com/wolfSSL/wolfssl/archive/v$WOLFSSL_VER-stable.tar.gz + tar -xzf v$WOLFSSL_VER-stable.tar.gz + cd wolfssl-$WOLFSSL_VER-stable + ./autogen.sh + ./configure --enable-tls13 ${{ matrix.build.wolfssl-configure }} --enable-harden --prefix=$HOME/wssl + make install + name: 'install wolfssl' + + - uses: actions/checkout@v4 + + - run: autoreconf -fi + name: 'autoreconf' + + - run: ./configure --enable-warnings --enable-werror ${{ matrix.build.configure }} + name: 'configure' + + - run: make V=1 + name: 'make' + + - run: make V=1 examples + name: 'make examples' + + - run: make V=1 -C tests + name: 'make tests' + + - run: make V=1 test-ci + name: 'run tests' + env: + TFLAGS: "${{ matrix.build.tflags }}" diff --git a/deps/curl/.gitignore b/deps/curl/.gitignore new file mode 100644 index 0000000..2d5c292 --- /dev/null +++ b/deps/curl/.gitignore @@ -0,0 +1,67 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +*.asc +*.dll +*.exe +*.exp +*.la +*.lib +*.lo +*.o +*.obj +*.pdb +*.pyc +*~ +.*.sw? +.cproject +.deps +.dirstamp +.libs +.project +.settings +/.vs +/bld/ +/build/ +/builds/ +/stats/ +__pycache__ +CHANGES.dist +Debug +INSTALL +Makefile +Makefile.in +Release +TAGS +aclocal.m4 +aclocal.m4.bak +autom4te.cache +compile +config.cache +config.guess +config.log +config.status +config.sub +configure +curl-*.tar.bz2 +curl-*.tar.gz +curl-*.tar.xz +curl-*.zip +curl-config +depcomp +install-sh +libcurl.pc +libtool +ltmain.sh +missing +mkinstalldirs +tags +test-driver +scripts/_curl +scripts/curl.fish +curl_fuzzer +curl_fuzzer_seed_corpus.zip +libstandaloneengine.a +tests/string +tests/config diff --git a/deps/curl/.mailmap b/deps/curl/.mailmap new file mode 100644 index 0000000..8d2965e --- /dev/null +++ b/deps/curl/.mailmap @@ -0,0 +1,110 @@ +Guenter Knauf +Gisle Vanem +Gisle Vanem +Alessandro Ghedini +Alessandro Ghedini +Björn Stenberg +Björn Stenberg +Viktor Szakats +Viktor Szakats +Daniel Gustafsson +Daniel Gustafsson +Linus Nielsen +Yamada Yasuharu +Ulion +Tim Rühsen +Steve Holme +Claes Jakobsson +Sergei Nikulov +Patrick Monnerat +Patrick Monnerat +Patrick Monnerat +Patrick Monnerat +Nick Zitzmann +Peter Wu +David Woodhouse +Marcel Raad +Marcel Raad +Marcel Raad +Anthony Bryan +Travis Burtrum +Dmitry Kostjuchenko +Richard Alcock +Richard Alcock +Jan Ehrhardt +Florin Petriuc +Pavel Pavlov +Jason Juang +Carlo Teubner +Joel Depooter +Sebastian Mundry +Rainer Canavan +Dan Fandrich +Henrik S. Gaßmann +Jiří Malák +Nick Zitzmann +Kees Dekker +Max Savenkov +Daniel Jelinski <30433125+djelinski@users.noreply.github.com> +Amit Katyal +Giorgos Oikonomou +Evgeny Grin (Karlson2k) +Evgeny Grin (Karlson2k) +Peter Pih +Anton Malov +Marquis de Muesli +Kyohei Kadota +Lucas Pardue +Massimiliano Fantuzzi +Niall O'Reilly +Mohammad Hasbini +Andrew Ishchuk +Nicolas Guillier <59726521+nicoguillier@users.noreply.github.com> +Julian Z +Jessa Chandler +Gökhan Åžengün +Svyatoslav Mishyn +Douglas Steinwand +James Fuller +Don J Olmstead +Nicolas Sterchele +Sergey Raevskiy +SecuritySense on github +Mipsters on github +Pavel Novikov +apique13 on github +Daniel Hwang +Jon Rumsey +Tobias Nyholm +Timur Artikov +MichaÅ‚ Antoniak <47522782+MAntoniak@users.noreply.github.com> +Gleb Ivanovsky +Max Dymond +Max Dymond +Abhinav Singh +Malik Idrees Hasan Khan <77000356+MalikIdreesHasanKhan@users.noreply.github.com> +Yongkang Huang +Xiaoke Wang +Philip H <47042125+pheiduck@users.noreply.github.com> +neutric on github <5984479+neutric@users.noreply.github.com> +Jan-Piet Mens +Henrik Holst +Christian Schmitz +Max Mehl +rzrymiak on github <106121613+rzrymiak@users.noreply.github.com> +Oliver Roberts +opensignature on github +Cering on github +a1346054 on github <36859588+a1346054@users.noreply.github.com> +zhanghu on xiaomi +Philip Heiduck <47042125+pheiduck@users.noreply.github.com> +bsergean on github +Stefan Eissing +Michael Musset +Andy Alt +Thomas1664 on github <46387399+Thomas1664@users.noreply.github.com> +dengjfzh on github +Brad Harder +Derzsi Dániel +Michael Osipov <1983-01-06@gmx.net> +Michael Osipov diff --git a/deps/curl/.reuse/dep5 b/deps/curl/.reuse/dep5 new file mode 100644 index 0000000..3a7a672 --- /dev/null +++ b/deps/curl/.reuse/dep5 @@ -0,0 +1,98 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: curl +Upstream-Contact: Daniel Stenberg +Source: https://curl.se + +# Tests +Files: tests/data/test* tests/certs/* tests/stunnel.pem tests/valgrind.supp +Copyright: Daniel Stenberg, , et al. +License: curl + +# Markdown documentation in docs/ +Files: docs/*.md +Copyright: Daniel Stenberg, , et al. +License: curl + +# Docs in docs/ +Files: docs/FAQ docs/INSTALL docs/INSTALL.cmake docs/KNOWN_BUGS docs/MAIL-ETIQUETTE docs/THANKS docs/TODO docs/cmdline-opts/page-footer docs/libcurl/curl_multi_socket_all.3 docs/libcurl/curl_strnequal.3 docs/libcurl/symbols-in-versions docs/options-in-versions +Copyright: Daniel Stenberg, , et al. +License: curl + +# Windows +Files: projects/Windows/* +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: libcurl.def +Copyright: Daniel Stenberg, , et al. +License: curl + +# Single files we do not want to edit directly +Files: CHANGES +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: GIT-INFO +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: RELEASE-NOTES +Copyright: Daniel Stenberg, , et al. +License: curl + +# checksrc control files +Files: lib/.checksrc src/.checksrc docs/examples/.checksrc tests/libtest/.checksrc +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: lib/libcurl.plist.in +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: lib/libcurl.vers.in +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: packages/OS400/README.OS400 +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: packages/vms/build_vms.com +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: packages/vms/curl_release_note_start.txt +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: packages/vms/curlmsg.sdl +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: packages/vms/macro32_exactcase.patch +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: packages/vms/readme +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: plan9/README +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: projects/wolfssl_override.props +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: README +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: .github/ISSUE_TEMPLATE/bug_report.md +Copyright: Daniel Stenberg, , et al. +License: curl + +Files: .mailmap +Copyright: Daniel Stenberg, , et al. +License: curl diff --git a/deps/curl/CHANGES b/deps/curl/CHANGES new file mode 100644 index 0000000..3e2cd99 --- /dev/null +++ b/deps/curl/CHANGES @@ -0,0 +1,7 @@ +See https://curl.se/changes.html for the edited and human readable online +version of what has changed over the years in different curl releases. + +Generate a CHANGES file like the one present in every release like this: + +$ git log --pretty=fuller --no-color --date=short --decorate=full | \ + ./scripts/log2changes.pl diff --git a/deps/curl/CMake/CMakeConfigurableFile.in b/deps/curl/CMake/CMakeConfigurableFile.in new file mode 100644 index 0000000..a3d2bc4 --- /dev/null +++ b/deps/curl/CMake/CMakeConfigurableFile.in @@ -0,0 +1,24 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +@CMAKE_CONFIGURABLE_FILE_CONTENT@ diff --git a/deps/curl/CMake/CurlSymbolHiding.cmake b/deps/curl/CMake/CurlSymbolHiding.cmake new file mode 100644 index 0000000..8289b49 --- /dev/null +++ b/deps/curl/CMake/CurlSymbolHiding.cmake @@ -0,0 +1,84 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +include(CheckCSourceCompiles) + +option(CURL_HIDDEN_SYMBOLS "Set to ON to hide libcurl internal symbols (=hide all symbols that aren't officially external)." ON) +mark_as_advanced(CURL_HIDDEN_SYMBOLS) + +if(WIN32 AND ENABLE_CURLDEBUG) + # We need to export internal debug functions (e.g. curl_dbg_*), so disable + # symbol hiding for debug builds. + set(CURL_HIDDEN_SYMBOLS OFF) +endif() + +if(CURL_HIDDEN_SYMBOLS) + set(SUPPORTS_SYMBOL_HIDING FALSE) + + if(CMAKE_C_COMPILER_ID MATCHES "Clang" AND NOT MSVC) + set(SUPPORTS_SYMBOL_HIDING TRUE) + set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))") + set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden") + elseif(CMAKE_COMPILER_IS_GNUCC) + if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.4) + # note: this is considered buggy prior to 4.0 but the autotools don't care, so let's ignore that fact + set(SUPPORTS_SYMBOL_HIDING TRUE) + set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))") + set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden") + endif() + elseif(CMAKE_C_COMPILER_ID MATCHES "SunPro" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.0) + set(SUPPORTS_SYMBOL_HIDING TRUE) + set(_SYMBOL_EXTERN "__global") + set(_CFLAG_SYMBOLS_HIDE "-xldscope=hidden") + elseif(CMAKE_C_COMPILER_ID MATCHES "Intel" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 9.0) + # note: this should probably just check for version 9.1.045 but I'm not 100% sure + # so let's do it the same way autotools do. + set(SUPPORTS_SYMBOL_HIDING TRUE) + set(_SYMBOL_EXTERN "__attribute__ ((__visibility__ (\"default\")))") + set(_CFLAG_SYMBOLS_HIDE "-fvisibility=hidden") + check_c_source_compiles("#include + int main (void) { printf(\"icc fvisibility bug test\"); return 0; }" _no_bug) + if(NOT _no_bug) + set(SUPPORTS_SYMBOL_HIDING FALSE) + set(_SYMBOL_EXTERN "") + set(_CFLAG_SYMBOLS_HIDE "") + endif() + elseif(MSVC) + set(SUPPORTS_SYMBOL_HIDING TRUE) + endif() + + set(HIDES_CURL_PRIVATE_SYMBOLS ${SUPPORTS_SYMBOL_HIDING}) +elseif(MSVC) + if(NOT CMAKE_VERSION VERSION_LESS 3.7) + set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) #present since 3.4.3 but broken + set(HIDES_CURL_PRIVATE_SYMBOLS FALSE) + else() + message(WARNING "Hiding private symbols regardless CURL_HIDDEN_SYMBOLS being disabled.") + set(HIDES_CURL_PRIVATE_SYMBOLS TRUE) + endif() +else() + set(HIDES_CURL_PRIVATE_SYMBOLS FALSE) +endif() + +set(CURL_CFLAG_SYMBOLS_HIDE ${_CFLAG_SYMBOLS_HIDE}) +set(CURL_EXTERN_SYMBOL ${_SYMBOL_EXTERN}) diff --git a/deps/curl/CMake/CurlTests.c b/deps/curl/CMake/CurlTests.c new file mode 100644 index 0000000..e546286 --- /dev/null +++ b/deps/curl/CMake/CurlTests.c @@ -0,0 +1,445 @@ +/*************************************************************************** + * _ _ ____ _ + * Project ___| | | | _ \| | + * / __| | | | |_) | | + * | (__| |_| | _ <| |___ + * \___|\___/|_| \_\_____| + * + * Copyright (C) Daniel Stenberg, , et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ + +#ifdef HAVE_FCNTL_O_NONBLOCK +/* headers for FCNTL_O_NONBLOCK test */ +#include +#include +#include +/* */ +#if defined(sun) || defined(__sun__) || \ + defined(__SUNPRO_C) || defined(__SUNPRO_CC) +# if defined(__SVR4) || defined(__srv4__) +# define PLATFORM_SOLARIS +# else +# define PLATFORM_SUNOS4 +# endif +#endif +#if (defined(_AIX) || defined(__xlC__)) && !defined(_AIX41) +# define PLATFORM_AIX_V3 +#endif +/* */ +#if defined(PLATFORM_SUNOS4) || defined(PLATFORM_AIX_V3) +#error "O_NONBLOCK does not work on this platform" +#endif + +int main(void) +{ + /* O_NONBLOCK source test */ + int flags = 0; + if(0 != fcntl(0, F_SETFL, flags | O_NONBLOCK)) + return 1; + return 0; +} +#endif + +/* tests for gethostbyname_r */ +#if defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) || \ + defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \ + defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT) +# define _REENTRANT + /* no idea whether _REENTRANT is always set, just invent a new flag */ +# define TEST_GETHOSTBYFOO_REENTRANT +#endif +#if defined(HAVE_GETHOSTBYNAME_R_3) || \ + defined(HAVE_GETHOSTBYNAME_R_5) || \ + defined(HAVE_GETHOSTBYNAME_R_6) || \ + defined(TEST_GETHOSTBYFOO_REENTRANT) +#include +#include +int main(void) +{ + char *address = "example.com"; + int length = 0; + int type = 0; + struct hostent h; + int rc = 0; +#if defined(HAVE_GETHOSTBYNAME_R_3) || \ + defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) + struct hostent_data hdata; +#elif defined(HAVE_GETHOSTBYNAME_R_5) || \ + defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) || \ + defined(HAVE_GETHOSTBYNAME_R_6) || \ + defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT) + char buffer[8192]; + int h_errnop; + struct hostent *hp; +#endif + +#if defined(HAVE_GETHOSTBYNAME_R_3) || \ + defined(HAVE_GETHOSTBYNAME_R_3_REENTRANT) + rc = gethostbyname_r(address, &h, &hdata); +#elif defined(HAVE_GETHOSTBYNAME_R_5) || \ + defined(HAVE_GETHOSTBYNAME_R_5_REENTRANT) + rc = gethostbyname_r(address, &h, buffer, 8192, &h_errnop); + (void)hp; /* not used for test */ +#elif defined(HAVE_GETHOSTBYNAME_R_6) || \ + defined(HAVE_GETHOSTBYNAME_R_6_REENTRANT) + rc = gethostbyname_r(address, &h, buffer, 8192, &hp, &h_errnop); +#endif + + (void)length; + (void)type; + (void)rc; + return 0; +} +#endif + +#ifdef HAVE_IN_ADDR_T +#include +#include +#include +int main(void) +{ + if((in_addr_t *) 0) + return 0; + if(sizeof(in_addr_t)) + return 0; + ; + return 0; +} +#endif + +#ifdef HAVE_BOOL_T +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDBOOL_H +#include +#endif +int main(void) +{ + if(sizeof(bool *)) + return 0; + ; + return 0; +} +#endif + +#ifdef STDC_HEADERS +#include +#include +#include +#include +int main(void) { return 0; } +#endif + +#ifdef HAVE_FILE_OFFSET_BITS +#ifdef _FILE_OFFSET_BITS +#undef _FILE_OFFSET_BITS +#endif +#define _FILE_OFFSET_BITS 64 +#include + /* Check that off_t can represent 2**63 - 1 correctly. + We can't simply define LARGE_OFF_T to be 9223372036854775807, + since some C++ compilers masquerading as C compilers + incorrectly reject 9223372036854775807. */ +#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) + int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 + && LARGE_OFF_T % 2147483647 == 1) + ? 1 : -1]; +int main(void) { ; return 0; } +#endif + +#ifdef HAVE_IOCTLSOCKET +/* includes start */ +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# ifdef HAVE_WINSOCK2_H +# include +# endif +# include +#endif +int main(void) +{ + /* ioctlsocket source code */ + int socket; + unsigned long flags = ioctlsocket(socket, FIONBIO, &flags); + ; + return 0; +} + +#endif + +#ifdef HAVE_IOCTLSOCKET_CAMEL +/* includes start */ +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# ifdef HAVE_WINSOCK2_H +# include +# endif +# include +#endif +int main(void) +{ + /* IoctlSocket source code */ + if(0 != IoctlSocket(0, 0, 0)) + return 1; + ; + return 0; +} +#endif + +#ifdef HAVE_IOCTLSOCKET_CAMEL_FIONBIO +/* includes start */ +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# ifdef HAVE_WINSOCK2_H +# include +# endif +# include +#endif +int main(void) +{ + /* IoctlSocket source code */ + long flags = 0; + if(0 != IoctlSocket(0, FIONBIO, &flags)) + return 1; + ; + return 0; +} +#endif + +#ifdef HAVE_IOCTLSOCKET_FIONBIO +/* includes start */ +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# ifdef HAVE_WINSOCK2_H +# include +# endif +# include +#endif +int main(void) +{ + int flags = 0; + if(0 != ioctlsocket(0, FIONBIO, &flags)) + return 1; + ; + return 0; +} +#endif + +#ifdef HAVE_IOCTL_FIONBIO +/* headers for FIONBIO test */ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_SYS_IOCTL_H +# include +#endif +#ifdef HAVE_STROPTS_H +# include +#endif +int main(void) +{ + int flags = 0; + if(0 != ioctl(0, FIONBIO, &flags)) + return 1; + ; + return 0; +} +#endif + +#ifdef HAVE_IOCTL_SIOCGIFADDR +/* headers for FIONBIO test */ +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +#ifdef HAVE_SYS_IOCTL_H +# include +#endif +#ifdef HAVE_STROPTS_H +# include +#endif +#include +int main(void) +{ + struct ifreq ifr; + if(0 != ioctl(0, SIOCGIFADDR, &ifr)) + return 1; + ; + return 0; +} +#endif + +#ifdef HAVE_SETSOCKOPT_SO_NONBLOCK +/* includes start */ +#ifdef HAVE_WINDOWS_H +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# ifdef HAVE_WINSOCK2_H +# include +# endif +# include +#endif +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_SYS_SOCKET_H +# include +#endif +/* includes end */ +int main(void) +{ + if(0 != setsockopt(0, SOL_SOCKET, SO_NONBLOCK, 0, 0)) + return 1; + ; + return 0; +} +#endif + +#ifdef HAVE_GLIBC_STRERROR_R +#include +#include + +void check(char c) {} + +int main(void) +{ + char buffer[1024]; + /* This will not compile if strerror_r does not return a char* */ + check(strerror_r(EACCES, buffer, sizeof(buffer))[0]); + return 0; +} +#endif + +#ifdef HAVE_POSIX_STRERROR_R +#include +#include + +/* float, because a pointer can't be implicitly cast to float */ +void check(float f) {} + +int main(void) +{ + char buffer[1024]; + /* This will not compile if strerror_r does not return an int */ + check(strerror_r(EACCES, buffer, sizeof(buffer))); + return 0; +} +#endif + +#ifdef HAVE_FSETXATTR_6 +#include /* header from libc, not from libattr */ +int main(void) +{ + fsetxattr(0, 0, 0, 0, 0, 0); + return 0; +} +#endif + +#ifdef HAVE_FSETXATTR_5 +#include /* header from libc, not from libattr */ +int main(void) +{ + fsetxattr(0, 0, 0, 0, 0); + return 0; +} +#endif + +#ifdef HAVE_CLOCK_GETTIME_MONOTONIC +#include +int main(void) +{ + struct timespec ts = {0, 0}; + clock_gettime(CLOCK_MONOTONIC, &ts); + return 0; +} +#endif + +#ifdef HAVE_BUILTIN_AVAILABLE +int main(void) +{ + if(__builtin_available(macOS 10.12, *)) {} + return 0; +} +#endif + +#ifdef HAVE_ATOMIC +/* includes start */ +#ifdef HAVE_SYS_TYPES_H +# include +#endif +#ifdef HAVE_UNISTD_H +# include +#endif +#ifdef HAVE_STDATOMIC_H +# include +#endif +/* includes end */ + +int main(void) +{ + _Atomic int i = 1; + i = 0; /* Force an atomic-write operation. */ + return i; +} +#endif + +#ifdef HAVE_WIN32_WINNT +/* includes start */ +#ifdef _WIN32 +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# ifndef NOGDI +# define NOGDI +# endif +# include +#endif +/* includes end */ + +#define enquote(x) #x +#define expand(x) enquote(x) +#pragma message("_WIN32_WINNT=" expand(_WIN32_WINNT)) + +int main(void) +{ + return 0; +} +#endif diff --git a/deps/curl/CMake/FindBearSSL.cmake b/deps/curl/CMake/FindBearSSL.cmake new file mode 100644 index 0000000..56a064e --- /dev/null +++ b/deps/curl/CMake/FindBearSSL.cmake @@ -0,0 +1,32 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +find_path(BEARSSL_INCLUDE_DIRS bearssl.h) + +find_library(BEARSSL_LIBRARY bearssl) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(BEARSSL DEFAULT_MSG + BEARSSL_INCLUDE_DIRS BEARSSL_LIBRARY) + +mark_as_advanced(BEARSSL_INCLUDE_DIRS BEARSSL_LIBRARY) diff --git a/deps/curl/CMake/FindBrotli.cmake b/deps/curl/CMake/FindBrotli.cmake new file mode 100644 index 0000000..11ab7f8 --- /dev/null +++ b/deps/curl/CMake/FindBrotli.cmake @@ -0,0 +1,43 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +include(FindPackageHandleStandardArgs) + +find_path(BROTLI_INCLUDE_DIR "brotli/decode.h") + +find_library(BROTLICOMMON_LIBRARY NAMES brotlicommon) +find_library(BROTLIDEC_LIBRARY NAMES brotlidec) + +find_package_handle_standard_args(Brotli + FOUND_VAR + BROTLI_FOUND + REQUIRED_VARS + BROTLIDEC_LIBRARY + BROTLICOMMON_LIBRARY + BROTLI_INCLUDE_DIR + FAIL_MESSAGE + "Could NOT find Brotli" +) + +set(BROTLI_INCLUDE_DIRS ${BROTLI_INCLUDE_DIR}) +set(BROTLI_LIBRARIES ${BROTLICOMMON_LIBRARY} ${BROTLIDEC_LIBRARY}) diff --git a/deps/curl/CMake/FindCARES.cmake b/deps/curl/CMake/FindCARES.cmake new file mode 100644 index 0000000..fa75891 --- /dev/null +++ b/deps/curl/CMake/FindCARES.cmake @@ -0,0 +1,47 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# - Find c-ares +# Find the c-ares includes and library +# This module defines +# CARES_INCLUDE_DIR, where to find ares.h, etc. +# CARES_LIBRARIES, the libraries needed to use c-ares. +# CARES_FOUND, If false, do not try to use c-ares. +# also defined, but not for general use are +# CARES_LIBRARY, where to find the c-ares library. + +find_path(CARES_INCLUDE_DIR ares.h) + +set(CARES_NAMES ${CARES_NAMES} cares) +find_library(CARES_LIBRARY + NAMES ${CARES_NAMES} + ) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(CARES + REQUIRED_VARS CARES_LIBRARY CARES_INCLUDE_DIR) + +mark_as_advanced( + CARES_LIBRARY + CARES_INCLUDE_DIR + ) diff --git a/deps/curl/CMake/FindGSS.cmake b/deps/curl/CMake/FindGSS.cmake new file mode 100644 index 0000000..b244e61 --- /dev/null +++ b/deps/curl/CMake/FindGSS.cmake @@ -0,0 +1,312 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# - Try to find the GSS Kerberos library +# Once done this will define +# +# GSS_ROOT_DIR - Set this variable to the root installation of GSS +# +# Read-Only variables: +# GSS_FOUND - system has the Heimdal library +# GSS_FLAVOUR - "MIT" or "Heimdal" if anything found. +# GSS_INCLUDE_DIR - the Heimdal include directory +# GSS_LIBRARIES - The libraries needed to use GSS +# GSS_LINK_DIRECTORIES - Directories to add to linker search path +# GSS_LINKER_FLAGS - Additional linker flags +# GSS_COMPILER_FLAGS - Additional compiler flags +# GSS_VERSION - This is set to version advertised by pkg-config or read from manifest. +# In case the library is found but no version info available it'll be set to "unknown" + +set(_MIT_MODNAME mit-krb5-gssapi) +set(_HEIMDAL_MODNAME heimdal-gssapi) + +include(CheckIncludeFile) +include(CheckIncludeFiles) +include(CheckTypeSize) + +set(_GSS_ROOT_HINTS + "${GSS_ROOT_DIR}" + "$ENV{GSS_ROOT_DIR}" +) + +# try to find library using system pkg-config if user didn't specify root dir +if(NOT GSS_ROOT_DIR AND NOT "$ENV{GSS_ROOT_DIR}") + if(UNIX) + find_package(PkgConfig QUIET) + pkg_search_module(_GSS_PKG ${_MIT_MODNAME} ${_HEIMDAL_MODNAME}) + list(APPEND _GSS_ROOT_HINTS "${_GSS_PKG_PREFIX}") + elseif(WIN32) + list(APPEND _GSS_ROOT_HINTS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos;InstallDir]") + endif() +endif() + +if(NOT _GSS_FOUND) #not found by pkg-config. Let's take more traditional approach. + find_file(_GSS_CONFIGURE_SCRIPT + NAMES + "krb5-config" + HINTS + ${_GSS_ROOT_HINTS} + PATH_SUFFIXES + bin + NO_CMAKE_PATH + NO_CMAKE_ENVIRONMENT_PATH + ) + + # if not found in user-supplied directories, maybe system knows better + find_file(_GSS_CONFIGURE_SCRIPT + NAMES + "krb5-config" + PATH_SUFFIXES + bin + ) + + if(_GSS_CONFIGURE_SCRIPT) + execute_process( + COMMAND ${_GSS_CONFIGURE_SCRIPT} "--cflags" "gssapi" + OUTPUT_VARIABLE _GSS_CFLAGS + RESULT_VARIABLE _GSS_CONFIGURE_FAILED + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + message(STATUS "CFLAGS: ${_GSS_CFLAGS}") + if(NOT _GSS_CONFIGURE_FAILED) # 0 means success + # should also work in an odd case when multiple directories are given + string(STRIP "${_GSS_CFLAGS}" _GSS_CFLAGS) + string(REGEX REPLACE " +-I" ";" _GSS_CFLAGS "${_GSS_CFLAGS}") + string(REGEX REPLACE " +-([^I][^ \\t;]*)" ";-\\1" _GSS_CFLAGS "${_GSS_CFLAGS}") + + foreach(_flag ${_GSS_CFLAGS}) + if(_flag MATCHES "^-I.*") + string(REGEX REPLACE "^-I" "" _val "${_flag}") + list(APPEND _GSS_INCLUDE_DIR "${_val}") + else() + list(APPEND _GSS_COMPILER_FLAGS "${_flag}") + endif() + endforeach() + endif() + + execute_process( + COMMAND ${_GSS_CONFIGURE_SCRIPT} "--libs" "gssapi" + OUTPUT_VARIABLE _GSS_LIB_FLAGS + RESULT_VARIABLE _GSS_CONFIGURE_FAILED + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + message(STATUS "LDFLAGS: ${_GSS_LIB_FLAGS}") + + if(NOT _GSS_CONFIGURE_FAILED) # 0 means success + # this script gives us libraries and link directories. Blah. We have to deal with it. + string(STRIP "${_GSS_LIB_FLAGS}" _GSS_LIB_FLAGS) + string(REGEX REPLACE " +-(L|l)" ";-\\1" _GSS_LIB_FLAGS "${_GSS_LIB_FLAGS}") + string(REGEX REPLACE " +-([^Ll][^ \\t;]*)" ";-\\1" _GSS_LIB_FLAGS "${_GSS_LIB_FLAGS}") + + foreach(_flag ${_GSS_LIB_FLAGS}) + if(_flag MATCHES "^-l.*") + string(REGEX REPLACE "^-l" "" _val "${_flag}") + list(APPEND _GSS_LIBRARIES "${_val}") + elseif(_flag MATCHES "^-L.*") + string(REGEX REPLACE "^-L" "" _val "${_flag}") + list(APPEND _GSS_LINK_DIRECTORIES "${_val}") + else() + list(APPEND _GSS_LINKER_FLAGS "${_flag}") + endif() + endforeach() + endif() + + execute_process( + COMMAND ${_GSS_CONFIGURE_SCRIPT} "--version" + OUTPUT_VARIABLE _GSS_VERSION + RESULT_VARIABLE _GSS_CONFIGURE_FAILED + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + # older versions may not have the "--version" parameter. In this case we just don't care. + if(_GSS_CONFIGURE_FAILED) + set(_GSS_VERSION 0) + endif() + + execute_process( + COMMAND ${_GSS_CONFIGURE_SCRIPT} "--vendor" + OUTPUT_VARIABLE _GSS_VENDOR + RESULT_VARIABLE _GSS_CONFIGURE_FAILED + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + + # older versions may not have the "--vendor" parameter. In this case we just don't care. + if(_GSS_CONFIGURE_FAILED) + set(GSS_FLAVOUR "Heimdal") # most probably, shouldn't really matter + else() + if(_GSS_VENDOR MATCHES ".*H|heimdal.*") + set(GSS_FLAVOUR "Heimdal") + else() + set(GSS_FLAVOUR "MIT") + endif() + endif() + + else() # either there is no config script or we are on a platform that doesn't provide one (Windows?) + + find_path(_GSS_INCLUDE_DIR + NAMES + "gssapi/gssapi.h" + HINTS + ${_GSS_ROOT_HINTS} + PATH_SUFFIXES + include + inc + ) + + if(_GSS_INCLUDE_DIR) #jay, we've found something + set(CMAKE_REQUIRED_INCLUDES "${_GSS_INCLUDE_DIR}") + check_include_files( "gssapi/gssapi_generic.h;gssapi/gssapi_krb5.h" _GSS_HAVE_MIT_HEADERS) + + if(_GSS_HAVE_MIT_HEADERS) + set(GSS_FLAVOUR "MIT") + else() + # prevent compiling the header - just check if we can include it + list(APPEND CMAKE_REQUIRED_DEFINITIONS -D__ROKEN_H__) + check_include_file( "roken.h" _GSS_HAVE_ROKEN_H) + + check_include_file( "heimdal/roken.h" _GSS_HAVE_HEIMDAL_ROKEN_H) + if(_GSS_HAVE_ROKEN_H OR _GSS_HAVE_HEIMDAL_ROKEN_H) + set(GSS_FLAVOUR "Heimdal") + endif() + list(REMOVE_ITEM CMAKE_REQUIRED_DEFINITIONS -D__ROKEN_H__) + endif() + else() + # I'm not convinced if this is the right way but this is what autotools do at the moment + find_path(_GSS_INCLUDE_DIR + NAMES + "gssapi.h" + HINTS + ${_GSS_ROOT_HINTS} + PATH_SUFFIXES + include + inc + ) + + if(_GSS_INCLUDE_DIR) + set(GSS_FLAVOUR "Heimdal") + endif() + endif() + + # if we have headers, check if we can link libraries + if(GSS_FLAVOUR) + set(_GSS_LIBDIR_SUFFIXES "") + set(_GSS_LIBDIR_HINTS ${_GSS_ROOT_HINTS}) + get_filename_component(_GSS_CALCULATED_POTENTIAL_ROOT "${_GSS_INCLUDE_DIR}" PATH) + list(APPEND _GSS_LIBDIR_HINTS ${_GSS_CALCULATED_POTENTIAL_ROOT}) + + if(WIN32) + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + list(APPEND _GSS_LIBDIR_SUFFIXES "lib/AMD64") + if(GSS_FLAVOUR STREQUAL "MIT") + set(_GSS_LIBNAME "gssapi64") + else() + set(_GSS_LIBNAME "libgssapi") + endif() + else() + list(APPEND _GSS_LIBDIR_SUFFIXES "lib/i386") + if(GSS_FLAVOUR STREQUAL "MIT") + set(_GSS_LIBNAME "gssapi32") + else() + set(_GSS_LIBNAME "libgssapi") + endif() + endif() + else() + list(APPEND _GSS_LIBDIR_SUFFIXES "lib;lib64") # those suffixes are not checked for HINTS + if(GSS_FLAVOUR STREQUAL "MIT") + set(_GSS_LIBNAME "gssapi_krb5") + else() + set(_GSS_LIBNAME "gssapi") + endif() + endif() + + find_library(_GSS_LIBRARIES + NAMES + ${_GSS_LIBNAME} + HINTS + ${_GSS_LIBDIR_HINTS} + PATH_SUFFIXES + ${_GSS_LIBDIR_SUFFIXES} + ) + + endif() + endif() +else() + if(_GSS_PKG_${_MIT_MODNAME}_VERSION) + set(GSS_FLAVOUR "MIT") + set(_GSS_VERSION _GSS_PKG_${_MIT_MODNAME}_VERSION) + else() + set(GSS_FLAVOUR "Heimdal") + set(_GSS_VERSION _GSS_PKG_${_MIT_HEIMDAL}_VERSION) + endif() +endif() + +set(GSS_INCLUDE_DIR ${_GSS_INCLUDE_DIR}) +set(GSS_LIBRARIES ${_GSS_LIBRARIES}) +set(GSS_LINK_DIRECTORIES ${_GSS_LINK_DIRECTORIES}) +set(GSS_LINKER_FLAGS ${_GSS_LINKER_FLAGS}) +set(GSS_COMPILER_FLAGS ${_GSS_COMPILER_FLAGS}) +set(GSS_VERSION ${_GSS_VERSION}) + +if(GSS_FLAVOUR) + if(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "Heimdal") + if(CMAKE_SIZEOF_VOID_P EQUAL 8) + set(HEIMDAL_MANIFEST_FILE "Heimdal.Application.amd64.manifest") + else() + set(HEIMDAL_MANIFEST_FILE "Heimdal.Application.x86.manifest") + endif() + + if(EXISTS "${GSS_INCLUDE_DIR}/${HEIMDAL_MANIFEST_FILE}") + file(STRINGS "${GSS_INCLUDE_DIR}/${HEIMDAL_MANIFEST_FILE}" heimdal_version_str + REGEX "^.*version=\"[0-9]\\.[^\"]+\".*$") + + string(REGEX MATCH "[0-9]\\.[^\"]+" + GSS_VERSION "${heimdal_version_str}") + endif() + + if(NOT GSS_VERSION) + set(GSS_VERSION "Heimdal Unknown") + endif() + elseif(NOT GSS_VERSION AND GSS_FLAVOUR STREQUAL "MIT") + get_filename_component(_MIT_VERSION "[HKEY_LOCAL_MACHINE\\SOFTWARE\\MIT\\Kerberos\\SDK\\CurrentVersion;VersionString]" NAME CACHE) + if(WIN32 AND _MIT_VERSION) + set(GSS_VERSION "${_MIT_VERSION}") + else() + set(GSS_VERSION "MIT Unknown") + endif() + endif() +endif() + +include(FindPackageHandleStandardArgs) + +set(_GSS_REQUIRED_VARS GSS_LIBRARIES GSS_FLAVOUR) + +find_package_handle_standard_args(GSS + REQUIRED_VARS + ${_GSS_REQUIRED_VARS} + VERSION_VAR + GSS_VERSION + FAIL_MESSAGE + "Could NOT find GSS, try to set the path to GSS root folder in the system variable GSS_ROOT_DIR" +) + +mark_as_advanced(GSS_INCLUDE_DIR GSS_LIBRARIES) diff --git a/deps/curl/CMake/FindLibPSL.cmake b/deps/curl/CMake/FindLibPSL.cmake new file mode 100644 index 0000000..e3bd68d --- /dev/null +++ b/deps/curl/CMake/FindLibPSL.cmake @@ -0,0 +1,45 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# - Try to find the libpsl library +# Once done this will define +# +# LIBPSL_FOUND - system has the libpsl library +# LIBPSL_INCLUDE_DIR - the libpsl include directory +# LIBPSL_LIBRARY - the libpsl library name + +find_path(LIBPSL_INCLUDE_DIR libpsl.h) + +find_library(LIBPSL_LIBRARY NAMES psl libpsl) + +if(LIBPSL_INCLUDE_DIR) + file(STRINGS "${LIBPSL_INCLUDE_DIR}/libpsl.h" libpsl_version_str REGEX "^#define[\t ]+PSL_VERSION[\t ]+\"(.*)\"") + string(REGEX REPLACE "^.*\"([^\"]+)\"" "\\1" LIBPSL_VERSION "${libpsl_version_str}") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibPSL + REQUIRED_VARS LIBPSL_LIBRARY LIBPSL_INCLUDE_DIR + VERSION_VAR LIBPSL_VERSION) + +mark_as_advanced(LIBPSL_INCLUDE_DIR LIBPSL_LIBRARY) diff --git a/deps/curl/CMake/FindLibSSH2.cmake b/deps/curl/CMake/FindLibSSH2.cmake new file mode 100644 index 0000000..a0c251a --- /dev/null +++ b/deps/curl/CMake/FindLibSSH2.cmake @@ -0,0 +1,45 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# - Try to find the libssh2 library +# Once done this will define +# +# LIBSSH2_FOUND - system has the libssh2 library +# LIBSSH2_INCLUDE_DIR - the libssh2 include directory +# LIBSSH2_LIBRARY - the libssh2 library name + +find_path(LIBSSH2_INCLUDE_DIR libssh2.h) + +find_library(LIBSSH2_LIBRARY NAMES ssh2 libssh2) + +if(LIBSSH2_INCLUDE_DIR) + file(STRINGS "${LIBSSH2_INCLUDE_DIR}/libssh2.h" libssh2_version_str REGEX "^#define[\t ]+LIBSSH2_VERSION[\t ]+\"(.*)\"") + string(REGEX REPLACE "^.*\"([^\"]+)\"" "\\1" LIBSSH2_VERSION "${libssh2_version_str}") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(LibSSH2 + REQUIRED_VARS LIBSSH2_LIBRARY LIBSSH2_INCLUDE_DIR + VERSION_VAR LIBSSH2_VERSION) + +mark_as_advanced(LIBSSH2_INCLUDE_DIR LIBSSH2_LIBRARY) diff --git a/deps/curl/CMake/FindMSH3.cmake b/deps/curl/CMake/FindMSH3.cmake new file mode 100644 index 0000000..7d9c6b6 --- /dev/null +++ b/deps/curl/CMake/FindMSH3.cmake @@ -0,0 +1,70 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +#[=======================================================================[.rst: +FindMSH3 +---------- + +Find the msh3 library + +Result Variables +^^^^^^^^^^^^^^^^ + +``MSH3_FOUND`` + System has msh3 +``MSH3_INCLUDE_DIRS`` + The msh3 include directories. +``MSH3_LIBRARIES`` + The libraries needed to use msh3 +#]=======================================================================] +if(UNIX) + find_package(PkgConfig QUIET) + pkg_search_module(PC_MSH3 libmsh3) +endif() + +find_path(MSH3_INCLUDE_DIR msh3.h + HINTS + ${PC_MSH3_INCLUDEDIR} + ${PC_MSH3_INCLUDE_DIRS} +) + +find_library(MSH3_LIBRARY NAMES msh3 + HINTS + ${PC_MSH3_LIBDIR} + ${PC_MSH3_LIBRARY_DIRS} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(MSH3 + REQUIRED_VARS + MSH3_LIBRARY + MSH3_INCLUDE_DIR +) + +if(MSH3_FOUND) + set(MSH3_LIBRARIES ${MSH3_LIBRARY}) + set(MSH3_INCLUDE_DIRS ${MSH3_INCLUDE_DIR}) +endif() + +mark_as_advanced(MSH3_INCLUDE_DIRS MSH3_LIBRARIES) diff --git a/deps/curl/CMake/FindMbedTLS.cmake b/deps/curl/CMake/FindMbedTLS.cmake new file mode 100644 index 0000000..814bd97 --- /dev/null +++ b/deps/curl/CMake/FindMbedTLS.cmake @@ -0,0 +1,36 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +find_path(MBEDTLS_INCLUDE_DIRS mbedtls/ssl.h) + +find_library(MBEDTLS_LIBRARY mbedtls) +find_library(MBEDX509_LIBRARY mbedx509) +find_library(MBEDCRYPTO_LIBRARY mbedcrypto) + +set(MBEDTLS_LIBRARIES "${MBEDTLS_LIBRARY}" "${MBEDX509_LIBRARY}" "${MBEDCRYPTO_LIBRARY}") + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(MbedTLS DEFAULT_MSG + MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY) + +mark_as_advanced(MBEDTLS_INCLUDE_DIRS MBEDTLS_LIBRARY MBEDX509_LIBRARY MBEDCRYPTO_LIBRARY) diff --git a/deps/curl/CMake/FindNGHTTP2.cmake b/deps/curl/CMake/FindNGHTTP2.cmake new file mode 100644 index 0000000..3957646 --- /dev/null +++ b/deps/curl/CMake/FindNGHTTP2.cmake @@ -0,0 +1,41 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +include(FindPackageHandleStandardArgs) + +find_path(NGHTTP2_INCLUDE_DIR "nghttp2/nghttp2.h") + +find_library(NGHTTP2_LIBRARY NAMES nghttp2) + +find_package_handle_standard_args(NGHTTP2 + FOUND_VAR + NGHTTP2_FOUND + REQUIRED_VARS + NGHTTP2_LIBRARY + NGHTTP2_INCLUDE_DIR +) + +set(NGHTTP2_INCLUDE_DIRS ${NGHTTP2_INCLUDE_DIR}) +set(NGHTTP2_LIBRARIES ${NGHTTP2_LIBRARY}) + +mark_as_advanced(NGHTTP2_INCLUDE_DIRS NGHTTP2_LIBRARIES) diff --git a/deps/curl/CMake/FindNGHTTP3.cmake b/deps/curl/CMake/FindNGHTTP3.cmake new file mode 100644 index 0000000..9b13e6c --- /dev/null +++ b/deps/curl/CMake/FindNGHTTP3.cmake @@ -0,0 +1,78 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +#[=======================================================================[.rst: +FindNGHTTP3 +---------- + +Find the nghttp3 library + +Result Variables +^^^^^^^^^^^^^^^^ + +``NGHTTP3_FOUND`` + System has nghttp3 +``NGHTTP3_INCLUDE_DIRS`` + The nghttp3 include directories. +``NGHTTP3_LIBRARIES`` + The libraries needed to use nghttp3 +``NGHTTP3_VERSION`` + version of nghttp3. +#]=======================================================================] + +if(UNIX) + find_package(PkgConfig QUIET) + pkg_search_module(PC_NGHTTP3 libnghttp3) +endif() + +find_path(NGHTTP3_INCLUDE_DIR nghttp3/nghttp3.h + HINTS + ${PC_NGHTTP3_INCLUDEDIR} + ${PC_NGHTTP3_INCLUDE_DIRS} +) + +find_library(NGHTTP3_LIBRARY NAMES nghttp3 + HINTS + ${PC_NGHTTP3_LIBDIR} + ${PC_NGHTTP3_LIBRARY_DIRS} +) + +if(PC_NGHTTP3_VERSION) + set(NGHTTP3_VERSION ${PC_NGHTTP3_VERSION}) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(NGHTTP3 + REQUIRED_VARS + NGHTTP3_LIBRARY + NGHTTP3_INCLUDE_DIR + VERSION_VAR NGHTTP3_VERSION +) + +if(NGHTTP3_FOUND) + set(NGHTTP3_LIBRARIES ${NGHTTP3_LIBRARY}) + set(NGHTTP3_INCLUDE_DIRS ${NGHTTP3_INCLUDE_DIR}) +endif() + +mark_as_advanced(NGHTTP3_INCLUDE_DIRS NGHTTP3_LIBRARIES) diff --git a/deps/curl/CMake/FindNGTCP2.cmake b/deps/curl/CMake/FindNGTCP2.cmake new file mode 100644 index 0000000..7ea4665 --- /dev/null +++ b/deps/curl/CMake/FindNGTCP2.cmake @@ -0,0 +1,117 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +#[=======================================================================[.rst: +FindNGTCP2 +---------- + +Find the ngtcp2 library + +This module accepts optional COMPONENTS to control the crypto library (these are +mutually exclusive):: + + quictls, LibreSSL: Use libngtcp2_crypto_quictls + BoringSSL, AWS-LC: Use libngtcp2_crypto_boringssl + wolfSSL: Use libngtcp2_crypto_wolfssl + GnuTLS: Use libngtcp2_crypto_gnutls + +Result Variables +^^^^^^^^^^^^^^^^ + +``NGTCP2_FOUND`` + System has ngtcp2 +``NGTCP2_INCLUDE_DIRS`` + The ngtcp2 include directories. +``NGTCP2_LIBRARIES`` + The libraries needed to use ngtcp2 +``NGTCP2_VERSION`` + version of ngtcp2. +#]=======================================================================] + +if(UNIX) + find_package(PkgConfig QUIET) + pkg_search_module(PC_NGTCP2 libngtcp2) +endif() + +find_path(NGTCP2_INCLUDE_DIR ngtcp2/ngtcp2.h + HINTS + ${PC_NGTCP2_INCLUDEDIR} + ${PC_NGTCP2_INCLUDE_DIRS} +) + +find_library(NGTCP2_LIBRARY NAMES ngtcp2 + HINTS + ${PC_NGTCP2_LIBDIR} + ${PC_NGTCP2_LIBRARY_DIRS} +) + +if(PC_NGTCP2_VERSION) + set(NGTCP2_VERSION ${PC_NGTCP2_VERSION}) +endif() + +if(NGTCP2_FIND_COMPONENTS) + set(NGTCP2_CRYPTO_BACKEND "") + foreach(component IN LISTS NGTCP2_FIND_COMPONENTS) + if(component MATCHES "^(BoringSSL|quictls|wolfSSL|GnuTLS)") + if(NGTCP2_CRYPTO_BACKEND) + message(FATAL_ERROR "NGTCP2: Only one crypto library can be selected") + endif() + set(NGTCP2_CRYPTO_BACKEND ${component}) + endif() + endforeach() + + if(NGTCP2_CRYPTO_BACKEND) + string(TOLOWER "ngtcp2_crypto_${NGTCP2_CRYPTO_BACKEND}" _crypto_library) + if(UNIX) + pkg_search_module(PC_${_crypto_library} lib${_crypto_library}) + endif() + find_library(${_crypto_library}_LIBRARY + NAMES + ${_crypto_library} + HINTS + ${PC_${_crypto_library}_LIBDIR} + ${PC_${_crypto_library}_LIBRARY_DIRS} + ) + if(${_crypto_library}_LIBRARY) + set(NGTCP2_${NGTCP2_CRYPTO_BACKEND}_FOUND TRUE) + set(NGTCP2_CRYPTO_LIBRARY ${${_crypto_library}_LIBRARY}) + endif() + endif() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(NGTCP2 + REQUIRED_VARS + NGTCP2_LIBRARY + NGTCP2_INCLUDE_DIR + VERSION_VAR NGTCP2_VERSION + HANDLE_COMPONENTS +) + +if(NGTCP2_FOUND) + set(NGTCP2_LIBRARIES ${NGTCP2_LIBRARY} ${NGTCP2_CRYPTO_LIBRARY}) + set(NGTCP2_INCLUDE_DIRS ${NGTCP2_INCLUDE_DIR}) +endif() + +mark_as_advanced(NGTCP2_INCLUDE_DIRS NGTCP2_LIBRARIES) diff --git a/deps/curl/CMake/FindQUICHE.cmake b/deps/curl/CMake/FindQUICHE.cmake new file mode 100644 index 0000000..0488463 --- /dev/null +++ b/deps/curl/CMake/FindQUICHE.cmake @@ -0,0 +1,70 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +#[=======================================================================[.rst: +FindQUICHE +---------- + +Find the quiche library + +Result Variables +^^^^^^^^^^^^^^^^ + +``QUICHE_FOUND`` + System has quiche +``QUICHE_INCLUDE_DIRS`` + The quiche include directories. +``QUICHE_LIBRARIES`` + The libraries needed to use quiche +#]=======================================================================] +if(UNIX) + find_package(PkgConfig QUIET) + pkg_search_module(PC_QUICHE quiche) +endif() + +find_path(QUICHE_INCLUDE_DIR quiche.h + HINTS + ${PC_QUICHE_INCLUDEDIR} + ${PC_QUICHE_INCLUDE_DIRS} +) + +find_library(QUICHE_LIBRARY NAMES quiche + HINTS + ${PC_QUICHE_LIBDIR} + ${PC_QUICHE_LIBRARY_DIRS} +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(QUICHE + REQUIRED_VARS + QUICHE_LIBRARY + QUICHE_INCLUDE_DIR +) + +if(QUICHE_FOUND) + set(QUICHE_LIBRARIES ${QUICHE_LIBRARY}) + set(QUICHE_INCLUDE_DIRS ${QUICHE_INCLUDE_DIR}) +endif() + +mark_as_advanced(QUICHE_INCLUDE_DIRS QUICHE_LIBRARIES) diff --git a/deps/curl/CMake/FindWolfSSL.cmake b/deps/curl/CMake/FindWolfSSL.cmake new file mode 100644 index 0000000..d67c0eb --- /dev/null +++ b/deps/curl/CMake/FindWolfSSL.cmake @@ -0,0 +1,36 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +find_path(WolfSSL_INCLUDE_DIR NAMES wolfssl/ssl.h) +find_library(WolfSSL_LIBRARY NAMES wolfssl) +mark_as_advanced(WolfSSL_INCLUDE_DIR WolfSSL_LIBRARY) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(WolfSSL + REQUIRED_VARS WolfSSL_INCLUDE_DIR WolfSSL_LIBRARY + ) + +if(WolfSSL_FOUND) + set(WolfSSL_INCLUDE_DIRS ${WolfSSL_INCLUDE_DIR}) + set(WolfSSL_LIBRARIES ${WolfSSL_LIBRARY}) +endif() diff --git a/deps/curl/CMake/FindZstd.cmake b/deps/curl/CMake/FindZstd.cmake new file mode 100644 index 0000000..0ea9e0c --- /dev/null +++ b/deps/curl/CMake/FindZstd.cmake @@ -0,0 +1,78 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +#[=======================================================================[.rst: +FindZstd +---------- + +Find the zstd library + +Result Variables +^^^^^^^^^^^^^^^^ + +``Zstd_FOUND`` + System has zstd +``Zstd_INCLUDE_DIRS`` + The zstd include directories. +``Zstd_LIBRARIES`` + The libraries needed to use zstd +#]=======================================================================] + +if(UNIX) + find_package(PkgConfig QUIET) + pkg_search_module(PC_Zstd libzstd) +endif() + +find_path(Zstd_INCLUDE_DIR zstd.h + HINTS + ${PC_Zstd_INCLUDEDIR} + ${PC_Zstd_INCLUDE_DIRS} +) + +find_library(Zstd_LIBRARY NAMES zstd + HINTS + ${PC_Zstd_LIBDIR} + ${PC_Zstd_LIBRARY_DIRS} +) + +if(Zstd_INCLUDE_DIR) + file(READ "${Zstd_INCLUDE_DIR}/zstd.h" _zstd_header) + string(REGEX MATCH ".*define ZSTD_VERSION_MAJOR *([0-9]+).*define ZSTD_VERSION_MINOR *([0-9]+).*define ZSTD_VERSION_RELEASE *([0-9]+)" _zstd_ver "${_zstd_header}") + set(Zstd_VERSION "${CMAKE_MATCH_1}.${CMAKE_MATCH_2}.${CMAKE_MATCH_3}") +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Zstd + REQUIRED_VARS + Zstd_LIBRARY + Zstd_INCLUDE_DIR + VERSION_VAR Zstd_VERSION +) + +if(Zstd_FOUND) + set(Zstd_LIBRARIES ${Zstd_LIBRARY}) + set(Zstd_INCLUDE_DIRS ${Zstd_INCLUDE_DIR}) +endif() + +mark_as_advanced(Zstd_INCLUDE_DIRS Zstd_LIBRARIES) diff --git a/deps/curl/CMake/Macros.cmake b/deps/curl/CMake/Macros.cmake new file mode 100644 index 0000000..7ad2f5c --- /dev/null +++ b/deps/curl/CMake/Macros.cmake @@ -0,0 +1,109 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +#File defines convenience macros for available feature testing + +# Check if header file exists and add it to the list. +# This macro is intended to be called multiple times with a sequence of +# possibly dependent header files. Some headers depend on others to be +# compiled correctly. +macro(check_include_file_concat FILE VARIABLE) + check_include_files("${CURL_INCLUDES};${FILE}" ${VARIABLE}) + if(${VARIABLE}) + set(CURL_INCLUDES ${CURL_INCLUDES} ${FILE}) + set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D${VARIABLE}") + endif() +endmacro() + +# For other curl specific tests, use this macro. +macro(curl_internal_test CURL_TEST) + if(NOT DEFINED "${CURL_TEST}") + set(MACRO_CHECK_FUNCTION_DEFINITIONS + "-D${CURL_TEST} ${CURL_TEST_DEFINES} ${CMAKE_REQUIRED_FLAGS}") + if(CMAKE_REQUIRED_LIBRARIES) + set(CURL_TEST_ADD_LIBRARIES + "-DLINK_LIBRARIES:STRING=${CMAKE_REQUIRED_LIBRARIES}") + endif() + + message(STATUS "Performing Curl Test ${CURL_TEST}") + try_compile(${CURL_TEST} + ${CMAKE_BINARY_DIR} + ${CMAKE_CURRENT_SOURCE_DIR}/CMake/CurlTests.c + CMAKE_FLAGS -DCOMPILE_DEFINITIONS:STRING=${MACRO_CHECK_FUNCTION_DEFINITIONS} + "${CURL_TEST_ADD_LIBRARIES}" + OUTPUT_VARIABLE OUTPUT) + if(${CURL_TEST}) + set(${CURL_TEST} 1 CACHE INTERNAL "Curl test ${FUNCTION}") + message(STATUS "Performing Curl Test ${CURL_TEST} - Success") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeOutput.log + "Performing Curl Test ${CURL_TEST} passed with the following output:\n" + "${OUTPUT}\n") + else() + message(STATUS "Performing Curl Test ${CURL_TEST} - Failed") + set(${CURL_TEST} "" CACHE INTERNAL "Curl test ${FUNCTION}") + file(APPEND ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CMakeError.log + "Performing Curl Test ${CURL_TEST} failed with the following output:\n" + "${OUTPUT}\n") + endif() + endif() +endmacro() + +macro(curl_nroff_check) + find_program(NROFF NAMES gnroff nroff) + if(NROFF) + # Need a way to write to stdin, this will do + file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt" "test") + # Tests for a valid nroff option to generate a manpage + foreach(_MANOPT "-man" "-mandoc") + execute_process(COMMAND "${NROFF}" ${_MANOPT} + OUTPUT_VARIABLE NROFF_MANOPT_OUTPUT + INPUT_FILE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt" + ERROR_QUIET) + # Save the option if it was valid + if(NROFF_MANOPT_OUTPUT) + message("Found *nroff option: -- ${_MANOPT}") + set(NROFF_MANOPT ${_MANOPT}) + set(NROFF_USEFUL ON) + break() + endif() + endforeach() + # No need for the temporary file + file(REMOVE "${CMAKE_CURRENT_BINARY_DIR}/nroff-input.txt") + if(NOT NROFF_USEFUL) + message(WARNING "Found no *nroff option to get plaintext from man pages") + endif() + else() + message(WARNING "Found no *nroff program") + endif() +endmacro() + +macro(optional_dependency DEPENDENCY) + set(CURL_${DEPENDENCY} AUTO CACHE STRING "Build curl with ${DEPENDENCY} support (AUTO, ON or OFF)") + set_property(CACHE CURL_${DEPENDENCY} PROPERTY STRINGS AUTO ON OFF) + + if(CURL_${DEPENDENCY} STREQUAL AUTO) + find_package(${DEPENDENCY}) + elseif(CURL_${DEPENDENCY}) + find_package(${DEPENDENCY} REQUIRED) + endif() +endmacro() diff --git a/deps/curl/CMake/OtherTests.cmake b/deps/curl/CMake/OtherTests.cmake new file mode 100644 index 0000000..a613f6e --- /dev/null +++ b/deps/curl/CMake/OtherTests.cmake @@ -0,0 +1,221 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +include(CheckCSourceCompiles) +include(CheckCSourceRuns) + +# The begin of the sources (macros and includes) +set(_source_epilogue "#undef inline") + +macro(add_header_include check header) + if(${check}) + set(_source_epilogue "${_source_epilogue}\n#include <${header}>") + endif() +endmacro() + +set(signature_call_conv) +if(HAVE_WINDOWS_H) + set(_source_epilogue + "${_source_epilogue}\n#ifndef WIN32_LEAN_AND_MEAN\n#define WIN32_LEAN_AND_MEAN\n#endif") + add_header_include(HAVE_WINSOCK2_H "winsock2.h") + add_header_include(HAVE_WINDOWS_H "windows.h") + set(signature_call_conv "PASCAL") + if(WIN32) + set(CMAKE_REQUIRED_LIBRARIES "ws2_32") + endif() +else() + add_header_include(HAVE_SYS_TYPES_H "sys/types.h") + add_header_include(HAVE_SYS_SOCKET_H "sys/socket.h") +endif() + +set(CMAKE_TRY_COMPILE_TARGET_TYPE STATIC_LIBRARY) + +check_c_source_compiles("${_source_epilogue} + int main(void) { + int flag = MSG_NOSIGNAL; + (void)flag; + return 0; + }" HAVE_MSG_NOSIGNAL) + +if(NOT HAVE_WINDOWS_H) + add_header_include(HAVE_SYS_TIME_H "sys/time.h") +endif() +check_c_source_compiles("${_source_epilogue} +#include +int main(void) { + struct timeval ts; + ts.tv_sec = 0; + ts.tv_usec = 0; + (void)ts; + return 0; +}" HAVE_STRUCT_TIMEVAL) + +if(HAVE_WINDOWS_H) + set(CMAKE_EXTRA_INCLUDE_FILES "winsock2.h") +else() + set(CMAKE_EXTRA_INCLUDE_FILES) + if(HAVE_SYS_SOCKET_H) + set(CMAKE_EXTRA_INCLUDE_FILES "sys/socket.h") + endif() +endif() + +check_type_size("struct sockaddr_storage" SIZEOF_STRUCT_SOCKADDR_STORAGE) +if(HAVE_SIZEOF_STRUCT_SOCKADDR_STORAGE) + set(HAVE_STRUCT_SOCKADDR_STORAGE 1) +endif() + +unset(CMAKE_TRY_COMPILE_TARGET_TYPE) + +if(NOT CMAKE_CROSSCOMPILING) + if(NOT ${CMAKE_SYSTEM_NAME} MATCHES "Darwin" AND NOT ${CMAKE_SYSTEM_NAME} MATCHES "iOS") + # only try this on non-apple platforms + + # if not cross-compilation... + set(CMAKE_REQUIRED_FLAGS "") + if(HAVE_SYS_POLL_H) + set(CMAKE_REQUIRED_FLAGS "-DHAVE_SYS_POLL_H") + elseif(HAVE_POLL_H) + set(CMAKE_REQUIRED_FLAGS "-DHAVE_POLL_H") + endif() + check_c_source_runs(" + #include + #include + + #ifdef HAVE_SYS_POLL_H + # include + #elif HAVE_POLL_H + # include + #endif + + int main(void) + { + if(0 != poll(0, 0, 10)) { + return 1; /* fail */ + } + else { + /* detect the 10.12 poll() breakage */ + struct timeval before, after; + int rc; + size_t us; + + gettimeofday(&before, NULL); + rc = poll(NULL, 0, 500); + gettimeofday(&after, NULL); + + us = (after.tv_sec - before.tv_sec) * 1000000 + + (after.tv_usec - before.tv_usec); + + if(us < 400000) { + return 1; + } + } + return 0; + }" HAVE_POLL_FINE) + endif() +endif() + +# Detect HAVE_GETADDRINFO_THREADSAFE + +if(WIN32) + set(HAVE_GETADDRINFO_THREADSAFE ${HAVE_GETADDRINFO}) +elseif(NOT HAVE_GETADDRINFO) + set(HAVE_GETADDRINFO_THREADSAFE FALSE) +elseif(CMAKE_SYSTEM_NAME STREQUAL "AIX" OR + CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR + CMAKE_SYSTEM_NAME STREQUAL "FreeBSD" OR + CMAKE_SYSTEM_NAME STREQUAL "HP-UX" OR + CMAKE_SYSTEM_NAME STREQUAL "MidnightBSD" OR + CMAKE_SYSTEM_NAME STREQUAL "NetBSD" OR + CMAKE_SYSTEM_NAME STREQUAL "SunOS") + set(HAVE_GETADDRINFO_THREADSAFE TRUE) +elseif(CMAKE_SYSTEM_NAME MATCHES "BSD") + set(HAVE_GETADDRINFO_THREADSAFE FALSE) +endif() + +if(NOT DEFINED HAVE_GETADDRINFO_THREADSAFE) + + set(_save_epilogue "${_source_epilogue}") + set(_source_epilogue "#undef inline") + + add_header_include(HAVE_SYS_SOCKET_H "sys/socket.h") + add_header_include(HAVE_SYS_TIME_H "sys/time.h") + add_header_include(HAVE_NETDB_H "netdb.h") + + check_c_source_compiles("${_source_epilogue} + int main(void) + { + #ifdef h_errno + return 0; + #else + force compilation error + #endif + }" HAVE_H_ERRNO) + + if(NOT HAVE_H_ERRNO) + check_c_source_compiles("${_source_epilogue} + int main(void) + { + h_errno = 2; + return h_errno != 0 ? 1 : 0; + }" HAVE_H_ERRNO_ASSIGNABLE) + + if(NOT HAVE_H_ERRNO_ASSIGNABLE) + check_c_source_compiles("${_source_epilogue} + int main(void) + { + #if defined(_POSIX_C_SOURCE) && (_POSIX_C_SOURCE >= 200809L) + return 0; + #elif defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 700) + return 0; + #else + force compilation error + #endif + }" HAVE_H_ERRNO_SBS_ISSUE_7) + endif() + endif() + + if(HAVE_H_ERRNO OR HAVE_H_ERRNO_ASSIGNABLE OR HAVE_H_ERRNO_SBS_ISSUE_7) + set(HAVE_GETADDRINFO_THREADSAFE TRUE) + endif() + + set(_source_epilogue "${_save_epilogue}") +endif() + +if(NOT WIN32 AND NOT DEFINED HAVE_CLOCK_GETTIME_MONOTONIC_RAW) + set(_save_epilogue "${_source_epilogue}") + set(_source_epilogue "#undef inline") + + add_header_include(HAVE_SYS_TYPES_H "sys/types.h") + add_header_include(HAVE_SYS_TIME_H "sys/time.h") + + check_c_source_compiles("${_source_epilogue} + #include + int main(void) + { + struct timespec ts; + (void)clock_gettime(CLOCK_MONOTONIC_RAW, &ts); + return 0; + }" HAVE_CLOCK_GETTIME_MONOTONIC_RAW) + + set(_source_epilogue "${_save_epilogue}") +endif() diff --git a/deps/curl/CMake/PickyWarnings.cmake b/deps/curl/CMake/PickyWarnings.cmake new file mode 100644 index 0000000..5a0d156 --- /dev/null +++ b/deps/curl/CMake/PickyWarnings.cmake @@ -0,0 +1,216 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +include(CheckCCompilerFlag) + +if(PICKY_COMPILER) + if(CMAKE_COMPILER_IS_GNUCC OR CMAKE_C_COMPILER_ID MATCHES "Clang") + + # https://clang.llvm.org/docs/DiagnosticsReference.html + # https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html + + # WPICKY_ENABLE = Options we want to enable as-is. + # WPICKY_DETECT = Options we want to test first and enable if available. + + # Prefer the -Wextra alias with clang. + if(CMAKE_C_COMPILER_ID MATCHES "Clang") + set(WPICKY_ENABLE "-Wextra") + else() + set(WPICKY_ENABLE "-W") + endif() + + list(APPEND WPICKY_ENABLE + -Wall -pedantic + ) + + # ---------------------------------- + # Add new options here, if in doubt: + # ---------------------------------- + set(WPICKY_DETECT + ) + + # Assume these options always exist with both clang and gcc. + # Require clang 3.0 / gcc 2.95 or later. + list(APPEND WPICKY_ENABLE + -Wbad-function-cast # clang 2.7 gcc 2.95 + -Wconversion # clang 2.7 gcc 2.95 + -Winline # clang 1.0 gcc 1.0 + -Wmissing-declarations # clang 1.0 gcc 2.7 + -Wmissing-prototypes # clang 1.0 gcc 1.0 + -Wnested-externs # clang 1.0 gcc 2.7 + -Wno-long-long # clang 1.0 gcc 2.95 + -Wno-multichar # clang 1.0 gcc 2.95 + -Wpointer-arith # clang 1.0 gcc 1.4 + -Wshadow # clang 1.0 gcc 2.95 + -Wsign-compare # clang 1.0 gcc 2.95 + -Wundef # clang 1.0 gcc 2.95 + -Wunused # clang 1.1 gcc 2.95 + -Wwrite-strings # clang 1.0 gcc 1.4 + ) + + # Always enable with clang, version dependent with gcc + set(WPICKY_COMMON_OLD + -Waddress # clang 2.7 gcc 4.3 + -Wattributes # clang 2.7 gcc 4.1 + -Wcast-align # clang 1.0 gcc 4.2 + -Wdeclaration-after-statement # clang 1.0 gcc 3.4 + -Wdiv-by-zero # clang 2.7 gcc 4.1 + -Wempty-body # clang 2.7 gcc 4.3 + -Wendif-labels # clang 1.0 gcc 3.3 + -Wfloat-equal # clang 1.0 gcc 2.96 (3.0) + -Wformat-security # clang 2.7 gcc 4.1 + -Wignored-qualifiers # clang 2.8 gcc 4.3 + -Wmissing-field-initializers # clang 2.7 gcc 4.1 + -Wmissing-noreturn # clang 2.7 gcc 4.1 + -Wno-format-nonliteral # clang 1.0 gcc 2.96 (3.0) + -Wno-sign-conversion # clang 2.9 gcc 4.3 + -Wno-system-headers # clang 1.0 gcc 3.0 + # -Wpadded # clang 2.9 gcc 4.1 # Not used because we cannot change public structs + -Wredundant-decls # clang 2.7 gcc 4.1 + -Wold-style-definition # clang 2.7 gcc 3.4 + -Wstrict-prototypes # clang 1.0 gcc 3.3 + # -Wswitch-enum # clang 2.7 gcc 4.1 # Not used because this basically disallows default case + -Wtype-limits # clang 2.7 gcc 4.3 + -Wunreachable-code # clang 2.7 gcc 4.1 + # -Wunused-macros # clang 2.7 gcc 4.1 # Not practical + -Wunused-parameter # clang 2.7 gcc 4.1 + -Wvla # clang 2.8 gcc 4.3 + ) + + set(WPICKY_COMMON + -Wdouble-promotion # clang 3.6 gcc 4.6 appleclang 6.3 + -Wenum-conversion # clang 3.2 gcc 10.0 appleclang 4.6 g++ 11.0 + -Wpragmas # clang 3.5 gcc 4.1 appleclang 6.0 + -Wunused-const-variable # clang 3.4 gcc 6.0 appleclang 5.1 + ) + + if(CMAKE_C_COMPILER_ID MATCHES "Clang") + list(APPEND WPICKY_ENABLE + ${WPICKY_COMMON_OLD} + -Wshift-sign-overflow # clang 2.9 + -Wshorten-64-to-32 # clang 1.0 + -Wlanguage-extension-token # clang 3.0 + ) + # Enable based on compiler version + if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.6) OR + (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.3)) + list(APPEND WPICKY_ENABLE + ${WPICKY_COMMON} + -Wunreachable-code-break # clang 3.5 appleclang 6.0 + -Wheader-guard # clang 3.4 appleclang 5.1 + -Wsometimes-uninitialized # clang 3.2 appleclang 4.6 + ) + endif() + if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 3.9) OR + (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 8.3)) + list(APPEND WPICKY_ENABLE + -Wcomma # clang 3.9 appleclang 8.3 + -Wmissing-variable-declarations # clang 3.2 appleclang 4.6 + ) + endif() + if((CMAKE_C_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0) OR + (CMAKE_C_COMPILER_ID STREQUAL "AppleClang" AND NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.3)) + list(APPEND WPICKY_ENABLE + -Wassign-enum # clang 7.0 appleclang 10.3 + -Wextra-semi-stmt # clang 7.0 appleclang 10.3 + ) + endif() + else() # gcc + list(APPEND WPICKY_DETECT + ${WPICKY_COMMON} + ) + # Enable based on compiler version + if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.3) + list(APPEND WPICKY_ENABLE + ${WPICKY_COMMON_OLD} + -Wclobbered # gcc 4.3 + -Wmissing-parameter-type # gcc 4.3 + -Wold-style-declaration # gcc 4.3 + -Wstrict-aliasing=3 # gcc 4.0 + ) + endif() + if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.5 AND MINGW) + list(APPEND WPICKY_ENABLE + -Wno-pedantic-ms-format # gcc 4.5 (mingw-only) + ) + endif() + if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 4.8) + list(APPEND WPICKY_ENABLE + -Wformat=2 # clang 3.0 gcc 4.8 (clang part-default, enabling it fully causes -Wformat-nonliteral warnings) + ) + endif() + if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 5.0) + list(APPEND WPICKY_ENABLE + -Warray-bounds=2 -ftree-vrp # clang 3.0 gcc 5.0 (clang default: -Warray-bounds) + ) + endif() + if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 6.0) + list(APPEND WPICKY_ENABLE + -Wduplicated-cond # gcc 6.0 + -Wnull-dereference # clang 3.0 gcc 6.0 (clang default) + -fdelete-null-pointer-checks + -Wshift-negative-value # clang 3.7 gcc 6.0 (clang default) + -Wshift-overflow=2 # clang 3.0 gcc 6.0 (clang default: -Wshift-overflow) + ) + endif() + if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 7.0) + list(APPEND WPICKY_ENABLE + -Walloc-zero # gcc 7.0 + -Wduplicated-branches # gcc 7.0 + -Wformat-overflow=2 # gcc 7.0 + -Wformat-truncation=2 # gcc 7.0 + -Wrestrict # gcc 7.0 + ) + endif() + if(NOT CMAKE_C_COMPILER_VERSION VERSION_LESS 10.0) + list(APPEND WPICKY_ENABLE + -Warith-conversion # gcc 10.0 + ) + endif() + endif() + + # + + unset(WPICKY) + + foreach(_CCOPT IN LISTS WPICKY_ENABLE) + set(WPICKY "${WPICKY} ${_CCOPT}") + endforeach() + + foreach(_CCOPT IN LISTS WPICKY_DETECT) + # surprisingly, CHECK_C_COMPILER_FLAG needs a new variable to store each new + # test result in. + string(MAKE_C_IDENTIFIER "OPT${_CCOPT}" _optvarname) + # GCC only warns about unknown -Wno- options if there are also other diagnostic messages, + # so test for the positive form instead + string(REPLACE "-Wno-" "-W" _CCOPT_ON "${_CCOPT}") + check_c_compiler_flag(${_CCOPT_ON} ${_optvarname}) + if(${_optvarname}) + set(WPICKY "${WPICKY} ${_CCOPT}") + endif() + endforeach() + + message(STATUS "Picky compiler options:${WPICKY}") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${WPICKY}") + endif() +endif() diff --git a/deps/curl/CMake/Platforms/WindowsCache.cmake b/deps/curl/CMake/Platforms/WindowsCache.cmake new file mode 100644 index 0000000..ec09fd4 --- /dev/null +++ b/deps/curl/CMake/Platforms/WindowsCache.cmake @@ -0,0 +1,187 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +if(NOT WIN32) + message(FATAL_ERROR "This file should be included on Windows platform only") +endif() + +set(HAVE_LOCALE_H 1) + +if(MINGW) + set(HAVE_SNPRINTF 1) + set(HAVE_UNISTD_H 1) + set(HAVE_LIBGEN_H 1) + set(HAVE_STDDEF_H 1) # detected by CMake internally in check_type_size() + set(HAVE_STDBOOL_H 1) + set(HAVE_BOOL_T "${HAVE_STDBOOL_H}") + set(HAVE_STRTOLL 1) + set(HAVE_BASENAME 1) + set(HAVE_STRCASECMP 1) + set(HAVE_FTRUNCATE 1) + set(HAVE_SYS_PARAM_H 1) + set(HAVE_SYS_TIME_H 1) + set(HAVE_GETTIMEOFDAY 1) +else() + set(HAVE_LIBGEN_H 0) + set(HAVE_STRCASECMP 0) + set(HAVE_FTRUNCATE 0) + set(HAVE_SYS_PARAM_H 0) + set(HAVE_SYS_TIME_H 0) + set(HAVE_GETTIMEOFDAY 0) + if(MSVC) + set(HAVE_UNISTD_H 0) + set(HAVE_LOCALE_H 1) + set(HAVE_STDDEF_H 1) # detected by CMake internally in check_type_size() + set(HAVE_STDATOMIC_H 0) + if(NOT MSVC_VERSION LESS 1800) + set(HAVE_STDBOOL_H 1) + set(HAVE_STRTOLL 1) + else() + set(HAVE_STDBOOL_H 0) + set(HAVE_STRTOLL 0) + endif() + set(HAVE_BOOL_T "${HAVE_STDBOOL_H}") + if(NOT MSVC_VERSION LESS 1900) + set(HAVE_SNPRINTF 1) + else() + set(HAVE_SNPRINTF 0) + endif() + set(HAVE_BASENAME 0) + set(HAVE_STRTOK_R 0) + set(HAVE_FILE_OFFSET_BITS 0) + set(HAVE_ATOMIC 0) + endif() +endif() + +# Available in Windows XP and newer +set(HAVE_GETADDRINFO 1) +set(HAVE_FREEADDRINFO 1) + +set(HAVE_FCHMOD 0) +set(HAVE_SOCKETPAIR 0) +set(HAVE_SENDMSG 0) +set(HAVE_ALARM 0) +set(HAVE_FCNTL 0) +set(HAVE_GETPPID 0) +set(HAVE_UTIMES 0) +set(HAVE_GETPWUID_R 0) +set(HAVE_STRERROR_R 0) +set(HAVE_SIGINTERRUPT 0) +set(HAVE_PIPE 0) +set(HAVE_IF_NAMETOINDEX 0) +set(HAVE_GETRLIMIT 0) +set(HAVE_SETRLIMIT 0) +set(HAVE_FSETXATTR 0) +set(HAVE_LIBSOCKET 0) +set(HAVE_SETLOCALE 1) +set(HAVE_SETMODE 1) +set(HAVE_GETPEERNAME 1) +set(HAVE_GETSOCKNAME 1) +set(HAVE_GETHOSTNAME 1) +set(HAVE_LIBZ 0) + +set(HAVE_RECV 1) +set(HAVE_SEND 1) +set(HAVE_STROPTS_H 0) +set(HAVE_SYS_XATTR_H 0) +set(HAVE_ARC4RANDOM 0) +set(HAVE_FNMATCH 0) +set(HAVE_SCHED_YIELD 0) +set(HAVE_ARPA_INET_H 0) +set(HAVE_FCNTL_H 1) +set(HAVE_IFADDRS_H 0) +set(HAVE_IO_H 1) +set(HAVE_NETDB_H 0) +set(HAVE_NETINET_IN_H 0) +set(HAVE_NETINET_TCP_H 0) +set(HAVE_NETINET_UDP_H 0) +set(HAVE_NET_IF_H 0) +set(HAVE_IOCTL_SIOCGIFADDR 0) +set(HAVE_POLL_H 0) +set(HAVE_POLL_FINE 0) +set(HAVE_PWD_H 0) +set(HAVE_STRINGS_H 0) # mingw-w64 has it (wrapper to string.h) +set(HAVE_SYS_FILIO_H 0) +set(HAVE_SYS_WAIT_H 0) +set(HAVE_SYS_IOCTL_H 0) +set(HAVE_SYS_POLL_H 0) +set(HAVE_SYS_RESOURCE_H 0) +set(HAVE_SYS_SELECT_H 0) +set(HAVE_SYS_SOCKET_H 0) +set(HAVE_SYS_SOCKIO_H 0) +set(HAVE_SYS_STAT_H 1) +set(HAVE_SYS_TYPES_H 1) +set(HAVE_SYS_UN_H 0) +set(HAVE_SYS_UTIME_H 1) +set(HAVE_TERMIOS_H 0) +set(HAVE_TERMIO_H 0) +set(HAVE_UTIME_H 0) # mingw-w64 has it (wrapper to sys/utime.h) + +set(HAVE_FSEEKO 0) +set(HAVE__FSEEKI64 1) +set(HAVE_SOCKET 1) +set(HAVE_SELECT 1) +set(HAVE_STRDUP 1) +set(HAVE_STRICMP 1) +set(HAVE_STRCMPI 1) +set(HAVE_MEMRCHR 0) +set(HAVE_CLOSESOCKET 1) +set(HAVE_SIGSETJMP 0) +set(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID 1) +set(HAVE_GETPASS_R 0) +set(HAVE_GETPWUID 0) +set(HAVE_GETEUID 0) +set(HAVE_UTIME 1) +set(HAVE_GMTIME_R 0) +set(HAVE_GETHOSTBYNAME_R 0) +set(HAVE_SIGNAL 1) +set(HAVE_SIGACTION 0) +set(HAVE_LINUX_TCP_H 0) +set(HAVE_GLIBC_STRERROR_R 0) +set(HAVE_MACH_ABSOLUTE_TIME 0) +set(HAVE_GETIFADDRS 0) +set(HAVE_FCNTL_O_NONBLOCK 0) +set(HAVE_IOCTLSOCKET 1) +set(HAVE_IOCTLSOCKET_CAMEL 0) +set(HAVE_IOCTLSOCKET_CAMEL_FIONBIO 0) +set(HAVE_IOCTLSOCKET_FIONBIO 1) +set(HAVE_IOCTL_FIONBIO 0) +set(HAVE_SETSOCKOPT_SO_NONBLOCK 0) +set(HAVE_POSIX_STRERROR_R 0) +set(HAVE_BUILTIN_AVAILABLE 0) +set(HAVE_MSG_NOSIGNAL 0) +set(HAVE_STRUCT_TIMEVAL 1) + +set(HAVE_GETHOSTBYNAME_R_3 0) +set(HAVE_GETHOSTBYNAME_R_3_REENTRANT 0) +set(HAVE_GETHOSTBYNAME_R_5 0) +set(HAVE_GETHOSTBYNAME_R_5_REENTRANT 0) +set(HAVE_GETHOSTBYNAME_R_6 0) +set(HAVE_GETHOSTBYNAME_R_6_REENTRANT 0) + +set(HAVE_O_NONBLOCK 0) +set(HAVE_IN_ADDR_T 0) +set(STDC_HEADERS 1) + +set(HAVE_SIZEOF_SUSECONDS_T 0) +set(HAVE_SIZEOF_SA_FAMILY_T 0) diff --git a/deps/curl/CMake/Utilities.cmake b/deps/curl/CMake/Utilities.cmake new file mode 100644 index 0000000..9ff38e3 --- /dev/null +++ b/deps/curl/CMake/Utilities.cmake @@ -0,0 +1,35 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# File containing various utilities + +# Returns a list of arguments that evaluate to true +function(count_true output_count_var) + set(lst_len 0) + foreach(option_var IN LISTS ARGN) + if(${option_var}) + math(EXPR lst_len "${lst_len} + 1") + endif() + endforeach() + set(${output_count_var} ${lst_len} PARENT_SCOPE) +endfunction() diff --git a/deps/curl/CMake/cmake_uninstall.cmake.in b/deps/curl/CMake/cmake_uninstall.cmake.in new file mode 100644 index 0000000..47aec8d --- /dev/null +++ b/deps/curl/CMake/cmake_uninstall.cmake.in @@ -0,0 +1,49 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +if(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") + message(FATAL_ERROR "Cannot find install manifest: @CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt") +endif() + +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "@CMAKE_INSTALL_PREFIX@") +endif() +message(${CMAKE_INSTALL_PREFIX}) + +file(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files) +string(REGEX REPLACE "\n" ";" files "${files}") +foreach(file ${files}) + message(STATUS "Uninstalling $ENV{DESTDIR}${file}") + if(IS_SYMLINK "$ENV{DESTDIR}${file}" OR EXISTS "$ENV{DESTDIR}${file}") + exec_program( + "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\"" + OUTPUT_VARIABLE rm_out + RETURN_VALUE rm_retval + ) + if(NOT "${rm_retval}" STREQUAL 0) + message(FATAL_ERROR "Problem when removing $ENV{DESTDIR}${file}") + endif() + else() + message(STATUS "File $ENV{DESTDIR}${file} does not exist.") + endif() +endforeach() diff --git a/deps/curl/CMake/curl-config.cmake.in b/deps/curl/CMake/curl-config.cmake.in new file mode 100644 index 0000000..9adb96e --- /dev/null +++ b/deps/curl/CMake/curl-config.cmake.in @@ -0,0 +1,40 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +@PACKAGE_INIT@ + +include(CMakeFindDependencyMacro) +if(@USE_OPENSSL@) + find_dependency(OpenSSL @OPENSSL_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@") + +# Alias for either shared or static library +if(NOT TARGET @PROJECT_NAME@::libcurl) + add_library(@PROJECT_NAME@::libcurl ALIAS @PROJECT_NAME@::@LIB_SELECTED@) +endif() diff --git a/deps/curl/CMakeLists.txt b/deps/curl/CMakeLists.txt new file mode 100644 index 0000000..a54c2ff --- /dev/null +++ b/deps/curl/CMakeLists.txt @@ -0,0 +1,1782 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# curl/libcurl CMake script +# by Tetetest and Sukender (Benoit Neil) + +# TODO: +# The output .so file lacks the soname number which we currently have within the lib/Makefile.am file +# Add full (4 or 5 libs) SSL support +# Add INSTALL target (EXTRA_DIST variables in Makefile.am may be moved to Makefile.inc so that CMake/CPack is aware of what's to include). +# Check on all possible platforms +# Test with as many configurations possible (With or without any option) +# Create scripts that help keeping the CMake build system up to date (to reduce maintenance). According to Tetetest: +# - lists of headers that 'configure' checks for; +# - curl-specific tests (the ones that are in m4/curl-*.m4 files); +# - (most obvious thing:) curl version numbers. +# Add documentation subproject +# +# To check: +# (From Daniel Stenberg) The cmake build selected to run gcc with -fPIC on my box while the plain configure script did not. +# (From Daniel Stenberg) The gcc command line use neither -g nor any -O options. As a developer, I also treasure our configure scripts's --enable-debug option that sets a long range of "picky" compiler options. + +# Note: By default this CMake build script detects the version of some +# dependencies using `check_symbol_exists`. Those checks do not work +# in the case that both CURL and its dependency are included as +# sub-projects in a larger build using `FetchContent`. To support +# that case, additional variables may be defined by the parent +# project, ideally in the "extra" find package redirect file: +# https://cmake.org/cmake/help/latest/module/FetchContent.html#integrating-with-find-package +# +# The following variables are available: +# HAVE_SSL_SET0_WBIO: `SSL_set0_wbio` present in OpenSSL/wolfSSL +# HAVE_OPENSSL_SRP: `SSL_CTX_set_srp_username` present in OpenSSL/wolfSSL +# HAVE_GNUTLS_SRP: `gnutls_srp_verifier` present in GnuTLS +# HAVE_SSL_CTX_SET_QUIC_METHOD: `SSL_CTX_set_quic_method` present in OpenSSL/wolfSSL +# HAVE_QUICHE_CONN_SET_QLOG_FD: `quiche_conn_set_qlog_fd` present in QUICHE +# +# For each of the above variables, if the variable is DEFINED (either +# to ON or OFF), the symbol detection will be skipped. If the +# variable is NOT DEFINED, the symbol detection will be performed. + +cmake_minimum_required(VERSION 3.7...3.16 FATAL_ERROR) +message(STATUS "Using CMake version ${CMAKE_VERSION}") + +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMake;${CMAKE_MODULE_PATH}") +include(Utilities) +include(Macros) +include(CMakeDependentOption) +include(CheckCCompilerFlag) + +project(CURL C) + +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}) +string(REGEX MATCH "#define LIBCURL_VERSION_NUM 0x[0-9a-fA-F]+" + CURL_VERSION_NUM ${CURL_VERSION_H_CONTENTS}) +string(REGEX REPLACE "[^0]+0x" "" CURL_VERSION_NUM ${CURL_VERSION_NUM}) + + +# Setup package meta-data +# SET(PACKAGE "curl") +message(STATUS "curl version=[${CURL_VERSION}]") +# SET(PACKAGE_TARNAME "curl") +# SET(PACKAGE_NAME "curl") +# SET(PACKAGE_VERSION "-") +# SET(PACKAGE_STRING "curl-") +# SET(PACKAGE_BUGREPORT "a suitable curl mailing list => https://curl.se/mail/") +set(OPERATING_SYSTEM "${CMAKE_SYSTEM_NAME}") +if(CMAKE_C_COMPILER_TARGET) + set(OS "\"${CMAKE_C_COMPILER_TARGET}\"") +else() + set(OS "\"${CMAKE_SYSTEM_NAME}\"") +endif() + +include_directories(${CURL_SOURCE_DIR}/include) + +set(CMAKE_UNITY_BUILD_BATCH_SIZE 0) + +option(CURL_WERROR "Turn compiler warnings into errors" OFF) +option(PICKY_COMPILER "Enable picky compiler options" ON) +option(BUILD_CURL_EXE "Set to ON to build curl executable." ON) +option(BUILD_SHARED_LIBS "Build shared libraries" ON) +option(BUILD_STATIC_LIBS "Build static libraries" OFF) +option(BUILD_STATIC_CURL "Build curl executable with static libcurl" OFF) +option(ENABLE_ARES "Set to ON to enable c-ares support" OFF) +option(CURL_DISABLE_INSTALL "Set to ON to disable instalation targets" OFF) + +if(WIN32) + option(CURL_STATIC_CRT "Set to ON to build libcurl with static CRT on Windows (/MT)." OFF) + option(ENABLE_UNICODE "Set to ON to use the Unicode version of the Windows API functions" OFF) + set(CURL_TARGET_WINDOWS_VERSION "" CACHE STRING "Minimum target Windows version as hex string") + if(CURL_TARGET_WINDOWS_VERSION) + add_definitions(-D_WIN32_WINNT=${CURL_TARGET_WINDOWS_VERSION}) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -D_WIN32_WINNT=${CURL_TARGET_WINDOWS_VERSION}) + set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -D_WIN32_WINNT=${CURL_TARGET_WINDOWS_VERSION}") + endif() + if(ENABLE_UNICODE) + add_definitions(-DUNICODE -D_UNICODE) + if(MINGW) + add_compile_options(-municode) + endif() + endif() +endif() +option(CURL_LTO "Turn on compiler Link Time Optimizations" OFF) + +cmake_dependent_option(ENABLE_THREADED_RESOLVER "Set to ON to enable threaded DNS lookup" + ON "NOT ENABLE_ARES" + OFF) + +option(ENABLE_DEBUG "Set to ON to enable curl debug features" OFF) +option(ENABLE_CURLDEBUG "Set to ON to build with TrackMemory feature enabled" OFF) + +include(PickyWarnings) + +if(ENABLE_DEBUG) + # DEBUGBUILD will be defined only for Debug builds + set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$:DEBUGBUILD>) + set(ENABLE_CURLDEBUG ON) +endif() + +if(ENABLE_CURLDEBUG) + set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CURLDEBUG) +endif() + +# For debug libs and exes, add "-d" postfix +if(NOT DEFINED CMAKE_DEBUG_POSTFIX) + set(CMAKE_DEBUG_POSTFIX "-d") +endif() + +set(LIB_STATIC "libcurl_static") +set(LIB_SHARED "libcurl_shared") + +if(NOT BUILD_SHARED_LIBS AND NOT BUILD_STATIC_LIBS) + set(BUILD_STATIC_LIBS ON) +endif() +if(NOT BUILD_STATIC_CURL AND NOT BUILD_SHARED_LIBS) + set(BUILD_STATIC_CURL ON) +elseif(BUILD_STATIC_CURL AND NOT BUILD_STATIC_LIBS) + set(BUILD_STATIC_CURL OFF) +endif() + +# lib flavour selected for curl tool +if(BUILD_STATIC_CURL) + set(LIB_SELECTED_FOR_EXE ${LIB_STATIC}) +else() + set(LIB_SELECTED_FOR_EXE ${LIB_SHARED}) +endif() + +# lib flavour selected for example and test programs. +if(BUILD_SHARED_LIBS) + set(LIB_SELECTED ${LIB_SHARED}) +else() + set(LIB_SELECTED ${LIB_STATIC}) +endif() + +# initialize CURL_LIBS +set(CURL_LIBS "") + +if(ENABLE_ARES) + set(USE_ARES 1) + find_package(CARES REQUIRED) + list(APPEND CURL_LIBS ${CARES_LIBRARY}) +endif() + +include(CurlSymbolHiding) + +option(CURL_ENABLE_EXPORT_TARGET "to enable cmake export target" ON) +mark_as_advanced(CURL_ENABLE_EXPORT_TARGET) + +option(CURL_DISABLE_ALTSVC "disables alt-svc support" OFF) +mark_as_advanced(CURL_DISABLE_ALTSVC) +option(CURL_DISABLE_SRP "disables TLS-SRP support" OFF) +mark_as_advanced(CURL_DISABLE_SRP) +option(CURL_DISABLE_COOKIES "disables cookies support" OFF) +mark_as_advanced(CURL_DISABLE_COOKIES) +option(CURL_DISABLE_BASIC_AUTH "disables Basic authentication" OFF) +mark_as_advanced(CURL_DISABLE_BASIC_AUTH) +option(CURL_DISABLE_BEARER_AUTH "disables Bearer authentication" OFF) +mark_as_advanced(CURL_DISABLE_BEARER_AUTH) +option(CURL_DISABLE_DIGEST_AUTH "disables Digest authentication" OFF) +mark_as_advanced(CURL_DISABLE_DIGEST_AUTH) +option(CURL_DISABLE_KERBEROS_AUTH "disables Kerberos authentication" OFF) +mark_as_advanced(CURL_DISABLE_KERBEROS_AUTH) +option(CURL_DISABLE_NEGOTIATE_AUTH "disables negotiate authentication" OFF) +mark_as_advanced(CURL_DISABLE_NEGOTIATE_AUTH) +option(CURL_DISABLE_AWS "disables AWS-SIG4" OFF) +mark_as_advanced(CURL_DISABLE_AWS) +option(CURL_DISABLE_DICT "disables DICT" OFF) +mark_as_advanced(CURL_DISABLE_DICT) +option(CURL_DISABLE_DOH "disables DNS-over-HTTPS" OFF) +mark_as_advanced(CURL_DISABLE_DOH) +option(CURL_DISABLE_FILE "disables FILE" OFF) +mark_as_advanced(CURL_DISABLE_FILE) +cmake_dependent_option(CURL_DISABLE_FORM_API "disables form api" OFF + "NOT CURL_DISABLE_MIME" ON) +mark_as_advanced(CURL_DISABLE_FORM_API) +option(CURL_DISABLE_FTP "disables FTP" OFF) +mark_as_advanced(CURL_DISABLE_FTP) +option(CURL_DISABLE_GETOPTIONS "disables curl_easy_options API for existing options to curl_easy_setopt" OFF) +mark_as_advanced(CURL_DISABLE_GETOPTIONS) +option(CURL_DISABLE_GOPHER "disables Gopher" OFF) +mark_as_advanced(CURL_DISABLE_GOPHER) +option(CURL_DISABLE_HEADERS_API "disables headers-api support" OFF) +mark_as_advanced(CURL_DISABLE_HEADERS_API) +option(CURL_DISABLE_HSTS "disables HSTS support" OFF) +mark_as_advanced(CURL_DISABLE_HSTS) +option(CURL_DISABLE_HTTP "disables HTTP" OFF) +mark_as_advanced(CURL_DISABLE_HTTP) +option(CURL_DISABLE_HTTP_AUTH "disables all HTTP authentication methods" OFF) +mark_as_advanced(CURL_DISABLE_HTTP_AUTH) +option(CURL_DISABLE_IMAP "disables IMAP" OFF) +mark_as_advanced(CURL_DISABLE_IMAP) +option(CURL_DISABLE_LDAP "disables LDAP" OFF) +mark_as_advanced(CURL_DISABLE_LDAP) +option(CURL_DISABLE_LDAPS "disables LDAPS" OFF) +mark_as_advanced(CURL_DISABLE_LDAPS) +option(CURL_DISABLE_LIBCURL_OPTION "disables --libcurl option from the curl tool" OFF) +mark_as_advanced(CURL_DISABLE_LIBCURL_OPTION) +option(CURL_DISABLE_MIME "disables MIME support" OFF) +mark_as_advanced(CURL_DISABLE_MIME) +option(CURL_DISABLE_MQTT "disables MQTT" OFF) +mark_as_advanced(CURL_DISABLE_BINDLOCAL) +option(CURL_DISABLE_BINDLOCAL "disables local binding support" OFF) +mark_as_advanced(CURL_DISABLE_MQTT) +option(CURL_DISABLE_NETRC "disables netrc parser" OFF) +mark_as_advanced(CURL_DISABLE_NETRC) +option(CURL_DISABLE_NTLM "disables NTLM support" OFF) +mark_as_advanced(CURL_DISABLE_NTLM) +option(CURL_DISABLE_PARSEDATE "disables date parsing" OFF) +mark_as_advanced(CURL_DISABLE_PARSEDATE) +option(CURL_DISABLE_POP3 "disables POP3" OFF) +mark_as_advanced(CURL_DISABLE_POP3) +option(CURL_DISABLE_PROGRESS_METER "disables built-in progress meter" OFF) +mark_as_advanced(CURL_DISABLE_PROGRESS_METER) +option(CURL_DISABLE_PROXY "disables proxy support" OFF) +mark_as_advanced(CURL_DISABLE_PROXY) +option(CURL_DISABLE_RTSP "disables RTSP" OFF) +mark_as_advanced(CURL_DISABLE_RTSP) +option(CURL_DISABLE_SHUFFLE_DNS "disables shuffle DNS feature" OFF) +mark_as_advanced(CURL_DISABLE_SHUFFLE_DNS) +option(CURL_DISABLE_SMB "disables SMB" OFF) +mark_as_advanced(CURL_DISABLE_SMB) +option(CURL_DISABLE_SMTP "disables SMTP" OFF) +mark_as_advanced(CURL_DISABLE_SMTP) +option(CURL_DISABLE_SOCKETPAIR "disables use of socketpair for curl_multi_poll" OFF) +mark_as_advanced(CURL_DISABLE_SOCKETPAIR) +option(CURL_DISABLE_TELNET "disables Telnet" OFF) +mark_as_advanced(CURL_DISABLE_TELNET) +option(CURL_DISABLE_TFTP "disables TFTP" OFF) +mark_as_advanced(CURL_DISABLE_TFTP) +option(CURL_DISABLE_VERBOSE_STRINGS "disables verbose strings" OFF) +mark_as_advanced(CURL_DISABLE_VERBOSE_STRINGS) + +# Corresponds to HTTP_ONLY in lib/curl_setup.h +option(HTTP_ONLY "disables all protocols except HTTP (This overrides all CURL_DISABLE_* options)" OFF) +mark_as_advanced(HTTP_ONLY) + +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_MQTT ON) + set(CURL_DISABLE_POP3 ON) + set(CURL_DISABLE_RTSP ON) + set(CURL_DISABLE_SMB ON) + set(CURL_DISABLE_SMTP ON) + set(CURL_DISABLE_TELNET ON) + set(CURL_DISABLE_TFTP ON) +endif() + +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" + HAVE_SOCKADDR_IN6_SIN6_ADDR) + check_struct_has_member("struct sockaddr_in6" sin6_scope_id "netinet/in.h" + HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID) + if(NOT HAVE_SOCKADDR_IN6_SIN6_ADDR) + message(WARNING "struct sockaddr_in6 not available, disabling IPv6 support") + # Force the feature off as this name is used as guard macro... + set(ENABLE_IPV6 OFF + CACHE BOOL "Define if you want to enable IPv6 support" FORCE) + endif() + + if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND NOT ENABLE_ARES) + set(use_core_foundation_and_core_services ON) + + find_library(SYSTEMCONFIGURATION_FRAMEWORK "SystemConfiguration") + if(NOT SYSTEMCONFIGURATION_FRAMEWORK) + message(FATAL_ERROR "SystemConfiguration framework not found") + endif() + + list(APPEND CURL_LIBS "-framework SystemConfiguration") + endif() +endif() + +if(USE_MANUAL) + #nroff is currently only used when USE_MANUAL is set, so we can prevent the warning of no *NROFF if USE_MANUAL is OFF (or not defined), by not even looking for NROFF.. + curl_nroff_check() +endif() +find_package(Perl) + +cmake_dependent_option(ENABLE_MANUAL "to provide the built-in manual" + ON "NROFF_USEFUL;PERL_FOUND" + OFF) + +if(ENABLE_MANUAL) + set(USE_MANUAL ON) +endif() + +if(CURL_STATIC_CRT) + set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded$<$:Debug>") + set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} /MT") + set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} /MTd") +endif() + +# Disable warnings on Borland to avoid changing 3rd party code. +if(BORLAND) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -w-") +endif() + +# If we are on AIX, do the _ALL_SOURCE magic +if(${CMAKE_SYSTEM_NAME} MATCHES AIX) + set(_ALL_SOURCE 1) +endif() + +# If we are on Haiku, make sure that the network library is brought in. +if(${CMAKE_SYSTEM_NAME} MATCHES Haiku) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -lnetwork") +endif() + +# Include all the necessary files for macros +include(CMakePushCheckState) +include(CheckFunctionExists) +include(CheckIncludeFile) +include(CheckIncludeFiles) +include(CheckLibraryExists) +include(CheckSymbolExists) +include(CheckTypeSize) +include(CheckCSourceCompiles) + +# On windows preload settings +if(WIN32) + set(HAVE_WINDOWS_H 1) + set(HAVE_WS2TCPIP_H 1) + set(HAVE_WINSOCK2_H 1) + include(${CMAKE_CURRENT_SOURCE_DIR}/CMake/Platforms/WindowsCache.cmake) +endif() + +if(ENABLE_THREADED_RESOLVER) + if(WIN32) + set(USE_THREADS_WIN32 ON) + else() + find_package(Threads REQUIRED) + set(USE_THREADS_POSIX ${CMAKE_USE_PTHREADS_INIT}) + set(HAVE_PTHREAD_H ${CMAKE_USE_PTHREADS_INIT}) + set(CURL_LIBS ${CURL_LIBS} ${CMAKE_THREAD_LIBS_INIT}) + endif() +endif() + +# Check for all needed libraries +check_library_exists("socket" "connect" "" HAVE_LIBSOCKET) +if(HAVE_LIBSOCKET) + set(CURL_LIBS "socket;${CURL_LIBS}") +endif() + +check_function_exists(gethostname HAVE_GETHOSTNAME) + +if(WIN32) + list(APPEND CURL_LIBS "ws2_32" "bcrypt") + if(USE_LIBRTMP) + list(APPEND CURL_LIBS "winmm") + endif() +endif() + +# check SSL libraries +option(CURL_ENABLE_SSL "Enable SSL support" ON) + +if(CURL_DEFAULT_SSL_BACKEND) + set(valid_default_ssl_backend FALSE) +endif() + +if(APPLE) + cmake_dependent_option(CURL_USE_SECTRANSP "Enable Apple OS native SSL/TLS" OFF CURL_ENABLE_SSL OFF) +endif() +if(WIN32) + cmake_dependent_option(CURL_USE_SCHANNEL "Enable Windows native SSL/TLS" OFF CURL_ENABLE_SSL OFF) + cmake_dependent_option(CURL_WINDOWS_SSPI "Use windows libraries to allow NTLM authentication without OpenSSL" ON + CURL_USE_SCHANNEL OFF) +endif() +cmake_dependent_option(CURL_USE_MBEDTLS "Enable mbedTLS for SSL/TLS" OFF CURL_ENABLE_SSL OFF) +cmake_dependent_option(CURL_USE_BEARSSL "Enable BearSSL for SSL/TLS" OFF CURL_ENABLE_SSL OFF) +cmake_dependent_option(CURL_USE_WOLFSSL "Enable wolfSSL for SSL/TLS" OFF CURL_ENABLE_SSL OFF) +cmake_dependent_option(CURL_USE_GNUTLS "Enable GnuTLS for SSL/TLS" OFF CURL_ENABLE_SSL OFF) + +set(openssl_default ON) +if(WIN32 OR CURL_USE_SECTRANSP OR CURL_USE_SCHANNEL OR CURL_USE_MBEDTLS OR CURL_USE_WOLFSSL) + set(openssl_default OFF) +endif() +cmake_dependent_option(CURL_USE_OPENSSL "Enable OpenSSL for SSL/TLS" ${openssl_default} CURL_ENABLE_SSL OFF) +option(CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG "Disable automatic loading of OpenSSL configuration" OFF) + +count_true(enabled_ssl_options_count + CURL_USE_SCHANNEL + CURL_USE_SECTRANSP + CURL_USE_OPENSSL + CURL_USE_MBEDTLS + CURL_USE_BEARSSL + CURL_USE_WOLFSSL +) +if(enabled_ssl_options_count GREATER "1") + set(CURL_WITH_MULTI_SSL ON) +endif() + +if(CURL_USE_SCHANNEL) + set(SSL_ENABLED ON) + set(USE_SCHANNEL ON) # Windows native SSL/TLS support + set(USE_WINDOWS_SSPI ON) # CURL_USE_SCHANNEL implies CURL_WINDOWS_SSPI + + if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "schannel") + set(valid_default_ssl_backend TRUE) + endif() +endif() +if(CURL_WINDOWS_SSPI) + set(USE_WINDOWS_SSPI ON) +endif() + +if(CURL_USE_SECTRANSP) + set(use_core_foundation_and_core_services ON) + + find_library(SECURITY_FRAMEWORK "Security") + if(NOT SECURITY_FRAMEWORK) + message(FATAL_ERROR "Security framework not found") + endif() + + set(SSL_ENABLED ON) + set(USE_SECTRANSP ON) + list(APPEND CURL_LIBS "-framework Security") + + if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "secure-transport") + set(valid_default_ssl_backend TRUE) + endif() +endif() + +if(use_core_foundation_and_core_services) + find_library(COREFOUNDATION_FRAMEWORK "CoreFoundation") + find_library(CORESERVICES_FRAMEWORK "CoreServices") + + if(NOT COREFOUNDATION_FRAMEWORK) + message(FATAL_ERROR "CoreFoundation framework not found") + endif() + if(NOT CORESERVICES_FRAMEWORK) + message(FATAL_ERROR "CoreServices framework not found") + endif() + + list(APPEND CURL_LIBS "-framework CoreFoundation -framework CoreServices") +endif() + +if(CURL_USE_OPENSSL) + find_package(OpenSSL REQUIRED) + set(SSL_ENABLED ON) + set(USE_OPENSSL ON) + + # Depend on OpenSSL 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 OpenSSL::SSL OpenSSL::Crypto) + else() + list(APPEND CURL_LIBS ${OPENSSL_LIBRARIES}) + include_directories(${OPENSSL_INCLUDE_DIR}) + endif() + + if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "openssl") + set(valid_default_ssl_backend TRUE) + endif() + + set(CMAKE_REQUIRED_INCLUDES ${OPENSSL_INCLUDE_DIR}) + if(NOT DEFINED HAVE_BORINGSSL) + check_symbol_exists(OPENSSL_IS_BORINGSSL "openssl/base.h" HAVE_BORINGSSL) + endif() + if(NOT DEFINED HAVE_AWSLC) + check_symbol_exists(OPENSSL_IS_AWSLC "openssl/base.h" HAVE_AWSLC) + endif() +endif() + +if(CURL_USE_MBEDTLS) + find_package(MbedTLS REQUIRED) + set(SSL_ENABLED ON) + set(USE_MBEDTLS ON) + list(APPEND CURL_LIBS ${MBEDTLS_LIBRARIES}) + include_directories(${MBEDTLS_INCLUDE_DIRS}) + + if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "mbedtls") + set(valid_default_ssl_backend TRUE) + endif() +endif() + +if(CURL_USE_BEARSSL) + find_package(BearSSL REQUIRED) + set(SSL_ENABLED ON) + set(USE_BEARSSL ON) + list(APPEND CURL_LIBS ${BEARSSL_LIBRARY}) + include_directories(${BEARSSL_INCLUDE_DIRS}) + + if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "bearssl") + set(valid_default_ssl_backend TRUE) + endif() +endif() + +if(CURL_USE_WOLFSSL) + find_package(WolfSSL REQUIRED) + set(SSL_ENABLED ON) + set(USE_WOLFSSL ON) + list(APPEND CURL_LIBS ${WolfSSL_LIBRARIES}) + include_directories(${WolfSSL_INCLUDE_DIRS}) + + if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "wolfssl") + set(valid_default_ssl_backend TRUE) + endif() +endif() + +if(CURL_USE_GNUTLS) + find_package(GnuTLS REQUIRED) + set(SSL_ENABLED ON) + set(USE_GNUTLS ON) + list(APPEND CURL_LIBS ${GNUTLS_LIBRARIES} "nettle") + include_directories(${GNUTLS_INCLUDE_DIRS}) + + if(CURL_DEFAULT_SSL_BACKEND AND CURL_DEFAULT_SSL_BACKEND STREQUAL "gnutls") + set(valid_default_ssl_backend TRUE) + endif() + + if(NOT DEFINED HAVE_GNUTLS_SRP AND NOT CURL_DISABLE_SRP) + cmake_push_check_state() + set(CMAKE_REQUIRED_INCLUDES ${GNUTLS_INCLUDE_DIRS}) + set(CMAKE_REQUIRED_LIBRARIES ${GNUTLS_LIBRARIES}) + check_symbol_exists(gnutls_srp_verifier "gnutls/gnutls.h" HAVE_GNUTLS_SRP) + cmake_pop_check_state() + endif() +endif() + +if(CURL_DEFAULT_SSL_BACKEND AND NOT valid_default_ssl_backend) + message(FATAL_ERROR "CURL_DEFAULT_SSL_BACKEND '${CURL_DEFAULT_SSL_BACKEND}' not enabled.") +endif() + +# Keep ZLIB detection after TLS detection, +# and before calling openssl_check_symbol_exists(). + +set(HAVE_LIBZ OFF) +set(USE_ZLIB OFF) +optional_dependency(ZLIB) +if(ZLIB_FOUND) + 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) + else() + list(APPEND CURL_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) +set(HAVE_BROTLI OFF) +if(CURL_BROTLI) + find_package(Brotli REQUIRED) + if(BROTLI_FOUND) + set(HAVE_BROTLI ON) + set(CURL_LIBS "${BROTLI_LIBRARIES};${CURL_LIBS}") # For 'ld' linker. Emulate `list(PREPEND ...)` to stay compatible with \n") + endforeach() + + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DLDAP_DEPRECATED=1) + list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LDAP_LIB}) + set(CURL_LIBS "${CMAKE_LDAP_LIB};${CURL_LIBS}") + if(HAVE_LIBLBER) + list(APPEND CMAKE_REQUIRED_LIBRARIES ${CMAKE_LBER_LIB}) + set(CURL_LIBS "${CMAKE_LBER_LIB};${CURL_LIBS}") + endif() + + check_c_source_compiles(" + ${_INCLUDE_STRING} + int main(int argc, char ** argv) + { + BerValue *bvp = NULL; + BerElement *bep = ber_init(bvp); + ber_free(bep, 1); + return 0; + }" NOT_NEED_LBER_H) + if(NOT_NEED_LBER_H) + set(NEED_LBER_H OFF) + else() + set(CURL_TEST_DEFINES "${CURL_TEST_DEFINES} -DNEED_LBER_H") + endif() + + check_function_exists(ldap_url_parse HAVE_LDAP_URL_PARSE) + check_function_exists(ldap_init_fd HAVE_LDAP_INIT_FD) + + unset(CMAKE_REQUIRED_LIBRARIES) + + check_include_file("ldap_ssl.h" HAVE_LDAP_SSL_H) + + if(HAVE_LDAP_INIT_FD) + set(USE_OPENLDAP ON) + add_definitions("-DLDAP_DEPRECATED=1") + endif() + if(NOT CURL_DISABLE_LDAPS) + set(HAVE_LDAP_SSL ON) + endif() + endif() + endif() +endif() + +# No ldap, no ldaps. +if(CURL_DISABLE_LDAP) + if(NOT CURL_DISABLE_LDAPS) + message(STATUS "LDAP needs to be enabled to support LDAPS") + set(CURL_DISABLE_LDAPS ON CACHE BOOL "" FORCE) + endif() +endif() + +# Check for idn2 +option(USE_LIBIDN2 "Use libidn2 for IDN support" ON) +if(USE_LIBIDN2) + check_library_exists("idn2" "idn2_lookup_ul" "" HAVE_LIBIDN2) + if(HAVE_LIBIDN2) + set(CURL_LIBS "idn2;${CURL_LIBS}") + check_include_file_concat("idn2.h" HAVE_IDN2_H) + endif() +else() + set(HAVE_LIBIDN2 OFF) +endif() + +if(WIN32) + option(USE_WIN32_IDN "Use WinIDN for IDN support" OFF) + if(USE_WIN32_IDN) + list(APPEND CURL_LIBS "normaliz") + endif() +endif() + +#libpsl +option(CURL_USE_LIBPSL "Use libPSL" ON) +mark_as_advanced(CURL_USE_LIBPSL) +set(USE_LIBPSL OFF) + +if(CURL_USE_LIBPSL) + find_package(LibPSL) + if(LIBPSL_FOUND) + list(APPEND CURL_LIBS ${LIBPSL_LIBRARY}) + list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBPSL_INCLUDE_DIR}") + include_directories("${LIBPSL_INCLUDE_DIR}") + set(USE_LIBPSL ON) + endif() +endif() + +#libSSH2 +option(CURL_USE_LIBSSH2 "Use libSSH2" ON) +mark_as_advanced(CURL_USE_LIBSSH2) +set(USE_LIBSSH2 OFF) + +if(CURL_USE_LIBSSH2) + find_package(LibSSH2) + if(LIBSSH2_FOUND) + list(APPEND CURL_LIBS ${LIBSSH2_LIBRARY}) + list(APPEND CMAKE_REQUIRED_INCLUDES "${LIBSSH2_INCLUDE_DIR}") + include_directories("${LIBSSH2_INCLUDE_DIR}") + set(USE_LIBSSH2 ON) + endif() +endif() + +# libssh +option(CURL_USE_LIBSSH "Use libSSH" OFF) +mark_as_advanced(CURL_USE_LIBSSH) +if(NOT USE_LIBSSH2 AND CURL_USE_LIBSSH) + find_package(libssh CONFIG) + if(libssh_FOUND) + message(STATUS "Found libssh ${libssh_VERSION}") + # Use imported target for include and library paths. + list(APPEND CURL_LIBS ssh) + set(USE_LIBSSH ON) + endif() +endif() + +option(CURL_USE_GSSAPI "Use GSSAPI implementation (right now only Heimdal is supported with CMake build)" OFF) +mark_as_advanced(CURL_USE_GSSAPI) + +if(CURL_USE_GSSAPI) + find_package(GSS) + + set(HAVE_GSSAPI ${GSS_FOUND}) + if(GSS_FOUND) + + message(STATUS "Found ${GSS_FLAVOUR} GSSAPI version: \"${GSS_VERSION}\"") + + list(APPEND CMAKE_REQUIRED_INCLUDES ${GSS_INCLUDE_DIR}) + check_include_file_concat("gssapi/gssapi.h" HAVE_GSSAPI_GSSAPI_H) + check_include_file_concat("gssapi/gssapi_generic.h" HAVE_GSSAPI_GSSAPI_GENERIC_H) + check_include_file_concat("gssapi/gssapi_krb5.h" HAVE_GSSAPI_GSSAPI_KRB5_H) + + if(GSS_FLAVOUR STREQUAL "Heimdal") + set(HAVE_GSSHEIMDAL ON) + else() # MIT + set(HAVE_GSSMIT ON) + set(_INCLUDE_LIST "") + if(HAVE_GSSAPI_GSSAPI_H) + list(APPEND _INCLUDE_LIST "gssapi/gssapi.h") + endif() + if(HAVE_GSSAPI_GSSAPI_GENERIC_H) + list(APPEND _INCLUDE_LIST "gssapi/gssapi_generic.h") + endif() + if(HAVE_GSSAPI_GSSAPI_KRB5_H) + list(APPEND _INCLUDE_LIST "gssapi/gssapi_krb5.h") + endif() + + string(REPLACE ";" " " _COMPILER_FLAGS_STR "${GSS_COMPILER_FLAGS}") + string(REPLACE ";" " " _LINKER_FLAGS_STR "${GSS_LINKER_FLAGS}") + + foreach(_dir ${GSS_LINK_DIRECTORIES}) + set(_LINKER_FLAGS_STR "${_LINKER_FLAGS_STR} -L\"${_dir}\"") + endforeach() + + if(NOT DEFINED HAVE_GSS_C_NT_HOSTBASED_SERVICE) + set(CMAKE_REQUIRED_FLAGS "${_COMPILER_FLAGS_STR} ${_LINKER_FLAGS_STR}") + set(CMAKE_REQUIRED_LIBRARIES ${GSS_LIBRARIES}) + check_symbol_exists("GSS_C_NT_HOSTBASED_SERVICE" ${_INCLUDE_LIST} HAVE_GSS_C_NT_HOSTBASED_SERVICE) + unset(CMAKE_REQUIRED_LIBRARIES) + endif() + if(NOT HAVE_GSS_C_NT_HOSTBASED_SERVICE) + set(HAVE_OLD_GSSMIT ON) + endif() + endif() + + include_directories(${GSS_INCLUDE_DIR}) + link_directories(${GSS_LINK_DIRECTORIES}) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${GSS_COMPILER_FLAGS}") + string(REPLACE ";" " " GSS_LINKER_FLAGS "${GSS_LINKER_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}) + + else() + message(WARNING "GSSAPI support has been requested but no supporting libraries found. Skipping.") + endif() +endif() + +option(ENABLE_UNIX_SOCKETS "Define if you want Unix domain sockets support" ON) +if(ENABLE_UNIX_SOCKETS) + include(CheckStructHasMember) + if(WIN32) + set(USE_UNIX_SOCKETS ON) + else() + check_struct_has_member("struct sockaddr_un" sun_path "sys/un.h" USE_UNIX_SOCKETS) + endif() +else() + unset(USE_UNIX_SOCKETS CACHE) +endif() + + +# +# CA handling +# +set(CURL_CA_BUNDLE "auto" CACHE STRING + "Path to the CA bundle. Set 'none' to disable or 'auto' for auto-detection. Defaults to 'auto'.") +set(CURL_CA_FALLBACK OFF CACHE BOOL + "Set ON to use built-in CA store of TLS backend. Defaults to OFF") +set(CURL_CA_PATH "auto" CACHE STRING + "Location of default CA path. Set 'none' to disable or 'auto' for auto-detection. Defaults to 'auto'.") + +if("${CURL_CA_BUNDLE}" STREQUAL "") + message(FATAL_ERROR "Invalid value of CURL_CA_BUNDLE. Use 'none', 'auto' or file path.") +elseif("${CURL_CA_BUNDLE}" STREQUAL "none") + unset(CURL_CA_BUNDLE CACHE) +elseif("${CURL_CA_BUNDLE}" STREQUAL "auto") + unset(CURL_CA_BUNDLE CACHE) + if(NOT CMAKE_CROSSCOMPILING) + set(CURL_CA_BUNDLE_AUTODETECT TRUE) + endif() +else() + set(CURL_CA_BUNDLE_SET TRUE) +endif() + +if("${CURL_CA_PATH}" STREQUAL "") + message(FATAL_ERROR "Invalid value of CURL_CA_PATH. Use 'none', 'auto' or directory path.") +elseif("${CURL_CA_PATH}" STREQUAL "none") + unset(CURL_CA_PATH CACHE) +elseif("${CURL_CA_PATH}" STREQUAL "auto") + unset(CURL_CA_PATH CACHE) + if(NOT CMAKE_CROSSCOMPILING) + set(CURL_CA_PATH_AUTODETECT TRUE) + endif() +else() + set(CURL_CA_PATH_SET TRUE) +endif() + +if(CURL_CA_BUNDLE_SET AND CURL_CA_PATH_AUTODETECT) + # Skip autodetection of unset CA path because CA bundle is set explicitly +elseif(CURL_CA_PATH_SET AND CURL_CA_BUNDLE_AUTODETECT) + # Skip autodetection of unset CA bundle because CA path is set explicitly +elseif(CURL_CA_PATH_AUTODETECT OR CURL_CA_BUNDLE_AUTODETECT) + # first try autodetecting a CA bundle, then a CA path + + if(CURL_CA_BUNDLE_AUTODETECT) + set(SEARCH_CA_BUNDLE_PATHS + /etc/ssl/certs/ca-certificates.crt + /etc/pki/tls/certs/ca-bundle.crt + /usr/share/ssl/certs/ca-bundle.crt + /usr/local/share/certs/ca-root-nss.crt + /etc/ssl/cert.pem) + + foreach(SEARCH_CA_BUNDLE_PATH ${SEARCH_CA_BUNDLE_PATHS}) + if(EXISTS "${SEARCH_CA_BUNDLE_PATH}") + message(STATUS "Found CA bundle: ${SEARCH_CA_BUNDLE_PATH}") + set(CURL_CA_BUNDLE "${SEARCH_CA_BUNDLE_PATH}" CACHE STRING + "Path to the CA bundle. Set 'none' to disable or 'auto' for auto-detection. Defaults to 'auto'.") + set(CURL_CA_BUNDLE_SET TRUE CACHE BOOL "Path to the CA bundle has been set") + break() + endif() + endforeach() + endif() + + if(CURL_CA_PATH_AUTODETECT AND (NOT CURL_CA_PATH_SET)) + if(EXISTS "/etc/ssl/certs") + set(CURL_CA_PATH "/etc/ssl/certs" CACHE STRING + "Location of default CA path. Set 'none' to disable or 'auto' for auto-detection. Defaults to 'auto'.") + set(CURL_CA_PATH_SET TRUE CACHE BOOL "Path to the CA bundle has been set") + endif() + endif() +endif() + +if(CURL_CA_PATH_SET AND + NOT USE_OPENSSL AND + NOT USE_WOLFSSL AND + NOT USE_GNUTLS AND + NOT USE_MBEDTLS) + message(STATUS + "CA path only supported by OpenSSL, wolfSSL, GnuTLS or mbedTLS. " + "Set CURL_CA_PATH=none or enable one of those TLS backends.") +endif() + +# Check for header files +if(WIN32) + check_include_file_concat("winsock2.h" HAVE_WINSOCK2_H) + check_include_file_concat("ws2tcpip.h" HAVE_WS2TCPIP_H) + check_include_file_concat("windows.h" HAVE_WINDOWS_H) +endif() + +if(WIN32) + # detect actual value of _WIN32_WINNT and store as HAVE_WIN32_WINNT + curl_internal_test(HAVE_WIN32_WINNT) + if(HAVE_WIN32_WINNT) + string(REGEX MATCH ".*_WIN32_WINNT=0x[0-9a-fA-F]+" OUTPUT "${OUTPUT}") + string(REGEX REPLACE ".*_WIN32_WINNT=" "" OUTPUT "${OUTPUT}") + string(REGEX REPLACE "0x([0-9a-f][0-9a-f][0-9a-f])$" "0x0\\1" OUTPUT "${OUTPUT}") # pad to 4 digits + string(TOLOWER "${OUTPUT}" HAVE_WIN32_WINNT) + message(STATUS "Found _WIN32_WINNT=${HAVE_WIN32_WINNT}") + endif() + # avoid storing HAVE_WIN32_WINNT in CMake cache + unset(HAVE_WIN32_WINNT CACHE) + + if(HAVE_WIN32_WINNT) + if(HAVE_WIN32_WINNT STRLESS "0x0501") + # Windows XP is required for freeaddrinfo, getaddrinfo + message(FATAL_ERROR "Building for Windows XP or newer is required.") + endif() + + # pre-fill detection results based on target OS version + if(MINGW OR MSVC) + if(HAVE_WIN32_WINNT STRLESS "0x0600") + set(HAVE_INET_NTOP 0) + set(HAVE_INET_PTON 0) + else() # Windows Vista or newer + set(HAVE_INET_NTOP 1) + set(HAVE_INET_PTON 1) + endif() + unset(HAVE_INET_NTOP CACHE) + unset(HAVE_INET_PTON CACHE) + endif() + endif() +endif() + +check_include_file_concat("sys/filio.h" HAVE_SYS_FILIO_H) +check_include_file_concat("sys/wait.h" HAVE_SYS_WAIT_H) +check_include_file_concat("sys/ioctl.h" HAVE_SYS_IOCTL_H) +check_include_file_concat("sys/param.h" HAVE_SYS_PARAM_H) +check_include_file_concat("sys/poll.h" HAVE_SYS_POLL_H) +check_include_file_concat("sys/resource.h" HAVE_SYS_RESOURCE_H) +check_include_file_concat("sys/select.h" HAVE_SYS_SELECT_H) +check_include_file_concat("sys/socket.h" HAVE_SYS_SOCKET_H) +check_include_file_concat("sys/sockio.h" HAVE_SYS_SOCKIO_H) +check_include_file_concat("sys/stat.h" HAVE_SYS_STAT_H) +check_include_file_concat("sys/time.h" HAVE_SYS_TIME_H) +check_include_file_concat("sys/types.h" HAVE_SYS_TYPES_H) +check_include_file_concat("sys/un.h" HAVE_SYS_UN_H) +check_include_file_concat("sys/utime.h" HAVE_SYS_UTIME_H) +check_include_file_concat("sys/xattr.h" HAVE_SYS_XATTR_H) +check_include_file_concat("arpa/inet.h" HAVE_ARPA_INET_H) +check_include_file_concat("fcntl.h" HAVE_FCNTL_H) +check_include_file_concat("ifaddrs.h" HAVE_IFADDRS_H) +check_include_file_concat("io.h" HAVE_IO_H) +check_include_file_concat("libgen.h" HAVE_LIBGEN_H) +check_include_file_concat("locale.h" HAVE_LOCALE_H) +check_include_file_concat("net/if.h" HAVE_NET_IF_H) +check_include_file_concat("netdb.h" HAVE_NETDB_H) +check_include_file_concat("netinet/in.h" HAVE_NETINET_IN_H) +check_include_file_concat("netinet/tcp.h" HAVE_NETINET_TCP_H) +check_include_file_concat("netinet/udp.h" HAVE_NETINET_UDP_H) +check_include_file("linux/tcp.h" HAVE_LINUX_TCP_H) + +check_include_file_concat("poll.h" HAVE_POLL_H) +check_include_file_concat("pwd.h" HAVE_PWD_H) +check_include_file_concat("stdatomic.h" HAVE_STDATOMIC_H) +check_include_file_concat("stdbool.h" HAVE_STDBOOL_H) +check_include_file_concat("strings.h" HAVE_STRINGS_H) +check_include_file_concat("stropts.h" HAVE_STROPTS_H) +check_include_file_concat("termio.h" HAVE_TERMIO_H) +check_include_file_concat("termios.h" HAVE_TERMIOS_H) +check_include_file_concat("unistd.h" HAVE_UNISTD_H) +check_include_file_concat("utime.h" HAVE_UTIME_H) + +check_type_size(size_t SIZEOF_SIZE_T) +check_type_size(ssize_t SIZEOF_SSIZE_T) +check_type_size("long long" SIZEOF_LONG_LONG) +check_type_size("long" SIZEOF_LONG) +check_type_size("int" SIZEOF_INT) +check_type_size("__int64" SIZEOF___INT64) +check_type_size("time_t" SIZEOF_TIME_T) +check_type_size("suseconds_t" SIZEOF_SUSECONDS_T) +if(NOT HAVE_SIZEOF_SSIZE_T) + if(SIZEOF_LONG EQUAL SIZEOF_SIZE_T) + set(ssize_t long) + endif() + if(NOT ssize_t AND SIZEOF___INT64 EQUAL SIZEOF_SIZE_T) + set(ssize_t __int64) + endif() +endif() +# off_t is sized later, after the HAVE_FILE_OFFSET_BITS test + +if(SIZEOF_LONG_LONG) + set(HAVE_LONGLONG 1) +endif() +if(SIZEOF_SUSECONDS_T) + set(HAVE_SUSECONDS_T 1) +endif() + +if(NOT CMAKE_CROSSCOMPILING) + find_file(RANDOM_FILE urandom /dev) + mark_as_advanced(RANDOM_FILE) +endif() + +# Check for some functions that are used +if(WIN32) + set(CMAKE_REQUIRED_LIBRARIES ws2_32) +elseif(HAVE_LIBSOCKET) + set(CMAKE_REQUIRED_LIBRARIES socket) +endif() + +check_symbol_exists(fnmatch "${CURL_INCLUDES};fnmatch.h" HAVE_FNMATCH) +check_symbol_exists(basename "${CURL_INCLUDES};string.h" HAVE_BASENAME) +check_symbol_exists(socket "${CURL_INCLUDES}" HAVE_SOCKET) +check_symbol_exists(sched_yield "${CURL_INCLUDES};sched.h" HAVE_SCHED_YIELD) +check_symbol_exists(socketpair "${CURL_INCLUDES}" HAVE_SOCKETPAIR) +check_symbol_exists(recv "${CURL_INCLUDES}" HAVE_RECV) +check_symbol_exists(send "${CURL_INCLUDES}" HAVE_SEND) +check_symbol_exists(sendmsg "${CURL_INCLUDES}" HAVE_SENDMSG) +check_symbol_exists(select "${CURL_INCLUDES}" HAVE_SELECT) +check_symbol_exists(strdup "${CURL_INCLUDES};string.h" HAVE_STRDUP) +check_symbol_exists(strtok_r "${CURL_INCLUDES};string.h" HAVE_STRTOK_R) +check_symbol_exists(strcasecmp "${CURL_INCLUDES};string.h" HAVE_STRCASECMP) +check_symbol_exists(stricmp "${CURL_INCLUDES};string.h" HAVE_STRICMP) +check_symbol_exists(strcmpi "${CURL_INCLUDES};string.h" HAVE_STRCMPI) +check_symbol_exists(memrchr "${CURL_INCLUDES};string.h" HAVE_MEMRCHR) +check_symbol_exists(alarm "${CURL_INCLUDES}" HAVE_ALARM) +check_symbol_exists(arc4random "${CURL_INCLUDES};stdlib.h" HAVE_ARC4RANDOM) +check_symbol_exists(fcntl "${CURL_INCLUDES}" HAVE_FCNTL) +check_symbol_exists(getppid "${CURL_INCLUDES}" HAVE_GETPPID) +check_symbol_exists(utimes "${CURL_INCLUDES}" HAVE_UTIMES) + +check_symbol_exists(gettimeofday "${CURL_INCLUDES}" HAVE_GETTIMEOFDAY) +check_symbol_exists(closesocket "${CURL_INCLUDES}" HAVE_CLOSESOCKET) +check_symbol_exists(sigsetjmp "${CURL_INCLUDES};setjmp.h" HAVE_SIGSETJMP) +check_symbol_exists(getpass_r "${CURL_INCLUDES}" HAVE_GETPASS_R) +check_symbol_exists(getpwuid "${CURL_INCLUDES}" HAVE_GETPWUID) +check_symbol_exists(getpwuid_r "${CURL_INCLUDES}" HAVE_GETPWUID_R) +check_symbol_exists(geteuid "${CURL_INCLUDES}" HAVE_GETEUID) +check_symbol_exists(utime "${CURL_INCLUDES}" HAVE_UTIME) +check_symbol_exists(gmtime_r "${CURL_INCLUDES};stdlib.h;time.h" HAVE_GMTIME_R) + +check_symbol_exists(gethostbyname_r "${CURL_INCLUDES}" HAVE_GETHOSTBYNAME_R) + +check_symbol_exists(signal "${CURL_INCLUDES};signal.h" HAVE_SIGNAL) +check_symbol_exists(strtoll "${CURL_INCLUDES};stdlib.h" HAVE_STRTOLL) +check_symbol_exists(strerror_r "${CURL_INCLUDES};stdlib.h;string.h" HAVE_STRERROR_R) +check_symbol_exists(sigaction "signal.h" HAVE_SIGACTION) +check_symbol_exists(siginterrupt "${CURL_INCLUDES};signal.h" HAVE_SIGINTERRUPT) +check_symbol_exists(getaddrinfo "${CURL_INCLUDES};stdlib.h;string.h" HAVE_GETADDRINFO) +check_symbol_exists(getifaddrs "${CURL_INCLUDES};stdlib.h" HAVE_GETIFADDRS) +check_symbol_exists(freeaddrinfo "${CURL_INCLUDES}" HAVE_FREEADDRINFO) +check_symbol_exists(pipe "${CURL_INCLUDES}" HAVE_PIPE) +check_symbol_exists(ftruncate "${CURL_INCLUDES}" HAVE_FTRUNCATE) +check_symbol_exists(fseeko "${CURL_INCLUDES};stdio.h" HAVE_FSEEKO) +check_symbol_exists(_fseeki64 "${CURL_INCLUDES};stdio.h" HAVE__FSEEKI64) +check_symbol_exists(getpeername "${CURL_INCLUDES}" HAVE_GETPEERNAME) +check_symbol_exists(getsockname "${CURL_INCLUDES}" HAVE_GETSOCKNAME) +check_symbol_exists(if_nametoindex "${CURL_INCLUDES}" HAVE_IF_NAMETOINDEX) +check_symbol_exists(getrlimit "${CURL_INCLUDES}" HAVE_GETRLIMIT) +check_symbol_exists(setlocale "${CURL_INCLUDES}" HAVE_SETLOCALE) +check_symbol_exists(setmode "${CURL_INCLUDES}" HAVE_SETMODE) +check_symbol_exists(setrlimit "${CURL_INCLUDES}" HAVE_SETRLIMIT) + +if(HAVE_FSEEKO) + set(HAVE_DECL_FSEEKO 1) +endif() + +if(NOT MSVC OR (MSVC_VERSION GREATER_EQUAL 1900)) + # earlier MSVC compilers had faulty snprintf implementations + check_symbol_exists(snprintf "stdio.h" HAVE_SNPRINTF) +endif() +check_function_exists(mach_absolute_time HAVE_MACH_ABSOLUTE_TIME) +check_symbol_exists(inet_ntop "${CURL_INCLUDES};stdlib.h;string.h" HAVE_INET_NTOP) +if(MSVC AND (MSVC_VERSION LESS_EQUAL 1600)) + set(HAVE_INET_NTOP OFF) +endif() +check_symbol_exists(inet_pton "${CURL_INCLUDES};stdlib.h;string.h" HAVE_INET_PTON) + +check_symbol_exists(fsetxattr "${CURL_INCLUDES}" HAVE_FSETXATTR) +if(HAVE_FSETXATTR) + foreach(CURL_TEST HAVE_FSETXATTR_5 HAVE_FSETXATTR_6) + curl_internal_test(${CURL_TEST}) + endforeach() +endif() + +set(CMAKE_EXTRA_INCLUDE_FILES "sys/socket.h") +check_type_size("sa_family_t" SIZEOF_SA_FAMILY_T) +set(HAVE_SA_FAMILY_T ${HAVE_SIZEOF_SA_FAMILY_T}) +set(CMAKE_EXTRA_INCLUDE_FILES "") + +if(WIN32) + set(CMAKE_EXTRA_INCLUDE_FILES "ws2def.h") + check_type_size("ADDRESS_FAMILY" SIZEOF_ADDRESS_FAMILY) + set(HAVE_ADDRESS_FAMILY ${HAVE_SIZEOF_ADDRESS_FAMILY}) + set(CMAKE_EXTRA_INCLUDE_FILES "") +endif() + +# Do curl specific tests +foreach(CURL_TEST + HAVE_FCNTL_O_NONBLOCK + HAVE_IOCTLSOCKET + HAVE_IOCTLSOCKET_CAMEL + HAVE_IOCTLSOCKET_CAMEL_FIONBIO + HAVE_IOCTLSOCKET_FIONBIO + HAVE_IOCTL_FIONBIO + HAVE_IOCTL_SIOCGIFADDR + HAVE_SETSOCKOPT_SO_NONBLOCK + HAVE_O_NONBLOCK + HAVE_GETHOSTBYNAME_R_3 + HAVE_GETHOSTBYNAME_R_5 + HAVE_GETHOSTBYNAME_R_6 + HAVE_GETHOSTBYNAME_R_3_REENTRANT + HAVE_GETHOSTBYNAME_R_5_REENTRANT + HAVE_GETHOSTBYNAME_R_6_REENTRANT + HAVE_IN_ADDR_T + HAVE_BOOL_T + STDC_HEADERS + HAVE_FILE_OFFSET_BITS + HAVE_ATOMIC + ) + curl_internal_test(${CURL_TEST}) +endforeach() + +if(HAVE_FILE_OFFSET_BITS) + set(_FILE_OFFSET_BITS 64) + set(CMAKE_REQUIRED_FLAGS "-D_FILE_OFFSET_BITS=64") +endif() +check_type_size("off_t" SIZEOF_OFF_T) + +# include this header to get the type +set(CMAKE_REQUIRED_INCLUDES "${CURL_SOURCE_DIR}/include") +set(CMAKE_EXTRA_INCLUDE_FILES "curl/system.h") +check_type_size("curl_off_t" SIZEOF_CURL_OFF_T) +set(CMAKE_EXTRA_INCLUDE_FILES "curl/curl.h") +check_type_size("curl_socket_t" SIZEOF_CURL_SOCKET_T) +set(CMAKE_EXTRA_INCLUDE_FILES "") + +if(NOT WIN32 AND NOT CMAKE_CROSSCOMPILING) + # on not-Windows and not-crosscompiling, check for writable argv[] + include(CheckCSourceRuns) + check_c_source_runs(" + int main(int argc, char **argv) + { + (void)argc; + argv[0][0] = ' '; + return (argv[0][0] == ' ')?0:1; + }" HAVE_WRITABLE_ARGV) +endif() + +set(CMAKE_REQUIRED_FLAGS) + +option(ENABLE_WEBSOCKETS "Set to ON to enable EXPERIMENTAL websockets" OFF) + +if(ENABLE_WEBSOCKETS) + if(${SIZEOF_CURL_OFF_T} GREATER "4") + set(USE_WEBSOCKETS ON) + else() + message(WARNING "curl_off_t is too small to enable WebSockets") + endif() +endif() + +foreach(CURL_TEST + HAVE_GLIBC_STRERROR_R + HAVE_POSIX_STRERROR_R + ) + curl_internal_test(${CURL_TEST}) +endforeach() + +# Check for reentrant +foreach(CURL_TEST + HAVE_GETHOSTBYNAME_R_3 + HAVE_GETHOSTBYNAME_R_5 + HAVE_GETHOSTBYNAME_R_6) + if(NOT ${CURL_TEST}) + if(${CURL_TEST}_REENTRANT) + set(NEED_REENTRANT 1) + endif() + endif() +endforeach() + +if(NEED_REENTRANT) + foreach(CURL_TEST + HAVE_GETHOSTBYNAME_R_3 + HAVE_GETHOSTBYNAME_R_5 + HAVE_GETHOSTBYNAME_R_6) + set(${CURL_TEST} 0) + if(${CURL_TEST}_REENTRANT) + set(${CURL_TEST} 1) + endif() + endforeach() +endif() + +if(NOT WIN32) + # Check clock_gettime(CLOCK_MONOTONIC, x) support + curl_internal_test(HAVE_CLOCK_GETTIME_MONOTONIC) +endif() + +# Check compiler support of __builtin_available() +curl_internal_test(HAVE_BUILTIN_AVAILABLE) + +# Some other minor tests + +if(NOT HAVE_IN_ADDR_T) + set(in_addr_t "unsigned long") +endif() + +# Check for nonblocking +set(HAVE_DISABLED_NONBLOCKING 1) +if(HAVE_FIONBIO OR + HAVE_IOCTLSOCKET OR + HAVE_IOCTLSOCKET_CASE OR + HAVE_O_NONBLOCK) + set(HAVE_DISABLED_NONBLOCKING) +endif() + +if(CMAKE_COMPILER_IS_GNUCC AND APPLE) + include(CheckCCompilerFlag) + check_c_compiler_flag(-Wno-long-double HAVE_C_FLAG_Wno_long_double) + if(HAVE_C_FLAG_Wno_long_double) + # The Mac version of GCC warns about use of long double. Disable it. + get_source_file_property(MPRINTF_COMPILE_FLAGS mprintf.c COMPILE_FLAGS) + if(MPRINTF_COMPILE_FLAGS) + set(MPRINTF_COMPILE_FLAGS "${MPRINTF_COMPILE_FLAGS} -Wno-long-double") + else() + set(MPRINTF_COMPILE_FLAGS "-Wno-long-double") + endif() + set_source_files_properties(mprintf.c PROPERTIES + COMPILE_FLAGS ${MPRINTF_COMPILE_FLAGS}) + endif() +endif() + +# TODO test which of these headers are required +if(WIN32) + set(CURL_PULL_WS2TCPIP_H ${HAVE_WS2TCPIP_H}) +else() + set(CURL_PULL_SYS_TYPES_H ${HAVE_SYS_TYPES_H}) + set(CURL_PULL_SYS_SOCKET_H ${HAVE_SYS_SOCKET_H}) + set(CURL_PULL_SYS_POLL_H ${HAVE_SYS_POLL_H}) +endif() + +include(CMake/OtherTests.cmake) + +add_definitions(-DHAVE_CONFIG_H) + +# For Windows, all compilers used by CMake should support large files +if(WIN32) + set(USE_WIN32_LARGE_FILES ON) + + # Use the manifest embedded in the Windows Resource + set(CMAKE_RC_FLAGS "${CMAKE_RC_FLAGS} -DCURL_EMBED_MANIFEST") + + # We use crypto functions that are not available for UWP apps + if(NOT WINDOWS_STORE) + set(USE_WIN32_CRYPTO ON) + endif() + + # Link required libraries for USE_WIN32_CRYPTO or USE_SCHANNEL + if(USE_WIN32_CRYPTO OR USE_SCHANNEL) + list(APPEND CURL_LIBS "advapi32" "crypt32") + endif() +endif() + +if(MSVC) + # Disable default manifest added by CMake + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} /MANIFEST:NO") + + add_definitions(-D_CRT_SECURE_NO_DEPRECATE -D_CRT_NONSTDC_NO_DEPRECATE) + if(CMAKE_C_FLAGS MATCHES "/W[0-4]") + string(REGEX REPLACE "/W[0-4]" "/W4" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}") + else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W4") + endif() + + # Use multithreaded compilation on VS 2008+ + if(MSVC_VERSION GREATER_EQUAL 1500) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /MP") + endif() +endif() + +if(CURL_WERROR) + if(MSVC_VERSION) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /WX") + else() + # this assumes clang or gcc style options + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Werror") + endif() +endif() + +if(CURL_LTO) + if(CMAKE_VERSION VERSION_LESS 3.9) + message(FATAL_ERROR "Requested LTO but your cmake version ${CMAKE_VERSION} is to old. You need at least 3.9") + endif() + + cmake_policy(SET CMP0069 NEW) + + include(CheckIPOSupported) + check_ipo_supported(RESULT CURL_HAS_LTO OUTPUT CURL_LTO_ERROR LANGUAGES C) + if(CURL_HAS_LTO) + message(STATUS "LTO supported and enabled") + else() + message(FATAL_ERROR "LTO was requested - but compiler doesn't support it\n${CURL_LTO_ERROR}") + endif() +endif() + + +# Ugly (but functional) way to include "Makefile.inc" by transforming it (= regenerate it). +function(transform_makefile_inc INPUT_FILE OUTPUT_FILE) + file(READ ${INPUT_FILE} MAKEFILE_INC_TEXT) + string(REPLACE "$(top_srcdir)" "\${CURL_SOURCE_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + string(REPLACE "$(top_builddir)" "\${CURL_BINARY_DIR}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + + string(REGEX REPLACE "\\\\\n" "!Ï€!α!" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + string(REGEX REPLACE "([a-zA-Z_][a-zA-Z0-9_]*)[\t ]*=[\t ]*([^\n]*)" "SET(\\1 \\2)" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + string(REPLACE "!Ï€!α!" "\n" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) + + string(REGEX REPLACE "\\$\\(([a-zA-Z_][a-zA-Z0-9_]*)\\)" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace $() with ${} + string(REGEX REPLACE "@([a-zA-Z_][a-zA-Z0-9_]*)@" "\${\\1}" MAKEFILE_INC_TEXT ${MAKEFILE_INC_TEXT}) # Replace @@ with ${}, even if that may not be read by CMake scripts. + file(WRITE ${OUTPUT_FILE} ${MAKEFILE_INC_TEXT}) + set_property(DIRECTORY APPEND PROPERTY CMAKE_CONFIGURE_DEPENDS "${INPUT_FILE}") +endfunction() + +include(GNUInstallDirs) + +set(CURL_INSTALL_CMAKE_DIR ${CMAKE_INSTALL_LIBDIR}/cmake/${PROJECT_NAME}) +set(TARGETS_EXPORT_NAME "${PROJECT_NAME}Targets") +set(generated_dir "${CMAKE_CURRENT_BINARY_DIR}/generated") +set(project_config "${generated_dir}/${PROJECT_NAME}Config.cmake") +set(version_config "${generated_dir}/${PROJECT_NAME}ConfigVersion.cmake") + +if(USE_MANUAL) + add_subdirectory(docs) +endif() + +add_subdirectory(lib) + +if(BUILD_CURL_EXE) + add_subdirectory(src) +endif() + +cmake_dependent_option(BUILD_TESTING "Build tests" + ON "PERL_FOUND;NOT CURL_DISABLE_TESTS" + OFF) +if(BUILD_TESTING) + add_subdirectory(tests) +endif() + +if(NOT CURL_DISABLE_INSTALL) + + # Helper to populate a list (_items) with a label when conditions (the remaining + # args) are satisfied + macro(_add_if label) + # needs to be a macro to allow this indirection + if(${ARGN}) + set(_items ${_items} "${label}") + endif() + endmacro() + + # NTLM support requires crypto function adaptions from various SSL libs + # TODO alternative SSL libs tests for SSP1, GnuTLS, NSS + if(NOT (CURL_DISABLE_NTLM) AND + (USE_OPENSSL OR USE_MBEDTLS OR USE_DARWINSSL OR USE_WIN32_CRYPTO OR USE_GNUTLS)) + set(use_curl_ntlm_core ON) + endif() + + # Clear list and try to detect available features + set(_items) + _add_if("SSL" SSL_ENABLED) + _add_if("IPv6" ENABLE_IPV6) + _add_if("UnixSockets" USE_UNIX_SOCKETS) + _add_if("libz" HAVE_LIBZ) + _add_if("brotli" HAVE_BROTLI) + _add_if("zstd" HAVE_ZSTD) + _add_if("AsynchDNS" USE_ARES OR USE_THREADS_POSIX OR USE_THREADS_WIN32) + _add_if("IDN" HAVE_LIBIDN2 OR USE_WIN32_IDN) + _add_if("Largefile" (SIZEOF_CURL_OFF_T GREATER 4) AND + ((SIZEOF_OFF_T GREATER 4) OR USE_WIN32_LARGE_FILES)) + # TODO SSP1 (Schannel) check is missing + _add_if("SSPI" USE_WINDOWS_SSPI) + _add_if("GSS-API" HAVE_GSSAPI) + _add_if("alt-svc" NOT CURL_DISABLE_ALTSVC) + _add_if("HSTS" NOT CURL_DISABLE_HSTS) + # TODO SSP1 missing for SPNEGO + _add_if("SPNEGO" NOT CURL_DISABLE_NEGOTIATE_AUTH AND + (HAVE_GSSAPI OR USE_WINDOWS_SSPI)) + _add_if("Kerberos" NOT CURL_DISABLE_KERBEROS_AUTH AND + (HAVE_GSSAPI OR USE_WINDOWS_SSPI)) + # NTLM support requires crypto function adaptions from various SSL libs + # TODO alternative SSL libs tests for SSP1, GnuTLS, NSS + _add_if("NTLM" NOT (CURL_DISABLE_NTLM) AND + (use_curl_ntlm_core OR USE_WINDOWS_SSPI)) + # TODO missing option (autoconf: --enable-ntlm-wb) + _add_if("NTLM_WB" NOT (CURL_DISABLE_NTLM) AND + (use_curl_ntlm_core OR USE_WINDOWS_SSPI) AND + NOT CURL_DISABLE_HTTP AND NTLM_WB_ENABLED) + _add_if("TLS-SRP" USE_TLS_SRP) + # TODO option --with-nghttp2 tests for nghttp2 lib and nghttp2/nghttp2.h header + _add_if("HTTP2" USE_NGHTTP2) + _add_if("HTTP3" USE_NGTCP2 OR USE_QUICHE) + _add_if("MultiSSL" CURL_WITH_MULTI_SSL) + # TODO wolfSSL only support this from v5.0.0 onwards + _add_if("HTTPS-proxy" SSL_ENABLED AND (USE_OPENSSL OR USE_GNUTLS + OR USE_SCHANNEL OR USE_RUSTLS OR USE_BEARSSL OR + USE_MBEDTLS OR USE_SECTRANSP)) + _add_if("unicode" ENABLE_UNICODE) + _add_if("threadsafe" HAVE_ATOMIC OR + (USE_THREADS_POSIX AND HAVE_PTHREAD_H) OR + (WIN32 AND HAVE_WIN32_WINNT GREATER_EQUAL 0x600)) + _add_if("PSL" USE_LIBPSL) + string(REPLACE ";" " " SUPPORT_FEATURES "${_items}") + message(STATUS "Enabled features: ${SUPPORT_FEATURES}") + + # Clear list and try to detect available protocols + set(_items) + _add_if("HTTP" NOT CURL_DISABLE_HTTP) + _add_if("HTTPS" NOT CURL_DISABLE_HTTP AND SSL_ENABLED) + _add_if("FTP" NOT CURL_DISABLE_FTP) + _add_if("FTPS" NOT CURL_DISABLE_FTP AND SSL_ENABLED) + _add_if("FILE" NOT CURL_DISABLE_FILE) + _add_if("TELNET" NOT CURL_DISABLE_TELNET) + _add_if("LDAP" NOT CURL_DISABLE_LDAP) + # CURL_DISABLE_LDAP implies CURL_DISABLE_LDAPS + _add_if("LDAPS" NOT CURL_DISABLE_LDAPS AND + ((USE_OPENLDAP AND SSL_ENABLED) OR + (NOT USE_OPENLDAP AND HAVE_LDAP_SSL))) + _add_if("DICT" NOT CURL_DISABLE_DICT) + _add_if("TFTP" NOT CURL_DISABLE_TFTP) + _add_if("GOPHER" NOT CURL_DISABLE_GOPHER) + _add_if("GOPHERS" NOT CURL_DISABLE_GOPHER AND SSL_ENABLED) + _add_if("POP3" NOT CURL_DISABLE_POP3) + _add_if("POP3S" NOT CURL_DISABLE_POP3 AND SSL_ENABLED) + _add_if("IMAP" NOT CURL_DISABLE_IMAP) + _add_if("IMAPS" NOT CURL_DISABLE_IMAP AND SSL_ENABLED) + _add_if("SMB" NOT CURL_DISABLE_SMB AND + use_curl_ntlm_core AND (SIZEOF_CURL_OFF_T GREATER 4)) + _add_if("SMBS" NOT CURL_DISABLE_SMB AND SSL_ENABLED AND + use_curl_ntlm_core AND (SIZEOF_CURL_OFF_T GREATER 4)) + _add_if("SMTP" NOT CURL_DISABLE_SMTP) + _add_if("SMTPS" NOT CURL_DISABLE_SMTP AND SSL_ENABLED) + _add_if("SCP" USE_LIBSSH2 OR USE_LIBSSH) + _add_if("SFTP" USE_LIBSSH2 OR USE_LIBSSH) + _add_if("RTSP" NOT CURL_DISABLE_RTSP) + _add_if("RTMP" USE_LIBRTMP) + _add_if("MQTT" NOT CURL_DISABLE_MQTT) + _add_if("WS" USE_WEBSOCKETS) + _add_if("WSS" USE_WEBSOCKETS) + if(_items) + list(SORT _items) + endif() + string(REPLACE ";" " " SUPPORT_PROTOCOLS "${_items}") + message(STATUS "Enabled protocols: ${SUPPORT_PROTOCOLS}") + + # Clear list and collect SSL backends + set(_items) + _add_if("Schannel" SSL_ENABLED AND USE_SCHANNEL) + _add_if("OpenSSL" SSL_ENABLED AND USE_OPENSSL) + _add_if("Secure Transport" SSL_ENABLED AND USE_SECTRANSP) + _add_if("mbedTLS" SSL_ENABLED AND USE_MBEDTLS) + _add_if("BearSSL" SSL_ENABLED AND USE_BEARSSL) + _add_if("wolfSSL" SSL_ENABLED AND USE_WOLFSSL) + _add_if("GnuTLS" SSL_ENABLED AND USE_GNUTLS) + + if(_items) + list(SORT _items) + endif() + string(REPLACE ";" " " SSL_BACKENDS "${_items}") + message(STATUS "Enabled SSL backends: ${SSL_BACKENDS}") + if(CURL_DEFAULT_SSL_BACKEND) + message(STATUS "Default SSL backend: ${CURL_DEFAULT_SSL_BACKEND}") + endif() + + # curl-config needs the following options to be set. + set(CC "${CMAKE_C_COMPILER}") + # TODO probably put a -D... options here? + set(CONFIGURE_OPTIONS "") + set(CURLVERSION "${CURL_VERSION}") + set(exec_prefix "\${prefix}") + set(includedir "\${prefix}/include") + set(LDFLAGS "${CMAKE_SHARED_LINKER_FLAGS}") + set(LIBCURL_LIBS "") + set(libdir "${CMAKE_INSTALL_PREFIX}/lib") + foreach(_lib ${CMAKE_C_IMPLICIT_LINK_LIBRARIES} ${CURL_LIBS}) + if(TARGET "${_lib}") + set(_libname "${_lib}") + get_target_property(_imported "${_libname}" IMPORTED) + if(NOT _imported) + # Reading the LOCATION property on non-imported target will error out. + # Assume the user won't need this information in the .pc file. + continue() + endif() + get_target_property(_lib "${_libname}" LOCATION) + if(NOT _lib) + message(WARNING "Bad lib in library list: ${_libname}") + continue() + endif() + endif() + if(_lib MATCHES ".*/.*" OR _lib MATCHES "^-") + set(LIBCURL_LIBS "${LIBCURL_LIBS} ${_lib}") + else() + set(LIBCURL_LIBS "${LIBCURL_LIBS} -l${_lib}") + endif() + endforeach() + if(BUILD_SHARED_LIBS) + set(ENABLE_SHARED "yes") + set(LIBCURL_NO_SHARED "") + set(CPPFLAG_CURL_STATICLIB "") + else() + set(ENABLE_SHARED "no") + set(LIBCURL_NO_SHARED "${LIBCURL_LIBS}") + set(CPPFLAG_CURL_STATICLIB "-DCURL_STATICLIB") + endif() + if(BUILD_STATIC_LIBS) + set(ENABLE_STATIC "yes") + else() + set(ENABLE_STATIC "no") + endif() + # "a" (Linux) or "lib" (Windows) + string(REPLACE "." "" libext "${CMAKE_STATIC_LIBRARY_SUFFIX}") + set(prefix "${CMAKE_INSTALL_PREFIX}") + # Set this to "yes" to append all libraries on which -lcurl is dependent + set(REQUIRE_LIB_DEPS "no") + # SUPPORT_FEATURES + # SUPPORT_PROTOCOLS + set(VERSIONNUM "${CURL_VERSION_NUM}") + + # Finally generate a "curl-config" matching this config + # Use: + # * ENABLE_SHARED + # * ENABLE_STATIC + configure_file("${CURL_SOURCE_DIR}/curl-config.in" + "${CURL_BINARY_DIR}/curl-config" @ONLY) + install(FILES "${CURL_BINARY_DIR}/curl-config" + DESTINATION ${CMAKE_INSTALL_BINDIR} + PERMISSIONS + OWNER_READ OWNER_WRITE OWNER_EXECUTE + GROUP_READ GROUP_EXECUTE + WORLD_READ WORLD_EXECUTE) + + # Finally generate a pkg-config file matching this config + configure_file("${CURL_SOURCE_DIR}/libcurl.pc.in" + "${CURL_BINARY_DIR}/libcurl.pc" @ONLY) + install(FILES "${CURL_BINARY_DIR}/libcurl.pc" + DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + + # install headers + install(DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/include/curl" + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + FILES_MATCHING PATTERN "*.h") + + include(CMakePackageConfigHelpers) + write_basic_package_version_file( + "${version_config}" + VERSION ${CURL_VERSION} + COMPATIBILITY SameMajorVersion + ) + file(READ "${version_config}" generated_version_config) + file(WRITE "${version_config}" + "if(NOT PACKAGE_FIND_VERSION_RANGE AND PACKAGE_FIND_VERSION_MAJOR STREQUAL \"7\") + # Version 8 satisfies version 7... requirements + set(PACKAGE_FIND_VERSION_MAJOR 8) + set(PACKAGE_FIND_VERSION_COUNT 1) + endif() + ${generated_version_config}" + ) + + # Use: + # * TARGETS_EXPORT_NAME + # * PROJECT_NAME + configure_package_config_file(CMake/curl-config.cmake.in + "${project_config}" + INSTALL_DESTINATION ${CURL_INSTALL_CMAKE_DIR} + ) + + if(CURL_ENABLE_EXPORT_TARGET) + install( + EXPORT "${TARGETS_EXPORT_NAME}" + NAMESPACE "${PROJECT_NAME}::" + DESTINATION ${CURL_INSTALL_CMAKE_DIR} + ) + endif() + + install( + FILES ${version_config} ${project_config} + DESTINATION ${CURL_INSTALL_CMAKE_DIR} + ) + + # Workaround for MSVS10 to avoid the Dialog Hell + # FIXME: This could be removed with future version of CMake. + if(MSVC_VERSION EQUAL 1600) + set(CURL_SLN_FILENAME "${CMAKE_CURRENT_BINARY_DIR}/CURL.sln") + if(EXISTS "${CURL_SLN_FILENAME}") + file(APPEND "${CURL_SLN_FILENAME}" "\n# This should be regenerated!\n") + endif() + endif() + + if(NOT TARGET curl_uninstall) + configure_file( + ${CMAKE_CURRENT_SOURCE_DIR}/CMake/cmake_uninstall.cmake.in + ${CMAKE_CURRENT_BINARY_DIR}/CMake/cmake_uninstall.cmake + IMMEDIATE @ONLY) + + add_custom_target(curl_uninstall + COMMAND ${CMAKE_COMMAND} -P + ${CMAKE_CURRENT_BINARY_DIR}/CMake/cmake_uninstall.cmake) + endif() +endif() diff --git a/deps/curl/COPYING b/deps/curl/COPYING new file mode 100644 index 0000000..d1eab3e --- /dev/null +++ b/deps/curl/COPYING @@ -0,0 +1,22 @@ +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2023, Daniel Stenberg, , and many +contributors, see the THANKS file. + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. diff --git a/deps/curl/GIT-INFO b/deps/curl/GIT-INFO new file mode 100644 index 0000000..62efbd9 --- /dev/null +++ b/deps/curl/GIT-INFO @@ -0,0 +1,44 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + +GIT-INFO + +This file is only present in git - never in release archives. It contains +information about other files and things that the git repository keeps in its +inner sanctum. + +To build in environments that support configure, after having extracted +everything from git, do this: + +autoreconf -fi +./configure --with-openssl +make + + Daniel uses a ./configure line similar to this for easier development: + + ./configure --disable-shared --enable-debug --enable-maintainer-mode + +In environments that don't support configure (i.e. Microsoft), do this: + +buildconf.bat + + +REQUIREMENTS + +For autoreconf and configure (not buildconf.bat) to work, you need the +following software installed: + + o autoconf 2.57 (or later) + o automake 1.7 (or later) + o libtool 1.4.2 (or later) + o GNU m4 (required by autoconf) + + o nroff + perl + + If you don't have nroff and perl and you for some reason don't want to + install them, you can rename the source file src/tool_hugehelp.c.cvs to + src/tool_hugehelp.c and avoid having to generate this file. This will + give you a stubbed version of the file that doesn't contain actual content. diff --git a/deps/curl/LICENSES/BSD-3-Clause.txt b/deps/curl/LICENSES/BSD-3-Clause.txt new file mode 100644 index 0000000..086d399 --- /dev/null +++ b/deps/curl/LICENSES/BSD-3-Clause.txt @@ -0,0 +1,11 @@ +Copyright (c) . + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/deps/curl/LICENSES/BSD-4-Clause-UC.txt b/deps/curl/LICENSES/BSD-4-Clause-UC.txt new file mode 100644 index 0000000..69edbe3 --- /dev/null +++ b/deps/curl/LICENSES/BSD-4-Clause-UC.txt @@ -0,0 +1,15 @@ +BSD-4-Clause (University of California-Specific) + +Copyright [various years] The Regents of the University of California. All rights reserved. + +Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: + +1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. + +3. All advertising materials mentioning features or use of this software must display the following acknowledgement: This product includes software developed by the University of California, Berkeley and its contributors. + +4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/deps/curl/LICENSES/ISC.txt b/deps/curl/LICENSES/ISC.txt new file mode 100644 index 0000000..60f60bf --- /dev/null +++ b/deps/curl/LICENSES/ISC.txt @@ -0,0 +1,12 @@ +Permission to use, copy, modify, and distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND INTERNET SOFTWARE CONSORTIUM +DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL +INTERNET SOFTWARE CONSORTIUM BE LIABLE FOR ANY SPECIAL, DIRECT, +INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING +FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, +NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION +WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. diff --git a/deps/curl/LICENSES/curl.txt b/deps/curl/LICENSES/curl.txt new file mode 100644 index 0000000..3c1c197 --- /dev/null +++ b/deps/curl/LICENSES/curl.txt @@ -0,0 +1,22 @@ +COPYRIGHT AND PERMISSION NOTICE + +Copyright (C) Daniel Stenberg, , and many +contributors, see the THANKS file. + +All rights reserved. + +Permission to use, copy, modify, and distribute this software for any purpose +with or without fee is hereby granted, provided that the above copyright +notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN +NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE +OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not +be used in advertising or otherwise to promote the sale, use or other dealings +in this Software without prior written authorization of the copyright holder. diff --git a/deps/curl/MacOSX-Framework b/deps/curl/MacOSX-Framework new file mode 100644 index 0000000..5ac5376 --- /dev/null +++ b/deps/curl/MacOSX-Framework @@ -0,0 +1,160 @@ +#!/usr/bin/env bash +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# This script performs all of the steps needed to build a +# universal binary libcurl.framework for Mac OS X 10.4 or greater. +# +# Hendrik Visage: +# Generalizations added since Snowleopard (10.6) do not include +# the 10.4u SDK. +# +# Also note: +# 10.5 is the *ONLY* SDK that support PPC64 :( -- 10.6 do not have ppc64 support +#If you need to have PPC64 support then change below to 1 +PPC64_NEEDED=0 +# Apple does not support building for PPC anymore in Xcode 4 and later. +# If you're using Xcode 3 or earlier and need PPC support, then change +# the setting below to 1 +PPC_NEEDED=0 + +# For me the default is to develop for the platform I am on, and if you +#desire compatibility with older versions then change USE_OLD to 1 :) +USE_OLD=0 + +VERSION=`/usr/bin/sed -ne 's/^#define LIBCURL_VERSION "\(.*\)"/\1/p' include/curl/curlver.h` +FRAMEWORK_VERSION=Versions/Release-$VERSION + +#I also wanted to "copy over" the system, and thus the reason I added the +# version to Versions/Release-7.20.1 etc. +# now a simple rsync -vaP libcurl.framework /Library/Frameworks will install it +# and setup the right paths to this version, leaving the system version +# "intact", so you can "fix" it later with the links to Versions/A/... + +DEVELOPER_PATH=`xcode-select --print-path` +# Around Xcode 4.3, SDKs were moved from the Developer folder into the +# MacOSX.platform folder +if test -d "$DEVELOPER_PATH/Platforms/MacOSX.platform/Developer/SDKs"; then + SDK_PATH="$DEVELOPER_PATH/Platforms/MacOSX.platform/Developer/SDKs" +else + SDK_PATH="$DEVELOPER_PATH/SDKs" +fi +OLD_SDK=`ls $SDK_PATH|head -1` +NEW_SDK=`ls -r $SDK_PATH|head -1` + +if test "0"$USE_OLD -gt 0 +then + SDK32=$OLD_SDK +else + SDK32=$NEW_SDK +fi + +MACVER=`echo $SDK32|sed -e s/[a-zA-Z]//g -e s/.\$//` + +SDK32_DIR=$SDK_PATH/$SDK32 +MINVER32='-mmacosx-version-min='$MACVER +if test $PPC_NEEDED -gt 0; then + ARCHES32='-arch i386 -arch ppc' +else + ARCHES32='-arch i386' +fi + +if test $PPC64_NEEDED -gt 0 +then + SDK64=10.5 + ARCHES64='-arch x86_64 -arch ppc64' + SDK64=`ls $SDK_PATH | grep "10\.5" | head -1` +else + ARCHES64='-arch x86_64' + #We "know" that 10.4 and earlier do not support 64bit + OLD_SDK64=`ls $SDK_PATH | grep -v "10\.[0-4]" | head -1` + NEW_SDK64=`ls -r $SDK_PATH | grep -v "10\.[0-4][^0-9]" | head -1` + if test $USE_OLD -gt 0 + then + SDK64=$OLD_SDK64 + else + SDK64=$NEW_SDK64 + fi +fi + +SDK64_DIR=$SDK_PATH/$SDK64 +MACVER64=`echo $SDK64|sed -e s/[a-zA-Z]//g -e s/.\$//` + +MINVER64='-mmacosx-version-min='$MACVER64 + +if test ! -z $SDK32; then + echo "----Configuring libcurl for 32 bit universal framework..." + make clean + ./configure --disable-dependency-tracking --disable-static --with-gssapi --with-secure-transport \ + CFLAGS="-Os -isysroot $SDK32_DIR $ARCHES32" \ + LDFLAGS="-Wl,-syslibroot,$SDK32_DIR $ARCHES32 -Wl,-headerpad_max_install_names" \ + CC=$CC + + echo "----Building 32 bit libcurl..." + make -j `sysctl -n hw.logicalcpu_max` + + echo "----Creating 32 bit framework..." + rm -r libcurl.framework + mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Resources + cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl + install_name_tool -id @rpath/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl + cp lib/libcurl.plist libcurl.framework/${FRAMEWORK_VERSION}/Resources/Info.plist + mkdir -p libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl + cp include/curl/*.h libcurl.framework/${FRAMEWORK_VERSION}/Headers/curl + pushd libcurl.framework + ln -fs ${FRAMEWORK_VERSION}/libcurl libcurl + ln -fs ${FRAMEWORK_VERSION}/Resources Resources + ln -fs ${FRAMEWORK_VERSION}/Headers Headers + cd Versions + ln -fs $(basename "${FRAMEWORK_VERSION}") Current + + echo Testing for SDK64 + if test -d $SDK64_DIR; then + echo entering... + popd + make clean + echo "----Configuring libcurl for 64 bit universal framework..." + ./configure --disable-dependency-tracking --disable-static --with-gssapi --with-secure-transport \ + CFLAGS="-Os -isysroot $SDK64_DIR $ARCHES64" \ + LDFLAGS="-Wl,-syslibroot,$SDK64_DIR $ARCHES64 -Wl,-headerpad_max_install_names" \ + CC=$CC + + echo "----Building 64 bit libcurl..." + make -j `sysctl -n hw.logicalcpu_max` + + echo "----Appending 64 bit framework to 32 bit framework..." + cp lib/.libs/libcurl.dylib libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 + install_name_tool -id @rpath/libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 + cp libcurl.framework/${FRAMEWORK_VERSION}/libcurl libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 + pwd + lipo libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 -create -output libcurl.framework/${FRAMEWORK_VERSION}/libcurl + rm libcurl.framework/${FRAMEWORK_VERSION}/libcurl32 libcurl.framework/${FRAMEWORK_VERSION}/libcurl64 + fi + + pwd + lipo -info libcurl.framework/${FRAMEWORK_VERSION}/libcurl + echo "libcurl.framework is built and can now be included in other projects." + echo "Copy libcurl.framework to your bundle's Contents/Frameworks folder, ~/Library/Frameworks or /Library/Frameworks." +else + echo "Building libcurl.framework requires Mac OS X 10.4 or later with the MacOSX10.4/5/6 SDK installed." +fi diff --git a/deps/curl/Makefile.am b/deps/curl/Makefile.am new file mode 100644 index 0000000..c8afcb5 --- /dev/null +++ b/deps/curl/Makefile.am @@ -0,0 +1,539 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +AUTOMAKE_OPTIONS = foreign + +ACLOCAL_AMFLAGS = -I m4 + +CMAKE_DIST = \ + CMake/cmake_uninstall.cmake.in \ + CMake/CMakeConfigurableFile.in \ + CMake/curl-config.cmake.in \ + CMake/CurlSymbolHiding.cmake \ + CMake/CurlTests.c \ + CMake/FindBearSSL.cmake \ + CMake/FindBrotli.cmake \ + CMake/FindCARES.cmake \ + CMake/FindGSS.cmake \ + CMake/FindLibPSL.cmake \ + CMake/FindLibSSH2.cmake \ + CMake/FindMbedTLS.cmake \ + CMake/FindMSH3.cmake \ + CMake/FindNGHTTP2.cmake \ + CMake/FindNGHTTP3.cmake \ + CMake/FindNGTCP2.cmake \ + CMake/FindQUICHE.cmake \ + CMake/FindWolfSSL.cmake \ + CMake/FindZstd.cmake \ + CMake/Macros.cmake \ + CMake/OtherTests.cmake \ + CMake/PickyWarnings.cmake \ + CMake/Platforms/WindowsCache.cmake \ + CMake/Utilities.cmake \ + CMakeLists.txt + +VC14_LIBTMPL = projects/Windows/VC14/lib/libcurl.tmpl +VC14_LIBVCXPROJ = projects/Windows/VC14/lib/libcurl.vcxproj.dist +VC14_LIBVCXPROJ_DEPS = $(VC14_LIBTMPL) Makefile.am lib/Makefile.inc +VC14_SRCTMPL = projects/Windows/VC14/src/curl.tmpl +VC14_SRCVCXPROJ = projects/Windows/VC14/src/curl.vcxproj.dist +VC14_SRCVCXPROJ_DEPS = $(VC14_SRCTMPL) Makefile.am src/Makefile.inc + +VC14_10_LIBTMPL = projects/Windows/VC14.10/lib/libcurl.tmpl +VC14_10_LIBVCXPROJ = projects/Windows/VC14.10/lib/libcurl.vcxproj.dist +VC14_10_LIBVCXPROJ_DEPS = $(VC14_10_LIBTMPL) Makefile.am lib/Makefile.inc +VC14_10_SRCTMPL = projects/Windows/VC14.10/src/curl.tmpl +VC14_10_SRCVCXPROJ = projects/Windows/VC14.10/src/curl.vcxproj.dist +VC14_10_SRCVCXPROJ_DEPS = $(VC14_10_SRCTMPL) Makefile.am src/Makefile.inc + +VC14_20_LIBTMPL = projects/Windows/VC14.20/lib/libcurl.tmpl +VC14_20_LIBVCXPROJ = projects/Windows/VC14.20/lib/libcurl.vcxproj.dist +VC14_20_LIBVCXPROJ_DEPS = $(VC14_20_LIBTMPL) Makefile.am lib/Makefile.inc +VC14_20_SRCTMPL = projects/Windows/VC14.20/src/curl.tmpl +VC14_20_SRCVCXPROJ = projects/Windows/VC14.20/src/curl.vcxproj.dist +VC14_20_SRCVCXPROJ_DEPS = $(VC14_20_SRCTMPL) Makefile.am src/Makefile.inc + +VC14_30_LIBTMPL = projects/Windows/VC14.30/lib/libcurl.tmpl +VC14_30_LIBVCXPROJ = projects/Windows/VC14.30/lib/libcurl.vcxproj.dist +VC14_30_LIBVCXPROJ_DEPS = $(VC14_30_LIBTMPL) Makefile.am lib/Makefile.inc +VC14_30_SRCTMPL = projects/Windows/VC14.30/src/curl.tmpl +VC14_30_SRCVCXPROJ = projects/Windows/VC14.30/src/curl.vcxproj.dist +VC14_30_SRCVCXPROJ_DEPS = $(VC14_30_SRCTMPL) Makefile.am src/Makefile.inc + +VC_DIST = projects/README.md \ + projects/build-openssl.bat \ + projects/build-wolfssl.bat \ + projects/checksrc.bat \ + projects/Windows/VC14/curl-all.sln \ + projects/Windows/VC14/lib/libcurl.sln \ + projects/Windows/VC14/lib/libcurl.vcxproj.filters \ + projects/Windows/VC14/src/curl.sln \ + projects/Windows/VC14/src/curl.vcxproj.filters \ + projects/Windows/VC14.10/curl-all.sln \ + projects/Windows/VC14.10/lib/libcurl.sln \ + projects/Windows/VC14.10/lib/libcurl.vcxproj.filters \ + projects/Windows/VC14.10/src/curl.sln \ + projects/Windows/VC14.10/src/curl.vcxproj.filters \ + projects/Windows/VC14.20/curl-all.sln \ + projects/Windows/VC14.20/lib/libcurl.sln \ + projects/Windows/VC14.20/lib/libcurl.vcxproj.filters \ + projects/Windows/VC14.20/src/curl.sln \ + projects/Windows/VC14.20/src/curl.vcxproj.filters \ + projects/Windows/VC14.30/curl-all.sln \ + projects/Windows/VC14.30/lib/libcurl.sln \ + projects/Windows/VC14.30/lib/libcurl.vcxproj.filters \ + projects/Windows/VC14.30/src/curl.sln \ + projects/Windows/VC14.30/src/curl.vcxproj.filters \ + projects/generate.bat \ + projects/wolfssl_options.h \ + projects/wolfssl_override.props + +WINBUILD_DIST = winbuild/README.md winbuild/gen_resp_file.bat \ + winbuild/MakefileBuild.vc winbuild/Makefile.vc + +PLAN9_DIST = plan9/include/mkfile \ + plan9/include/mkfile \ + plan9/mkfile.proto \ + plan9/mkfile \ + plan9/README \ + plan9/lib/mkfile.inc \ + plan9/lib/mkfile \ + plan9/src/mkfile.inc \ + plan9/src/mkfile + +EXTRA_DIST = CHANGES COPYING maketgz Makefile.dist curl-config.in \ + RELEASE-NOTES buildconf libcurl.pc.in MacOSX-Framework $(CMAKE_DIST) \ + $(VC_DIST) $(WINBUILD_DIST) $(PLAN9_DIST) lib/libcurl.vers.in buildconf.bat \ + libcurl.def + +CLEANFILES = $(VC14_LIBVCXPROJ) \ + $(VC14_SRCVCXPROJ) $(VC14_10_LIBVCXPROJ) $(VC14_10_SRCVCXPROJ) \ + $(VC14_30_LIBVCXPROJ) $(VC14_30_SRCVCXPROJ) + +bin_SCRIPTS = curl-config + +SUBDIRS = lib src +DIST_SUBDIRS = $(SUBDIRS) tests packages scripts include docs + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libcurl.pc + +# List of files required to generate VC IDE .dsp, .vcproj and .vcxproj files +include lib/Makefile.inc +include src/Makefile.inc + +dist-hook: + rm -rf $(top_builddir)/tests/log + find $(distdir) -name "*.dist" -exec rm {} \; + (distit=`find $(srcdir) -name "*.dist" | grep -v ./ares/`; \ + for file in $$distit; do \ + strip=`echo $$file | sed -e s/^$(srcdir)// -e s/\.dist//`; \ + cp -p $$file $(distdir)$$strip; \ + done) + +html: + cd docs && $(MAKE) html + +pdf: + cd docs && $(MAKE) pdf + +check: test examples check-docs + +if CROSSCOMPILING +test-full: test +test-torture: test + +test: + @echo "NOTICE: we can't run the tests when cross-compiling!" + +else + +test: + @(cd tests; $(MAKE) all quiet-test) + +test-full: + @(cd tests; $(MAKE) all full-test) + +test-nonflaky: + @(cd tests; $(MAKE) all nonflaky-test) + +test-torture: + @(cd tests; $(MAKE) all torture-test) + +test-event: + @(cd tests; $(MAKE) all event-test) + +test-am: + @(cd tests; $(MAKE) all am-test) + +test-ci: + @(cd tests; $(MAKE) all ci-test) + +endif + +examples: + @(cd docs/examples; $(MAKE) check) + +check-docs: + @(cd docs/libcurl; $(MAKE) check) + +# Build source and binary rpms. For rpm-3.0 and above, the ~/.rpmmacros +# must contain the following line: +# %_topdir /home/loic/local/rpm +# and that /home/loic/local/rpm contains the directory SOURCES, BUILD etc. +# +# cd /home/loic/local/rpm ; mkdir -p SOURCES BUILD RPMS/i386 SPECS SRPMS +# +# If additional configure flags are needed to build the package, add the +# following in ~/.rpmmacros +# %configure CFLAGS="%{optflags}" ./configure %{_target_platform} --prefix=%{_prefix} ${AM_CONFIGFLAGS} +# and run make rpm in the following way: +# AM_CONFIGFLAGS='--with-uri=/home/users/loic/local/RedHat-6.2' make rpm +# + +rpms: + $(MAKE) RPMDIST=curl rpm + $(MAKE) RPMDIST=curl-ssl rpm + +rpm: + RPM_TOPDIR=`rpm --showrc | $(PERL) -n -e 'print if(s/.*_topdir\s+(.*)/$$1/)'` ; \ + cp $(srcdir)/packages/Linux/RPM/$(RPMDIST).spec $$RPM_TOPDIR/SPECS ; \ + cp $(PACKAGE)-$(VERSION).tar.gz $$RPM_TOPDIR/SOURCES ; \ + rpm -ba --clean --rmsource $$RPM_TOPDIR/SPECS/$(RPMDIST).spec ; \ + mv $$RPM_TOPDIR/RPMS/i386/$(RPMDIST)-*.rpm . ; \ + mv $$RPM_TOPDIR/SRPMS/$(RPMDIST)-*.src.rpm . + +# +# Build a Solaris pkgadd format file +# run 'make pkgadd' once you've done './configure' and 'make' to make a Solaris pkgadd format +# file (which ends up back in this directory). +# The pkgadd file is in 'pkgtrans' format, so to install on Solaris, do +# pkgadd -d ./HAXXcurl-* +# + +# gak - libtool requires an absolute directory, hence the pwd below... +pkgadd: + umask 022 ; \ + $(MAKE) install DESTDIR=`/bin/pwd`/packages/Solaris/root ; \ + cat COPYING > $(srcdir)/packages/Solaris/copyright ; \ + cd $(srcdir)/packages/Solaris && $(MAKE) package + +# +# Build a cygwin binary tarball installation file +# resulting .tar.bz2 file will end up at packages/Win32/cygwin +cygwinbin: + $(MAKE) -C packages/Win32/cygwin cygwinbin + +# We extend the standard install with a custom hook: +install-data-hook: + (cd include && $(MAKE) install) + (cd docs && $(MAKE) install) + (cd docs/libcurl && $(MAKE) install) + +# We extend the standard uninstall with a custom hook: +uninstall-hook: + (cd include && $(MAKE) uninstall) + (cd docs && $(MAKE) uninstall) + (cd docs/libcurl && $(MAKE) uninstall) + +ca-bundle: $(srcdir)/scripts/mk-ca-bundle.pl + @echo "generating a fresh ca-bundle.crt" + @perl $(srcdir)/scripts/mk-ca-bundle.pl -b -l -u lib/ca-bundle.crt + +ca-firefox: $(srcdir)/scripts/firefox-db2pem.sh + @echo "generating a fresh ca-bundle.crt" + $(srcdir)/scripts/firefox-db2pem.sh lib/ca-bundle.crt + +checksrc: + (cd lib && $(MAKE) checksrc) + (cd src && $(MAKE) checksrc) + (cd tests && $(MAKE) checksrc) + (cd include/curl && $(MAKE) checksrc) + (cd docs/examples && $(MAKE) checksrc) + (cd packages && $(MAKE) checksrc) + +.PHONY: vc-ide + +vc-ide: $(VC14_LIBVCXPROJ_DEPS) $(VC14_SRCVCXPROJ_DEPS) \ + $(VC14_10_LIBVCXPROJ_DEPS) $(VC14_10_SRCVCXPROJ_DEPS) \ + $(VC14_20_LIBVCXPROJ_DEPS) $(VC14_20_SRCVCXPROJ_DEPS) \ + $(VC14_30_LIBVCXPROJ_DEPS) $(VC14_30_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\r\n",\ + tabs, dir, file);\ + printf("%s\r\n", tabs);\ + }\ + else if(type == "vcproj2") {\ + printf("%s\r\n", tabs);\ + printf("%s\r\n", tabs);\ + }\ + else if(type == "vcxproj") {\ + i = index(file, ".");\ + ext = substr(file, i == 0 ? 0 : i + 1);\ +\ + if(ext == "c")\ + printf("%s\r\n",\ + spaces, dir, file);\ + else if(ext == "h")\ + printf("%s\r\n",\ + spaces, dir, file);\ + else if(ext == "rc")\ + printf("%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 '$(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 '$(VC14_10_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_10_LIBTMPL) > $(VC14_10_LIBVCXPROJ) || { exit 1; }; \ + \ + echo "generating '$(VC14_10_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_10_SRCTMPL) > $(VC14_10_SRCVCXPROJ) || { exit 1; }; \ + \ + echo "generating '$(VC14_20_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_20_LIBTMPL) > $(VC14_20_LIBVCXPROJ) || { exit 1; }; \ + \ + echo "generating '$(VC14_20_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_20_SRCTMPL) > $(VC14_20_SRCVCXPROJ) || { exit 1; };) \ + echo "generating '$(VC14_30_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_30_LIBTMPL) > $(VC14_30_LIBVCXPROJ) || { exit 1; }; \ + \ + echo "generating '$(VC14_30_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_30_SRCTMPL) > $(VC14_30_SRCVCXPROJ) || { exit 1; };) + +tidy: + (cd src && $(MAKE) tidy) + (cd lib && $(MAKE) tidy) diff --git a/deps/curl/Makefile.dist b/deps/curl/Makefile.dist new file mode 100644 index 0000000..a5818e1 --- /dev/null +++ b/deps/curl/Makefile.dist @@ -0,0 +1,92 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +all: + ./configure + make + +ssl: + ./configure --with-openssl + make + +mingw32: + $(MAKE) -C lib -f Makefile.mk + $(MAKE) -C src -f Makefile.mk + +mingw32-clean: + $(MAKE) -C lib -f Makefile.mk clean + $(MAKE) -C src -f Makefile.mk clean + $(MAKE) -C docs/examples -f Makefile.mk clean + +mingw32-vclean mingw32-distclean: + $(MAKE) -C lib -f Makefile.mk vclean + $(MAKE) -C src -f Makefile.mk vclean + $(MAKE) -C docs/examples -f Makefile.mk vclean + +mingw32-examples%: + $(MAKE) -C docs/examples -f Makefile.mk CFG=$@ + +mingw32%: + $(MAKE) -C lib -f Makefile.mk CFG=$@ + $(MAKE) -C src -f Makefile.mk CFG=$@ + +vc: + cd winbuild + nmake /f Makefile.vc MACHINE=x86 + +vc-x64: + cd winbuild + nmake /f Makefile.vc MACHINE=x64 + +djgpp%: + $(MAKE) -C lib -f Makefile.mk CFG=$@ CROSSPREFIX=i586-pc-msdosdjgpp- + $(MAKE) -C src -f Makefile.mk CFG=$@ CROSSPREFIX=i586-pc-msdosdjgpp- + +cygwin: + ./configure + make + +cygwin-ssl: + ./configure --with-openssl + make + +amiga%: + $(MAKE) -C lib -f Makefile.mk CFG=$@ CROSSPREFIX=m68k-amigaos- + $(MAKE) -C src -f Makefile.mk CFG=$@ CROSSPREFIX=m68k-amigaos- + +unix: all + +unix-ssl: ssl + +linux: all + +linux-ssl: ssl + +ca-bundle: scripts/mk-ca-bundle.pl + @echo "generate a fresh ca-bundle.crt" + @perl $< -b -l -u lib/ca-bundle.crt + +ca-firefox: lib/firefox-db2pem.sh + @echo "generate a fresh ca-bundle.crt" + ./lib/firefox-db2pem.sh lib/ca-bundle.crt diff --git a/deps/curl/README b/deps/curl/README new file mode 100644 index 0000000..f5efbd7 --- /dev/null +++ b/deps/curl/README @@ -0,0 +1,55 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + +README + + 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 page or the + MANUAL document. Find out how to install Curl by reading the INSTALL + document. + + 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 to + learn how. + + You find answers to the most frequent questions we get in the FAQ document. + + Study the COPYING file for distribution terms. + + Those documents and more can be found in the docs/ directory. + +CONTACT + + If you have problems, questions, ideas or suggestions, please contact us + by posting to a suitable mailing list. See https://curl.se/mail/ + + All contributors to the project are listed in the THANKS document. + +WEBSITE + + Visit the curl website for the latest news and downloads: + + https://curl.se/ + +GIT + + To download the latest source code off the GIT server, do this: + + git clone https://github.com/curl/curl.git + + (you will get a directory named curl created, filled with the source code) + +SECURITY PROBLEMS + + Report suspected security problems via our HackerOne page and not in public. + + https://hackerone.com/curl + +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. diff --git a/deps/curl/README.md b/deps/curl/README.md new file mode 100644 index 0000000..8e58662 --- /dev/null +++ b/deps/curl/README.md @@ -0,0 +1,68 @@ + + +# [![curl logo](https://curl.se/logo/curl-logo.svg)](https://curl.se/) + +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 +page](https://curl.se/docs/manpage.html) or [the MANUAL +document](https://curl.se/docs/manual.html). Find out how to install Curl +by reading [the INSTALL document](https://curl.se/docs/install.html). + +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.se/libcurl/c/libcurl.html) to learn how. + +You can find answers to the most frequent questions we get in [the FAQ +document](https://curl.se/docs/faq.html). + +Study [the COPYING file](https://curl.se/docs/copyright.html) for +distribution terms. + +## Contact + +If you have problems, questions, ideas or suggestions, please contact us by +posting to a suitable [mailing list](https://curl.se/mail/). + +All contributors to the project are listed in [the THANKS +document](https://curl.se/docs/thanks.html). + +## Commercial support + +For commercial support, maybe private and dedicated help with your problems or +applications using (lib)curl visit [the support page](https://curl.se/support.html). + +## Website + +Visit the [curl website](https://curl.se/) for the latest news and +downloads. + +## Git + +To download the latest source from the Git server, do this: + + git clone https://github.com/curl/curl.git + +(you will get a directory named curl created, filled with the source code) + +## Security problems + +Report suspected security problems via [our HackerOne +page](https://hackerone.com/curl) and not in public. + +## 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. + +## Backers + +Thank you to all our backers! 🙠[Become a backer](https://opencollective.com/curl#section-contribute). + +## Sponsors + +Support this project by becoming a [sponsor](https://curl.se/sponsors.html). diff --git a/deps/curl/RELEASE-NOTES b/deps/curl/RELEASE-NOTES new file mode 100644 index 0000000..3f7dc99 --- /dev/null +++ b/deps/curl/RELEASE-NOTES @@ -0,0 +1,418 @@ +curl and libcurl 8.5.0 + + Public curl releases: 253 + Command line options: 258 + curl_easy_setopt() options: 303 + Public functions in libcurl: 93 + Contributors: 3039 + +This release includes the following changes: + + o gnutls: support CURLSSLOPT_NATIVE_CA [31] + o HTTP3: ngtcp2 builds are no longer experimental [77] + +This release includes the following bugfixes: + + o appveyor: make VS2008-built curl tool runnable [93] + o asyn-thread: use pipe instead of socketpair for IPC when available [4] + o autotools: accept linker flags via `CURL_LDFLAGS_{LIB,BIN}` [128] + o autotools: avoid passing `LDFLAGS` twice to libcurl [127] + o autotools: delete LCC compiler support bits [137] + o autotools: fix/improve gcc and Apple clang version detection [136] + o autotools: stop setting `-std=gnu89` with `--enable-warnings` [135] + o autotools: update references to deleted `crypt-auth` option [46] + o BINDINGS: add V binding [54] + o build: add `src/.checksrc` to source tarball [1] + o build: add more picky warnings and fix them [172] + o build: always revert `#pragma GCC diagnostic` after use [143] + o build: delete `HAVE_STDINT_H` and `HAVE_INTTYPES_H` [107] + o build: delete support bits for obsolete Windows compilers [106] + o build: fix 'threadsafe' feature detection for older gcc [19] + o build: fix builds that disable protocols but not digest auth [174] + o build: fix compiler warning with auths disabled [85] + o build: fix libssh2 + `CURL_DISABLE_DIGEST_AUTH` + `CURL_DISABLE_AWS` [120] + o build: picky warning updates [125] + o build: require Windows XP or newer [86] + o cfilter: provide call to tell connection to forget a socket [65] + o checksrc.pl: support #line instructions + o CI: add autotools, out-of-tree, debug build to distro check job [14] + o CI: ignore test 286 on Appveyor gcc 9 build [6] + o cmake: add `CURL_DISABLE_BINDLOCAL` option [146] + o cmake: add test for `DISABLE` options, add `CURL_DISABLE_HEADERS_API` [138] + o cmake: dedupe Windows system libs [114] + o cmake: fix `HAVE_H_ERRNO_ASSIGNABLE` detection [2] + o cmake: fix CURL_DISABLE_GETOPTIONS [12] + o cmake: fix multiple include of CURL package [96] + o cmake: fix OpenSSL quic detection in quiche builds [56] + o cmake: option to disable install & drop `curlu` target when unused [72] + o cmake: pre-fill rest of detection values for Windows [50] + o cmake: replace `check_library_exists_concat()` [23] + o cmake: speed up threads setup for Windows [68] + o cmake: speed up zstd detection [69] + o config-win32: set `HAVE_SNPRINTF` for mingw-w64 [123] + o configure: better --disable-http [80] + o configure: check for the fseeko declaration too [55] + o conncache: use the closure handle when disconnecting surplus connections [173] + o content_encoding: make Curl_all_content_encodings allocless [101] + o cookie: lowercase the domain names before PSL checks [160] + o curl.h: delete Symbian OS references [162] + o curl.h: on FreeBSD include sys/param.h instead of osreldate.h [21] + o curl.rc: switch out the copyright symbol for plain ASCII [167] + o curl: improved IPFS and IPNS URL support [87] + o curl_easy_duphandle.3: clarify how HSTS and alt-svc are duped [99] + o Curl_http_body: cleanup properly when Curl_getformdata errors [152] + o curl_setup: disallow Windows IPv6 builds missing getaddrinfo [57] + o curl_sspi: support more revocation error names in error messages [95] + o CURLINFO_PRETRANSFER_TIME_T.3: fix time explanation [181] + o CURLMOPT_MAX_CONCURRENT_STREAMS: make sure the set value is within range [165] + o CURLOPT_CAINFO_BLOB.3: explain what CURL_BLOB_COPY does [113] + o CURLOPT_WRITEFUNCTION.3: clarify libcurl returns for CURL_WRITEFUNC_ERROR [45] + o CURPOST_POSTFIELDS.3: add CURLOPT_COPYPOSTFIELDS in SEE ALSO + o docs/example/keepalive.c: show TCP keep-alive options [73] + o docs/example/localport.c: show off CURLOPT_LOCALPORT [83] + o docs/examples/interface.c: show CURLOPT_INTERFACE use [84] + o docs/libcurl: fix three minor man page format mistakes [26] + o docs/libcurl: SYNSOPSIS cleanup [150] + o docs: add supported version for the json write-out [92] + o docs: clarify that curl passes on input unfiltered [47] + o docs: fix function typo in curl_easy_option_next.3 [36] + o docs: KNOWN_BUGS cleanup + o docs: make all examples in all libcurl man pages compile [175] + o docs: preserve the modification date when copying the prebuilt man page [89] + o docs: remove bold from some man page SYNOPSIS sections [90] + o docs: use SOURCE_DATE_EPOCH for generated manpages [16] + o doh: provide better return code for responses w/o addresses [133] + o doh: use PIPEWAIT when HTTP/2 is attempted [63] + o duphandle: also free 'outcurl->cookies' in error path [122] + o duphandle: make dupset() not return with pointers to old alloced data [109] + o duphandle: use strdup to clone *COPYPOSTFIELDS if size is not set [132] + o easy: in duphandle, init the cookies for the new handle [131] + o easy: remove duplicate wolfSSH init call [37] + o easy_lock: add a pthread_mutex_t fallback [13] + o examples/rtsp-options.c: add [157] + o fopen: create new file using old file's mode [153] + o fopen: create short(er) temporary file name [155] + o getenv: PlayStation doesn't have getenv() [41] + o GHA: move mod_h2 version in CI to v2.0.25 [43] + o hostip: show the list of IPs when resolving is done [35] + o hostip: silence compiler warning `-Wparentheses-equality` [62] + o hsts: skip single-dot hostname [67] + o HTTP/2, HTTP/3: handle detach of onoing transfers [134] + o http2: header conversion tightening [33] + o http2: provide an error callback and failf the message [53] + o http2: safer invocation of populate_binsettings [8] + o http: allow longer HTTP/2 request method names [112] + o http: avoid Expect: 100-continue if Upgrade: is used [15] + o http: consider resume with CURLOPT_FAILONERRROR and 416 to be fine [81] + o http: fix `-Wunused-parameter` with no auth and no proxy [149] + o http: fix `-Wunused-variable` compiler warning [115] + o http: fix empty-body warning [76] + o http_aws_sigv4: canonicalise valueless query params [88] + o hyper: temporarily remove HTTP/2 support [139] + o INSTALL: update list of ports and CPU archs + o IPFS: fix IPFS_PATH and file parsing [119] + o keylog: disable if unused [145] + o lib: add and use Curl_strndup() [97] + o lib: apache style infof and trace macros/functions [71] + o lib: fix gcc warning in printf call [7] + o libcurl-errors.3: sync with current public headers [156] + o libcurl-thread.3: simplify the TLS section [79] + o Makefile.am: drop vc10, vc11 and vc12 projects from dist [103] + o Makefile.mk: fix `-rtmp` option for non-Windows + o mime: store "form escape" as a single bit [170] + o misc: fix -Walloc-size warnings [118] + o msh3: error when built with CURL_DISABLE_SOCKETPAIR set [61] + o multi: during ratelimit multi_getsock should return no sockets [182] + o multi: use pipe instead of socketpair to *wakeup() [18] + o ngtcp2: fix races in stream handling [178] + o ngtcp2: ignore errors on unknown streams [158] + o ntlm_wb: use pipe instead of socketpair when possible [44] + o openldap: move the alloc of ldapconninfo to *connect() [29] + o openldap: set the callback argument in oldap_do [30] + o openssl: avoid BN_num_bits() NULL pointer derefs [9] + o openssl: fix building with v3 `no-deprecated` + add CI test [161] + o openssl: fix infof() to avoid compiler warning for %s with null [70] + o openssl: identify the "quictls" backend correctly [82] + o openssl: include SIG and KEM algorithms in verbose [52] + o openssl: make CURLSSLOPT_NATIVE_CA import Windows intermediate CAs [58] + o openssl: two multi pointer checks should probably rather be asserts [91] + o openssl: when a session-ID is reused, skip OCSP stapling [142] + o page-footer: clarify exit code 25 [51] + o projects: add VC14.20 project files [104] + o pytest: use lower count in repeat tests [98] + o quic: make eyeballers connect retries stop at weird replies [140] + o quic: manage connection idle timeouts [5] + o quiche: use quiche_conn_peer_transport_params() [116] + o rand: fix build error with autotools + LibreSSL [111] + o resolve.d: drop a multi use-sentence [100] + o RTSP: improved RTP parser [32] + o rustls: implement connect_blocking [154] + o sasl: fix `-Wunused-function` compiler warning [124] + o schannel: add CA cache support for files and memory blobs [121] + o setopt: check CURLOPT_TFTP_BLKSIZE range on set [171] + o setopt: remove outdated cookie comment [64] + o setopt: remove superfluous use of ternary expressions [169] + o socks: better buffer size checks for socks4a user and hostname [20] + o socks: make SOCKS5 use the CURLOPT_IPRESOLVE choice [38] + o symbols-in-versions: the CLOSEPOLICY options are deprecated + o test1683: remove commented-out check alternatives + o test3103: add missing quotes around a test tag attribute + o test613: stop showing an error on missing output file + o tests/README: SOCKS tests are not using OpenSSH, it has its own server [48] + o tests/server: add more SOCKS5 handshake error checking [27] + o tests: Fix Windows test helper tool search & use it for handle64 [17] + o tidy-up: casing typos, delete unused Windows version aliases [144] + o tool: fix --capath when proxy support is disabled [28] + o tool: support bold headers in Windows [117] + o tool_cb_hdr: add an additional parsing check [129] + o tool_cb_prg: make the carriage return fit for wide progress bars [159] + o tool_cb_wrt: fix write output for very old Windows versions [24] + o tool_getparam: limit --rate to be smaller than number of ms [3] + o tool_operate: do not mix memory models [108] + o tool_operate: fix links in ipfs errors [22] + o tool_parsecfg: make warning output propose double-quoting [164] + o tool_urlglob: fix build for old gcc versions [25] + o tool_urlglob: make multiply() bail out on negative values [11] + o tool_writeout_json: fix JSON encoding of non-ascii bytes [179] + o transfer: abort pause send when connection is marked for closing [183] + o transfer: avoid calling the read callback again after EOF [130] + o transfer: only reset the FTP wildcard engine in CLEAR state [42] + o url: don't touch the multi handle when closing internal handles [40] + o url: find scheme with a "perfect hash" [141] + o url: fix `-Wzero-length-array` with no protocols [147] + o url: fix builds with `CURL_DISABLE_HTTP` [148] + o url: protocol handler lookup tidy-up [66] + o url: proxy ssl connection reuse fix [94] + o urlapi: avoid null deref if setting blank host to url encode [75] + o urlapi: skip appending NULL pointer query [74] + o urlapi: when URL encoding the fragment, pass in the right length [59] + o urldata: make maxconnects a 32 bit value [166] + o urldata: move async resolver state from easy handle to connectdata [34] + o urldata: move cookielist from UserDefined to UrlState [126] + o urldata: move hstslist from 'set' to 'state' [105] + o urldata: move the 'internal' boolean to the state struct [39] + o vssh: remove the #ifdef for Curl_ssh_init, use empty macro + o vtls: cleanup SSL config management [78] + o vtls: consistently use typedef names for OpenSSL structs [176] + o vtls: late clone of connection ssl config [60] + o vtls: use ALPN "http/1.1" for HTTP/1.x, including HTTP/1.0 [102] + o VULN-DISCLOSURE-POLICY: escape sequences are not a security flaw [110] + o windows: use built-in `_WIN32` macro to detect Windows [163] + o wolfssh: remove redundant static prototypes [168] + o wolfssl: add default case for wolfssl_connect_step1 switch [49] + o wolfssl: require WOLFSSL_SYS_CA_CERTS for loading system CA [10] + +This release includes the following known bugs: + + o see docs/KNOWN_BUGS (https://curl.se/docs/knownbugs.html) + +Planned upcoming removals include: + + o support for space-separated NOPROXY patterns + + See https://curl.se/dev/deprecate.html for details + +This release would not have looked like this without help, code, reports and +advice from friends like these: + + 12932 on github, Alex Bozarth, Alexey Larikov, Alex Klyubin, Ammar Faizi, + Andrew Kurushin, Anubhav Rai, boilingoden, calvin2021y on github, + Carlos Henrique Lima Melara, Casey Bodley, Charlie C, Dan Fandrich, + Daniel JeliÅ„ski, Daniel Stenberg, David Benjamin, David Suter, Dmitry Karpov, + eeverettrbx on github, Emanuele Torre, Enno Boland, enWILLYado on github, + Faraz Fallahi, Gisle Vanem, Goro FUJI, Graham Campbell, Harry Mallon, + Harry Sintonen, iconoclasthero, icy17 on github, Jacob Hoffman-Andrews, + Jan Alexander Steffens, Jeroen Ooms, Jiehong on github, Jiri Hruska, + Junho Choi, Kai Pastor, Kareem, Kartatz on Github, kirbyn17 on hackerone, + Lau, lkordos on github, Loïc Yhuel, LoRd_MuldeR, lRoccoon on github, + Maksymilian Arciemowicz, Manfred Schwarb, Marcel Raad, Marcin Rataj, + Mark Gaiser, Martin Schmatz, Michael Kaufmann, MichaÅ‚ Antoniak, Nico Rieck, + Niracler Li, ohyeaah on github, Ophir Lojkine, PaweÅ‚ Wegner, Philip Heiduck, + Ray Satiro, rilysh, Robert Southee, Romain Geissler, Sam James, + Samuel Henrique, sd0 on hackerone, Smackd0wn, Sohom Datta, Stefan Eissing, + Steven Allen, Tim Hill, Torben Dury, Turiiya, Viktor Szakats, + yushicheng7788 on github, z2_, zhengqwe on github, ç©ä¸¹å°¼ Dan Jacobson + (78 contributors) + +References to bug reports and discussions on issues: + + [1] = https://curl.se/bug/?i=12084 + [2] = https://curl.se/bug/?i=12093 + [3] = https://curl.se/bug/?i=12116 + [4] = https://curl.se/bug/?i=12146 + [5] = https://curl.se/bug/?i=12064 + [6] = https://curl.se/bug/?i=12040 + [7] = https://curl.se/bug/?i=12082 + [8] = https://curl.se/bug/?i=12101 + [9] = https://curl.se/bug/?i=12099 + [10] = https://curl.se/bug/?i=12108 + [11] = https://curl.se/bug/?i=12102 + [12] = https://curl.se/bug/?i=12091 + [13] = https://curl.se/bug/?i=12090 + [14] = https://curl.se/bug/?i=12088 + [15] = https://curl.se/bug/?i=12022 + [16] = https://curl.se/bug/?i=12092 + [17] = https://curl.se/bug/?i=12115 + [18] = https://curl.se/bug/?i=12142 + [19] = https://curl.se/bug/?i=12125 + [20] = https://curl.se/bug/?i=12139 + [21] = https://curl.se/bug/?i=12107 + [22] = https://curl.se/bug/?i=12133 + [23] = https://curl.se/bug/?i=11285 + [24] = https://curl.se/bug/?i=12131 + [25] = https://curl.se/bug/?i=12124 + [26] = https://curl.se/bug/?i=12126 + [27] = https://curl.se/bug/?i=12117 + [28] = https://curl.se/bug/?i=12089 + [29] = https://curl.se/bug/?i=12166 + [30] = https://curl.se/bug/?i=12166 + [31] = https://curl.se/bug/?i=12137 + [32] = https://curl.se/bug/?i=12052 + [33] = https://curl.se/bug/?i=12097 + [34] = https://curl.se/bug/?i=12198 + [35] = https://curl.se/bug/?i=12145 + [36] = https://curl.se/bug/?i=12170 + [37] = https://curl.se/bug/?i=12168 + [38] = https://curl.se/bug/?i=11949 + [39] = https://curl.se/bug/?i=12165 + [40] = https://curl.se/bug/?i=12165 + [41] = https://curl.se/bug/?i=12140 + [42] = https://curl.se/bug/?i=11775 + [43] = https://curl.se/bug/?i=12157 + [44] = https://curl.se/bug/?i=12149 + [45] = https://curl.se/bug/?i=12201 + [46] = https://curl.se/bug/?i=12194 + [47] = https://curl.se/bug/?i=12249 + [48] = https://curl.se/bug/?i=12195 + [49] = https://curl.se/bug/?i=12218 + [50] = https://curl.se/bug/?i=12044 + [51] = https://curl.se/bug/?i=12189 + [52] = https://curl.se/bug/?i=12030 + [53] = https://curl.se/bug/?i=12179 + [54] = https://curl.se/bug/?i=12182 + [55] = https://curl.se/bug/?i=12086 + [56] = https://curl.se/bug/?i=12160 + [57] = https://curl.se/bug/?i=12221 + [58] = https://curl.se/bug/?i=12155 + [59] = https://curl.se/bug/?i=12250 + [60] = https://curl.se/bug/?i=12237 + [61] = https://curl.se/bug/?i=12213 + [62] = https://curl.se/bug/?i=12215 + [63] = https://curl.se/bug/?i=12214 + [64] = https://curl.se/bug/?i=12206 + [65] = https://curl.se/bug/?i=12207 + [66] = https://curl.se/bug/?i=12216 + [67] = https://curl.se/bug/?i=12247 + [68] = https://curl.se/bug/?i=12202 + [69] = https://curl.se/bug/?i=12200 + [70] = https://curl.se/bug/?i=12196 + [71] = https://curl.se/bug/?i=12083 + [72] = https://curl.se/bug/?i=12287 + [73] = https://curl.se/bug/?i=12242 + [74] = https://curl.se/bug/?i=12240 + [75] = https://curl.se/bug/?i=12240 + [76] = https://curl.se/bug/?i=12262 + [77] = https://curl.se/bug/?i=12235 + [78] = https://curl.se/bug/?i=12204 + [79] = https://curl.se/bug/?i=12233 + [80] = https://curl.se/bug/?i=12223 + [81] = https://curl.se/bug/?i=10521 + [82] = https://curl.se/bug/?i=12270 + [83] = https://curl.se/bug/?i=12230 + [84] = https://curl.se/bug/?i=12229 + [85] = https://curl.se/bug/?i=12227 + [86] = https://curl.se/bug/?i=12225 + [87] = https://curl.se/bug/?i=12148 + [88] = https://curl.se/bug/?i=8107 + [89] = https://curl.se/bug/?i=12199 + [90] = https://curl.se/bug/?i=12267 + [91] = https://curl.se/bug/?i=12264 + [92] = https://curl.se/bug/?i=12266 + [93] = https://curl.se/bug/?i=12263 + [94] = https://curl.se/bug/?i=12255 + [95] = https://curl.se/bug/?i=12239 + [96] = https://curl.se/bug/?i=11913 + [97] = https://curl.se/bug/?i=12251 + [98] = https://curl.se/bug/?i=12248 + [99] = https://curl.se/bug/?i=12315 + [100] = https://curl.se/bug/?i=12294 + [101] = https://curl.se/bug/?i=12289 + [102] = https://curl.se/bug/?i=12259 + [103] = https://curl.se/bug/?i=12288 + [104] = https://curl.se/bug/?i=12282 + [105] = https://curl.se/bug/?i=12315 + [106] = https://curl.se/bug/?i=12222 + [107] = https://curl.se/bug/?i=12275 + [108] = https://curl.se/bug/?i=12280 + [109] = https://curl.se/bug/?i=12337 + [110] = https://curl.se/bug/?i=12278 + [111] = https://curl.se/bug/?i=12257 + [112] = https://curl.se/bug/?i=12311 + [113] = https://curl.se/bug/?i=12277 + [114] = https://curl.se/bug/?i=12307 + [115] = https://curl.se/bug/?i=12228 + [116] = https://curl.se/bug/?i=12180 + [117] = https://curl.se/bug/?i=12321 + [118] = https://curl.se/bug/?i=12292 + [119] = https://curl.se/bug/?i=12152 + [120] = https://curl.se/bug/?i=12273 + [121] = https://curl.se/bug/?i=12261 + [122] = https://curl.se/bug/?i=12329 + [123] = https://curl.se/bug/?i=12325 + [124] = https://curl.se/bug/?i=12326 + [125] = https://curl.se/bug/?i=12324 + [126] = https://curl.se/bug/?i=12323 + [127] = https://curl.se/bug/?i=12310 + [128] = https://curl.se/bug/?i=12312 + [129] = https://curl.se/bug/?i=12320 + [130] = https://curl.se/mail/lib-2023-11/0017.html + [131] = https://curl.se/bug/?i=12318 + [132] = https://curl.se/bug/?i=12317 + [133] = https://curl.se/bug/?i=12365 + [134] = https://curl.se/bug/?i=12356 + [135] = https://curl.se/bug/?i=12346 + [136] = https://curl.se/bug/?i=12362 + [137] = https://curl.se/bug/?i=12357 + [138] = https://curl.se/bug/?i=12353 + [139] = https://curl.se/bug/?i=12191 + [140] = https://curl.se/bug/?i=12400 + [141] = https://curl.se/bug/?i=12347 + [142] = https://curl.se/bug/?i=12399 + [143] = https://curl.se/bug/?i=12352 + [144] = https://curl.se/bug/?i=12351 + [145] = https://curl.se/bug/?i=12350 + [146] = https://curl.se/bug/?i=12345 + [147] = https://curl.se/bug/?i=12344 + [148] = https://curl.se/bug/?i=12343 + [149] = https://curl.se/bug/?i=12338 + [150] = https://curl.se/bug/?i=12402 + [152] = https://curl.se/bug/?i=12410 + [153] = https://curl.se/bug/?i=12299 + [154] = https://curl.se/bug/?i=11647 + [155] = https://curl.se/bug/?i=12388 + [156] = https://curl.se/bug/?i=12424 + [157] = https://curl.se/bug/?i=12452 + [158] = https://curl.se/bug/?i=12449 + [159] = https://curl.se/bug/?i=12407 + [160] = https://curl.se/bug/?i=12387 + [161] = https://curl.se/bug/?i=12384 + [162] = https://curl.se/bug/?i=12378 + [163] = https://curl.se/bug/?i=12376 + [164] = https://curl.se/bug/?i=12409 + [165] = https://curl.se/bug/?i=12382 + [166] = https://curl.se/bug/?i=12375 + [167] = https://curl.se/bug/?i=12403 + [168] = https://curl.se/bug/?i=12381 + [169] = https://curl.se/bug/?i=12374 + [170] = https://curl.se/bug/?i=12374 + [171] = https://curl.se/bug/?i=12374 + [172] = https://curl.se/bug/?i=12331 + [173] = https://curl.se/bug/?i=12367 + [174] = https://curl.se/bug/?i=12440 + [175] = https://curl.se/bug/?i=12448 + [176] = https://curl.se/bug/?i=12439 + [178] = https://curl.se/bug/?i=12435 + [179] = https://curl.se/bug/?i=12434 + [181] = https://curl.se/bug/?i=12431 + [182] = https://curl.se/bug/?i=12430 + [183] = https://curl.se/bug/?i=12428 diff --git a/deps/curl/SECURITY.md b/deps/curl/SECURITY.md new file mode 100644 index 0000000..dbce1b5 --- /dev/null +++ b/deps/curl/SECURITY.md @@ -0,0 +1,16 @@ + + +# Security Policy + +Read our [Vulnerability Disclosure Policy](docs/VULN-DISCLOSURE-POLICY.md). + +## Reporting a Vulnerability + +If you have found or just suspect a security problem somewhere in curl or +libcurl, report it on [HackerOne](https://hackerone.com/curl). + +We treat security issues with confidentiality until controlled and disclosed responsibly. diff --git a/deps/curl/acinclude.m4 b/deps/curl/acinclude.m4 new file mode 100644 index 0000000..ac026e3 --- /dev/null +++ b/deps/curl/acinclude.m4 @@ -0,0 +1,1840 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +#*************************************************************************** + +dnl CURL_CHECK_DEF (SYMBOL, [INCLUDES], [SILENT]) +dnl ------------------------------------------------- +dnl Use the C preprocessor to find out if the given object-style symbol +dnl is defined and get its expansion. This macro will not use default +dnl includes even if no INCLUDES argument is given. This macro will run +dnl silently when invoked with three arguments. If the expansion would +dnl result in a set of double-quoted strings the returned expansion will +dnl actually be a single double-quoted string concatenating all them. + +AC_DEFUN([CURL_CHECK_DEF], [ + AC_REQUIRE([CURL_CPP_P])dnl + OLDCPPFLAGS=$CPPFLAGS + # CPPPFLAG comes from CURL_CPP_P + CPPFLAGS="$CPPFLAGS $CPPPFLAG" + AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl + AS_VAR_PUSHDEF([ac_Def], [curl_cv_def_$1])dnl + if test -z "$SED"; then + AC_MSG_ERROR([SED not set. Cannot continue without SED being set.]) + fi + if test -z "$GREP"; then + AC_MSG_ERROR([GREP not set. Cannot continue without GREP being set.]) + fi + ifelse($3,,[AC_MSG_CHECKING([for preprocessor definition of $1])]) + tmp_exp="" + AC_PREPROC_IFELSE([ + AC_LANG_SOURCE( +ifelse($2,,,[$2])[[ +#ifdef $1 +CURL_DEF_TOKEN $1 +#endif + ]]) + ],[ + tmp_exp=`eval "$ac_cpp conftest.$ac_ext" 2>/dev/null | \ + "$GREP" CURL_DEF_TOKEN 2>/dev/null | \ + "$SED" 's/.*CURL_DEF_TOKEN[[ ]][[ ]]*//' 2>/dev/null | \ + "$SED" 's/[["]][[ ]]*[["]]//g' 2>/dev/null` + if test -z "$tmp_exp" || test "$tmp_exp" = "$1"; then + tmp_exp="" + fi + ]) + if test -z "$tmp_exp"; then + AS_VAR_SET(ac_HaveDef, no) + ifelse($3,,[AC_MSG_RESULT([no])]) + else + AS_VAR_SET(ac_HaveDef, yes) + AS_VAR_SET(ac_Def, $tmp_exp) + ifelse($3,,[AC_MSG_RESULT([$tmp_exp])]) + fi + AS_VAR_POPDEF([ac_Def])dnl + AS_VAR_POPDEF([ac_HaveDef])dnl + CPPFLAGS=$OLDCPPFLAGS +]) + + +dnl CURL_CHECK_DEF_CC (SYMBOL, [INCLUDES], [SILENT]) +dnl ------------------------------------------------- +dnl Use the C compiler to find out only if the given symbol is defined +dnl or not, this can not find out its expansion. This macro will not use +dnl default includes even if no INCLUDES argument is given. This macro +dnl will run silently when invoked with three arguments. + +AC_DEFUN([CURL_CHECK_DEF_CC], [ + AS_VAR_PUSHDEF([ac_HaveDef], [curl_cv_have_def_$1])dnl + ifelse($3,,[AC_MSG_CHECKING([for compiler definition of $1])]) + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE( +ifelse($2,,,[$2])[[ +int main (void) +{ +#ifdef $1 + return 0; +#else + force compilation error +#endif +} + ]]) + ],[ + tst_symbol_defined="yes" + ],[ + tst_symbol_defined="no" + ]) + if test "$tst_symbol_defined" = "yes"; then + AS_VAR_SET(ac_HaveDef, yes) + ifelse($3,,[AC_MSG_RESULT([yes])]) + else + AS_VAR_SET(ac_HaveDef, no) + ifelse($3,,[AC_MSG_RESULT([no])]) + fi + AS_VAR_POPDEF([ac_HaveDef])dnl +]) + + +dnl CURL_CHECK_LIB_XNET +dnl ------------------------------------------------- +dnl Verify if X/Open network library is required. + +AC_DEFUN([CURL_CHECK_LIB_XNET], [ + AC_MSG_CHECKING([if X/Open network library is required]) + tst_lib_xnet_required="no" + AC_COMPILE_IFELSE([ + AC_LANG_SOURCE([[ +int main (void) +{ +#if defined(__hpux) && defined(_XOPEN_SOURCE) && (_XOPEN_SOURCE >= 600) + return 0; +#elif defined(__hpux) && defined(_XOPEN_SOURCE_EXTENDED) + return 0; +#else + force compilation error +#endif +} + ]]) + ],[ + tst_lib_xnet_required="yes" + LIBS="-lxnet $LIBS" + ]) + AC_MSG_RESULT([$tst_lib_xnet_required]) +]) + + +dnl CURL_CHECK_AIX_ALL_SOURCE +dnl ------------------------------------------------- +dnl Provides a replacement of traditional AC_AIX with +dnl an uniform behavior across all autoconf versions, +dnl and with our own placement rules. + +AC_DEFUN([CURL_CHECK_AIX_ALL_SOURCE], [ + AH_VERBATIM([_ALL_SOURCE], + [/* Define to 1 if OS is AIX. */ +#ifndef _ALL_SOURCE +# undef _ALL_SOURCE +#endif]) + AC_BEFORE([$0], [AC_SYS_LARGEFILE])dnl + AC_BEFORE([$0], [CURL_CONFIGURE_REENTRANT])dnl + AC_BEFORE([$0], [CURL_CONFIGURE_PULL_SYS_POLL])dnl + AC_MSG_CHECKING([if OS is AIX (to define _ALL_SOURCE)]) + AC_EGREP_CPP([yes_this_is_aix],[ +#ifdef _AIX + yes_this_is_aix +#endif + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(_ALL_SOURCE) + ],[ + AC_MSG_RESULT([no]) + ]) +]) + + +dnl CURL_CHECK_HEADER_WINDOWS +dnl ------------------------------------------------- +dnl Check for compilable and valid windows.h header + +AC_DEFUN([CURL_CHECK_HEADER_WINDOWS], [ + AC_CACHE_CHECK([for windows.h], [curl_cv_header_windows_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) + HAVE_WINDOWS_H shall not be defined. +#else + int dummy=2*WINVER; +#endif + ]]) + ],[ + curl_cv_header_windows_h="yes" + ],[ + curl_cv_header_windows_h="no" + ]) + ]) + case "$curl_cv_header_windows_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WINDOWS_H, 1, + [Define to 1 if you have the windows.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_NATIVE_WINDOWS +dnl ------------------------------------------------- +dnl Check if building a native Windows target + +AC_DEFUN([CURL_CHECK_NATIVE_WINDOWS], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_CACHE_CHECK([whether build target is a native Windows one], [curl_cv_native_windows], [ + if test "$curl_cv_header_windows_h" = "no"; then + curl_cv_native_windows="no" + else + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ +#if defined(__MINGW32__) || defined(__MINGW32CE__) || \ + (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64))) + int dummy=1; +#else + Not a native Windows build target. +#endif + ]]) + ],[ + curl_cv_native_windows="yes" + ],[ + curl_cv_native_windows="no" + ]) + fi + ]) + AM_CONDITIONAL(DOING_NATIVE_WINDOWS, test "x$curl_cv_native_windows" = xyes) +]) + + +dnl CURL_CHECK_HEADER_WINSOCK2 +dnl ------------------------------------------------- +dnl Check for compilable and valid winsock2.h header + +AC_DEFUN([CURL_CHECK_HEADER_WINSOCK2], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_CACHE_CHECK([for winsock2.h], [curl_cv_header_winsock2_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WINSOCK2_H shall not be defined. +#else + int dummy=2*IPPROTO_ESP; +#endif + ]]) + ],[ + curl_cv_header_winsock2_h="yes" + ],[ + curl_cv_header_winsock2_h="no" + ]) + ]) + case "$curl_cv_header_winsock2_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WINSOCK2_H, 1, + [Define to 1 if you have the winsock2.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_HEADER_WS2TCPIP +dnl ------------------------------------------------- +dnl Check for compilable and valid ws2tcpip.h header + +AC_DEFUN([CURL_CHECK_HEADER_WS2TCPIP], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CACHE_CHECK([for ws2tcpip.h], [curl_cv_header_ws2tcpip_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include +#include + ]],[[ +#if defined(__CYGWIN__) || defined(__CEGCC__) || defined(__MINGW32CE__) + HAVE_WS2TCPIP_H shall not be defined. +#else + int dummy=2*IP_PKTINFO; +#endif + ]]) + ],[ + curl_cv_header_ws2tcpip_h="yes" + ],[ + curl_cv_header_ws2tcpip_h="no" + ]) + ]) + case "$curl_cv_header_ws2tcpip_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_WS2TCPIP_H, 1, + [Define to 1 if you have the ws2tcpip.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_HEADER_LBER +dnl ------------------------------------------------- +dnl Check for compilable and valid lber.h header, +dnl and check if it is needed even with ldap.h + +AC_DEFUN([CURL_CHECK_HEADER_LBER], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_CACHE_CHECK([for lber.h], [curl_cv_header_lber_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#endif +#ifndef NULL +#define NULL (void *)0 +#endif +#include + ]],[[ + BerValue *bvp = NULL; + BerElement *bep = ber_init(bvp); + ber_free(bep, 1); + ]]) + ],[ + curl_cv_header_lber_h="yes" + ],[ + curl_cv_header_lber_h="no" + ]) + ]) + if test "$curl_cv_header_lber_h" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_LBER_H, 1, + [Define to 1 if you have the lber.h header file.]) + # + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#endif +#ifndef NULL +#define NULL (void *)0 +#endif +#ifndef LDAP_DEPRECATED +#define LDAP_DEPRECATED 1 +#endif +#include + ]],[[ + BerValue *bvp = NULL; + BerElement *bep = ber_init(bvp); + ber_free(bep, 1); + ]]) + ],[ + curl_cv_need_header_lber_h="no" + ],[ + curl_cv_need_header_lber_h="yes" + ]) + # + case "$curl_cv_need_header_lber_h" in + yes) + AC_DEFINE_UNQUOTED(NEED_LBER_H, 1, + [Define to 1 if you need the lber.h header file even with ldap.h]) + ;; + esac + fi +]) + + +dnl CURL_CHECK_HEADER_LDAP +dnl ------------------------------------------------- +dnl Check for compilable and valid ldap.h header + +AC_DEFUN([CURL_CHECK_HEADER_LDAP], [ + AC_REQUIRE([CURL_CHECK_HEADER_LBER])dnl + AC_CACHE_CHECK([for ldap.h], [curl_cv_header_ldap_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#endif +#ifndef LDAP_DEPRECATED +#define LDAP_DEPRECATED 1 +#endif +#ifdef NEED_LBER_H +#include +#endif +#include + ]],[[ + LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT); + int res = ldap_unbind(ldp); + ]]) + ],[ + curl_cv_header_ldap_h="yes" + ],[ + curl_cv_header_ldap_h="no" + ]) + ]) + case "$curl_cv_header_ldap_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_LDAP_H, 1, + [Define to 1 if you have the ldap.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_HEADER_LDAP_SSL +dnl ------------------------------------------------- +dnl Check for compilable and valid ldap_ssl.h header + +AC_DEFUN([CURL_CHECK_HEADER_LDAP_SSL], [ + AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl + AC_CACHE_CHECK([for ldap_ssl.h], [curl_cv_header_ldap_ssl_h], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#endif +#ifndef LDAP_DEPRECATED +#define LDAP_DEPRECATED 1 +#endif +#ifdef NEED_LBER_H +#include +#endif +#ifdef HAVE_LDAP_H +#include +#endif +#include + ]],[[ + LDAP *ldp = ldapssl_init("0.0.0.0", LDAPS_PORT, 1); + ]]) + ],[ + curl_cv_header_ldap_ssl_h="yes" + ],[ + curl_cv_header_ldap_ssl_h="no" + ]) + ]) + case "$curl_cv_header_ldap_ssl_h" in + yes) + AC_DEFINE_UNQUOTED(HAVE_LDAP_SSL_H, 1, + [Define to 1 if you have the ldap_ssl.h header file.]) + ;; + esac +]) + + +dnl CURL_CHECK_LIBS_WINLDAP +dnl ------------------------------------------------- +dnl Check for libraries needed for WINLDAP support, +dnl and prepended to LIBS any needed libraries. +dnl This macro can take an optional parameter with a +dnl whitespace separated list of libraries to check +dnl before the WINLDAP default ones. + +AC_DEFUN([CURL_CHECK_LIBS_WINLDAP], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINBER])dnl + # + AC_MSG_CHECKING([for WINLDAP libraries]) + # + u_libs="" + # + ifelse($1,,,[ + for x_lib in $1; do + case "$x_lib" in + -l*) + l_lib="$x_lib" + ;; + *) + l_lib="-l$x_lib" + ;; + esac + if test -z "$u_libs"; then + u_libs="$l_lib" + else + u_libs="$u_libs $l_lib" + fi + done + ]) + # + curl_cv_save_LIBS="$LIBS" + curl_cv_ldap_LIBS="unknown" + # + for x_nlibs in '' "$u_libs" \ + '-lwldap32' ; do + if test "$curl_cv_ldap_LIBS" = "unknown"; then + if test -z "$x_nlibs"; then + LIBS="$curl_cv_save_LIBS" + else + LIBS="$x_nlibs $curl_cv_save_LIBS" + fi + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include +#ifdef HAVE_WINBER_H +#include +#endif +#endif + ]],[[ + BERVAL *bvp = NULL; + BerElement *bep = ber_init(bvp); + LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT); + ULONG res = ldap_unbind(ldp); + ber_free(bep, 1); + ]]) + ],[ + curl_cv_ldap_LIBS="$x_nlibs" + ]) + fi + done + # + LIBS="$curl_cv_save_LIBS" + # + case X-"$curl_cv_ldap_LIBS" in + X-unknown) + AC_MSG_RESULT([cannot find WINLDAP libraries]) + ;; + X-) + AC_MSG_RESULT([no additional lib required]) + ;; + *) + if test -z "$curl_cv_save_LIBS"; then + LIBS="$curl_cv_ldap_LIBS" + else + LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS" + fi + AC_MSG_RESULT([$curl_cv_ldap_LIBS]) + ;; + esac + # +]) + + +dnl CURL_CHECK_LIBS_LDAP +dnl ------------------------------------------------- +dnl Check for libraries needed for LDAP support, +dnl and prepended to LIBS any needed libraries. +dnl This macro can take an optional parameter with a +dnl whitespace separated list of libraries to check +dnl before the default ones. + +AC_DEFUN([CURL_CHECK_LIBS_LDAP], [ + AC_REQUIRE([CURL_CHECK_HEADER_LDAP])dnl + # + AC_MSG_CHECKING([for LDAP libraries]) + # + u_libs="" + # + ifelse($1,,,[ + for x_lib in $1; do + case "$x_lib" in + -l*) + l_lib="$x_lib" + ;; + *) + l_lib="-l$x_lib" + ;; + esac + if test -z "$u_libs"; then + u_libs="$l_lib" + else + u_libs="$u_libs $l_lib" + fi + done + ]) + # + curl_cv_save_LIBS="$LIBS" + curl_cv_ldap_LIBS="unknown" + # + for x_nlibs in '' "$u_libs" \ + '-lldap' \ + '-lldap -llber' \ + '-llber -lldap' \ + '-lldapssl -lldapx -lldapsdk' \ + '-lldapsdk -lldapx -lldapssl' \ + '-lldap -llber -lssl -lcrypto' ; do + + if test "$curl_cv_ldap_LIBS" = "unknown"; then + if test -z "$x_nlibs"; then + LIBS="$curl_cv_save_LIBS" + else + LIBS="$x_nlibs $curl_cv_save_LIBS" + fi + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#endif +#ifndef NULL +#define NULL (void *)0 +#endif +#ifndef LDAP_DEPRECATED +#define LDAP_DEPRECATED 1 +#endif +#ifdef NEED_LBER_H +#include +#endif +#ifdef HAVE_LDAP_H +#include +#endif + ]],[[ + BerValue *bvp = NULL; + BerElement *bep = ber_init(bvp); + LDAP *ldp = ldap_init("0.0.0.0", LDAP_PORT); + int res = ldap_unbind(ldp); + ber_free(bep, 1); + ]]) + ],[ + curl_cv_ldap_LIBS="$x_nlibs" + ]) + fi + done + # + LIBS="$curl_cv_save_LIBS" + # + case X-"$curl_cv_ldap_LIBS" in + X-unknown) + AC_MSG_RESULT([cannot find LDAP libraries]) + ;; + X-) + AC_MSG_RESULT([no additional lib required]) + ;; + *) + if test -z "$curl_cv_save_LIBS"; then + LIBS="$curl_cv_ldap_LIBS" + else + LIBS="$curl_cv_ldap_LIBS $curl_cv_save_LIBS" + fi + AC_MSG_RESULT([$curl_cv_ldap_LIBS]) + ;; + esac + # +]) + + +dnl TYPE_SOCKADDR_STORAGE +dnl ------------------------------------------------- +dnl Check for struct sockaddr_storage. Most IPv6-enabled +dnl hosts have it, but AIX 4.3 is one known exception. + +AC_DEFUN([TYPE_SOCKADDR_STORAGE], +[ + AC_CHECK_TYPE([struct sockaddr_storage], + AC_DEFINE(HAVE_STRUCT_SOCKADDR_STORAGE, 1, + [if struct sockaddr_storage is defined]), , + [ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifdef HAVE_WINSOCK2_H +#include +#endif +#include +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + ]) +]) + +dnl CURL_CHECK_FUNC_RECV +dnl ------------------------------------------------- +dnl Test if the socket recv() function is available, + +AC_DEFUN([CURL_CHECK_FUNC_RECV], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + # + AC_MSG_CHECKING([for recv]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifdef HAVE_WINSOCK2_H +#include +#endif +#include +#else +$curl_includes_bsdsocket +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + recv(0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_recv="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_recv="no" + ]) + # + if test "$curl_cv_recv" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_RECV, 1, + [Define to 1 if you have the recv function.]) + curl_cv_func_recv="yes" + else + AC_MSG_ERROR([Unable to link function recv]) + fi +]) + + +dnl CURL_CHECK_FUNC_SEND +dnl ------------------------------------------------- +dnl Test if the socket send() function is available, + +AC_DEFUN([CURL_CHECK_FUNC_SEND], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + # + AC_MSG_CHECKING([for send]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifdef HAVE_WINSOCK2_H +#include +#endif +#include +#else +$curl_includes_bsdsocket +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + send(0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_send="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_send="no" + ]) + # + if test "$curl_cv_send" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_SEND, 1, + [Define to 1 if you have the send function.]) + curl_cv_func_send="yes" + else + AC_MSG_ERROR([Unable to link function send]) + fi +]) + +dnl CURL_CHECK_MSG_NOSIGNAL +dnl ------------------------------------------------- +dnl Check for MSG_NOSIGNAL + +AC_DEFUN([CURL_CHECK_MSG_NOSIGNAL], [ + AC_CHECK_HEADERS(sys/types.h sys/socket.h) + AC_CACHE_CHECK([for MSG_NOSIGNAL], [curl_cv_msg_nosignal], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifdef HAVE_WINSOCK2_H +#include +#endif +#include +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#endif + ]],[[ + int flag=MSG_NOSIGNAL; + ]]) + ],[ + curl_cv_msg_nosignal="yes" + ],[ + curl_cv_msg_nosignal="no" + ]) + ]) + case "$curl_cv_msg_nosignal" in + yes) + AC_DEFINE_UNQUOTED(HAVE_MSG_NOSIGNAL, 1, + [Define to 1 if you have the MSG_NOSIGNAL flag.]) + ;; + esac +]) + + +dnl CURL_CHECK_STRUCT_TIMEVAL +dnl ------------------------------------------------- +dnl Check for timeval struct + +AC_DEFUN([CURL_CHECK_STRUCT_TIMEVAL], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINSOCK2])dnl + AC_CHECK_HEADERS(sys/types.h sys/time.h sys/socket.h) + AC_CACHE_CHECK([for struct timeval], [curl_cv_struct_timeval], [ + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifdef HAVE_WINSOCK2_H +#include +#endif +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + ]],[[ + struct timeval ts; + ts.tv_sec = 0; + ts.tv_usec = 0; + ]]) + ],[ + curl_cv_struct_timeval="yes" + ],[ + curl_cv_struct_timeval="no" + ]) + ]) + case "$curl_cv_struct_timeval" in + yes) + AC_DEFINE_UNQUOTED(HAVE_STRUCT_TIMEVAL, 1, + [Define to 1 if you have the timeval struct.]) + ;; + esac +]) + + +dnl TYPE_IN_ADDR_T +dnl ------------------------------------------------- +dnl Check for in_addr_t: it is used to receive the return code of inet_addr() +dnl and a few other things. + +AC_DEFUN([TYPE_IN_ADDR_T], [ + AC_CHECK_TYPE([in_addr_t], ,[ + dnl in_addr_t not available + AC_CACHE_CHECK([for in_addr_t equivalent], + [curl_cv_in_addr_t_equiv], [ + curl_cv_in_addr_t_equiv="unknown" + for t in "unsigned long" int size_t unsigned long; do + if test "$curl_cv_in_addr_t_equiv" = "unknown"; then + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifdef HAVE_WINSOCK2_H +#include +#endif +#include +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + ]],[[ + $t data = inet_addr ("1.2.3.4"); + ]]) + ],[ + curl_cv_in_addr_t_equiv="$t" + ]) + fi + done + ]) + case "$curl_cv_in_addr_t_equiv" in + unknown) + AC_MSG_ERROR([Cannot find a type to use in place of in_addr_t]) + ;; + *) + AC_DEFINE_UNQUOTED(in_addr_t, $curl_cv_in_addr_t_equiv, + [Type to use in place of in_addr_t when system does not provide it.]) + ;; + esac + ],[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifdef HAVE_WINSOCK2_H +#include +#endif +#include +#else +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_ARPA_INET_H +#include +#endif +#endif + ]) +]) + + +dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC +dnl ------------------------------------------------- +dnl Check if monotonic clock_gettime is available. + +AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC], [ + AC_CHECK_HEADERS(sys/types.h sys/time.h) + AC_MSG_CHECKING([for monotonic clock_gettime]) + # + if test "x$dontwant_rt" = "xno" ; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include + ]],[[ + struct timespec ts; + (void)clock_gettime(CLOCK_MONOTONIC, &ts); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_func_clock_gettime="yes" + ],[ + AC_MSG_RESULT([no]) + curl_func_clock_gettime="no" + ]) + fi + dnl Definition of HAVE_CLOCK_GETTIME_MONOTONIC is intentionally postponed + dnl until library linking and run-time checks for clock_gettime succeed. +]) + +dnl CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC_RAW +dnl ------------------------------------------------- +dnl Check if monotonic clock_gettime is available. + +AC_DEFUN([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC_RAW], [ + AC_CHECK_HEADERS(sys/types.h sys/time.h) + AC_MSG_CHECKING([for raw monotonic clock_gettime]) + # + if test "x$dontwant_rt" = "xno" ; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include + ]],[[ + struct timespec ts; + (void)clock_gettime(CLOCK_MONOTONIC_RAW, &ts); + ]]) + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC_RAW, 1, + [Define to 1 if you have the clock_gettime function and raw monotonic timer.]) + ],[ + AC_MSG_RESULT([no]) + ]) + fi +]) + + +dnl CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC +dnl ------------------------------------------------- +dnl If monotonic clock_gettime is available then, +dnl check and prepended to LIBS any needed libraries. + +AC_DEFUN([CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC], [ + AC_REQUIRE([CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC])dnl + # + if test "$curl_func_clock_gettime" = "yes"; then + # + AC_MSG_CHECKING([for clock_gettime in libraries]) + # + curl_cv_save_LIBS="$LIBS" + curl_cv_gclk_LIBS="unknown" + # + for x_xlibs in '' '-lrt' '-lposix4' ; do + if test "$curl_cv_gclk_LIBS" = "unknown"; then + if test -z "$x_xlibs"; then + LIBS="$curl_cv_save_LIBS" + else + LIBS="$x_xlibs $curl_cv_save_LIBS" + fi + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include + ]],[[ + struct timespec ts; + (void)clock_gettime(CLOCK_MONOTONIC, &ts); + ]]) + ],[ + curl_cv_gclk_LIBS="$x_xlibs" + ]) + fi + done + # + LIBS="$curl_cv_save_LIBS" + # + case X-"$curl_cv_gclk_LIBS" in + X-unknown) + AC_MSG_RESULT([cannot find clock_gettime]) + AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) + curl_func_clock_gettime="no" + ;; + X-) + AC_MSG_RESULT([no additional lib required]) + curl_func_clock_gettime="yes" + ;; + *) + if test -z "$curl_cv_save_LIBS"; then + LIBS="$curl_cv_gclk_LIBS" + else + LIBS="$curl_cv_gclk_LIBS $curl_cv_save_LIBS" + fi + AC_MSG_RESULT([$curl_cv_gclk_LIBS]) + curl_func_clock_gettime="yes" + ;; + esac + # + dnl only do runtime verification when not cross-compiling + if test "x$cross_compiling" != "xyes" && + test "$curl_func_clock_gettime" = "yes"; then + AC_MSG_CHECKING([if monotonic clock_gettime works]) + CURL_RUN_IFELSE([ + AC_LANG_PROGRAM([[ +#include +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include + ]],[[ + struct timespec ts; + if (0 == clock_gettime(CLOCK_MONOTONIC, &ts)) + exit(0); + else + exit(1); + ]]) + ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_WARN([HAVE_CLOCK_GETTIME_MONOTONIC will not be defined]) + curl_func_clock_gettime="no" + LIBS="$curl_cv_save_LIBS" + ]) + fi + # + case "$curl_func_clock_gettime" in + yes) + AC_DEFINE_UNQUOTED(HAVE_CLOCK_GETTIME_MONOTONIC, 1, + [Define to 1 if you have the clock_gettime function and monotonic timer.]) + ;; + esac + # + fi + # +]) + + +dnl CURL_CHECK_LIBS_CONNECT +dnl ------------------------------------------------- +dnl Verify if network connect function is already available +dnl using current libraries or if another one is required. + +AC_DEFUN([CURL_CHECK_LIBS_CONNECT], [ + AC_REQUIRE([CURL_INCLUDES_WINSOCK2])dnl + AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl + AC_MSG_CHECKING([for connect in libraries]) + tst_connect_save_LIBS="$LIBS" + tst_connect_need_LIBS="unknown" + for tst_lib in '' '-lsocket' ; do + if test "$tst_connect_need_LIBS" = "unknown"; then + LIBS="$tst_lib $tst_connect_save_LIBS" + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + $curl_includes_winsock2 + $curl_includes_bsdsocket + #if !defined(HAVE_WINDOWS_H) && !defined(HAVE_PROTO_BSDSOCKET_H) + int connect(int, void*, int); + #endif + ]],[[ + if(0 != connect(0, 0, 0)) + return 1; + ]]) + ],[ + tst_connect_need_LIBS="$tst_lib" + ]) + fi + done + LIBS="$tst_connect_save_LIBS" + # + case X-"$tst_connect_need_LIBS" in + X-unknown) + AC_MSG_RESULT([cannot find connect]) + AC_MSG_ERROR([cannot find connect function in libraries.]) + ;; + X-) + AC_MSG_RESULT([yes]) + ;; + *) + AC_MSG_RESULT([$tst_connect_need_LIBS]) + LIBS="$tst_connect_need_LIBS $tst_connect_save_LIBS" + ;; + esac +]) + + +dnl CURL_DEFINE_UNQUOTED (VARIABLE, [VALUE]) +dnl ------------------------------------------------- +dnl Like AC_DEFINE_UNQUOTED this macro will define a C preprocessor +dnl symbol that can be further used in custom template configuration +dnl files. This macro, unlike AC_DEFINE_UNQUOTED, does not use a third +dnl argument for the description. Symbol definitions done with this +dnl macro are intended to be exclusively used in handcrafted *.h.in +dnl template files. Contrary to what AC_DEFINE_UNQUOTED does, this one +dnl prevents autoheader generation and insertion of symbol template +dnl stub and definition into the first configuration header file. Do +dnl not use this macro as a replacement for AC_DEFINE_UNQUOTED, each +dnl one serves different functional needs. + +AC_DEFUN([CURL_DEFINE_UNQUOTED], [ +cat >>confdefs.h <<_EOF +[@%:@define] $1 ifelse($#, 2, [$2], 1) +_EOF +]) + +dnl CURL_CONFIGURE_PULL_SYS_POLL +dnl ------------------------------------------------- +dnl The need for the sys/poll.h inclusion arises mainly to properly +dnl interface AIX systems which define macros 'events' and 'revents'. + +AC_DEFUN([CURL_CONFIGURE_PULL_SYS_POLL], [ + AC_REQUIRE([CURL_INCLUDES_POLL])dnl + # + tst_poll_events_macro_defined="unknown" + # + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + $curl_includes_poll + ]],[[ +#if defined(events) || defined(revents) + return 0; +#else + force compilation error +#endif + ]]) + ],[ + tst_poll_events_macro_defined="yes" + ],[ + tst_poll_events_macro_defined="no" + ]) + # + if test "$tst_poll_events_macro_defined" = "yes"; then + if test "x$ac_cv_header_sys_poll_h" = "xyes"; then + CURL_DEFINE_UNQUOTED([CURL_PULL_SYS_POLL_H]) + fi + fi + # +]) + + +dnl CURL_CHECK_FUNC_SELECT +dnl ------------------------------------------------- +dnl Test if the socket select() function is available. + +AC_DEFUN([CURL_CHECK_FUNC_SELECT], [ + AC_REQUIRE([CURL_CHECK_STRUCT_TIMEVAL])dnl + AC_REQUIRE([CURL_INCLUDES_BSDSOCKET])dnl + AC_CHECK_HEADERS(sys/select.h sys/socket.h) + # + AC_MSG_CHECKING([for select]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifdef HAVE_WINSOCK2_H +#include +#endif +#include +#endif +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#include +#ifndef HAVE_WINDOWS_H +#ifdef HAVE_SYS_SELECT_H +#include +#elif defined(HAVE_UNISTD_H) +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +$curl_includes_bsdsocket +#endif + ]],[[ + select(0, 0, 0, 0, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + curl_cv_select="yes" + ],[ + AC_MSG_RESULT([no]) + curl_cv_select="no" + ]) + # + if test "$curl_cv_select" = "yes"; then + AC_DEFINE_UNQUOTED(HAVE_SELECT, 1, + [Define to 1 if you have the select function.]) + curl_cv_func_select="yes" + fi +]) + + +dnl CURL_VERIFY_RUNTIMELIBS +dnl ------------------------------------------------- +dnl Verify that the shared libs found so far can be used when running +dnl programs, since otherwise the situation will create odd configure errors +dnl that are misleading people. +dnl +dnl Make sure this test is run BEFORE the first test in the script that +dnl runs anything, which at the time of this writing is the AC_CHECK_SIZEOF +dnl macro. It must also run AFTER all lib-checking macros are complete. + +AC_DEFUN([CURL_VERIFY_RUNTIMELIBS], [ + + dnl this test is of course not sensible if we are cross-compiling! + if test "x$cross_compiling" != xyes; then + + dnl just run a program to verify that the libs checked for previous to this + dnl point also is available run-time! + AC_MSG_CHECKING([run-time libs availability]) + CURL_RUN_IFELSE([ +int main() +{ + return 0; +} +], + AC_MSG_RESULT([fine]), + AC_MSG_RESULT([failed]) + AC_MSG_ERROR([one or more libs available at link-time are not available run-time. Libs used at link-time: $LIBS]) + ) + + dnl if this test fails, configure has already stopped + fi +]) + + +dnl CURL_CHECK_CA_BUNDLE +dnl ------------------------------------------------- +dnl Check if a default ca-bundle should be used +dnl +dnl regarding the paths this will scan: +dnl /etc/ssl/certs/ca-certificates.crt Debian systems +dnl /etc/pki/tls/certs/ca-bundle.crt Redhat and Mandriva +dnl /usr/share/ssl/certs/ca-bundle.crt old(er) Redhat +dnl /usr/local/share/certs/ca-root-nss.crt MidnightBSD +dnl /etc/ssl/cert.pem OpenBSD, MidnightBSD (symlink) +dnl /etc/ssl/certs (CA path) SUSE, FreeBSD + +AC_DEFUN([CURL_CHECK_CA_BUNDLE], [ + + AC_MSG_CHECKING([default CA cert bundle/path]) + + AC_ARG_WITH(ca-bundle, +AS_HELP_STRING([--with-ca-bundle=FILE], +[Path to a file containing CA certificates (example: /etc/ca-bundle.crt)]) +AS_HELP_STRING([--without-ca-bundle], [Don't use a default CA bundle]), + [ + want_ca="$withval" + if test "x$want_ca" = "xyes"; then + AC_MSG_ERROR([--with-ca-bundle=FILE requires a path to the CA bundle]) + fi + ], + [ want_ca="unset" ]) + AC_ARG_WITH(ca-path, +AS_HELP_STRING([--with-ca-path=DIRECTORY], +[Path to a directory containing CA certificates stored individually, with \ +their filenames in a hash format. This option can be used with the OpenSSL, \ +GnuTLS, mbedTLS and wolfSSL backends. Refer to OpenSSL c_rehash for details. \ +(example: /etc/certificates)]) +AS_HELP_STRING([--without-ca-path], [Don't use a default CA path]), + [ + want_capath="$withval" + if test "x$want_capath" = "xyes"; then + AC_MSG_ERROR([--with-ca-path=DIRECTORY requires a path to the CA path directory]) + fi + ], + [ want_capath="unset"]) + + ca_warning=" (warning: certs not found)" + capath_warning=" (warning: certs not found)" + check_capath="" + + if test "x$want_ca" != "xno" -a "x$want_ca" != "xunset" -a \ + "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then + dnl both given + ca="$want_ca" + capath="$want_capath" + elif test "x$want_ca" != "xno" -a "x$want_ca" != "xunset"; then + dnl --with-ca-bundle given + ca="$want_ca" + capath="no" + elif test "x$want_capath" != "xno" -a "x$want_capath" != "xunset"; then + dnl --with-ca-path given + if test "x$OPENSSL_ENABLED" != "x1" -a \ + "x$GNUTLS_ENABLED" != "x1" -a \ + "x$MBEDTLS_ENABLED" != "x1" -a \ + "x$WOLFSSL_ENABLED" != "x1"; then + AC_MSG_ERROR([--with-ca-path only works with OpenSSL, GnuTLS, mbedTLS or wolfSSL]) + fi + capath="$want_capath" + ca="no" + else + dnl first try autodetecting a CA bundle , then a CA path + dnl both autodetections can be skipped by --without-ca-* + ca="no" + capath="no" + if test "x$cross_compiling" != "xyes"; then + dnl NOT cross-compiling and... + dnl neither of the --with-ca-* options are provided + if test "x$want_ca" = "xunset"; then + dnl the path we previously would have installed the curl ca bundle + dnl to, and thus we now check for an already existing cert in that + dnl place in case we find no other + if test "x$prefix" != xNONE; then + cac="${prefix}/share/curl/curl-ca-bundle.crt" + else + cac="$ac_default_prefix/share/curl/curl-ca-bundle.crt" + fi + + for a in /etc/ssl/certs/ca-certificates.crt \ + /etc/pki/tls/certs/ca-bundle.crt \ + /usr/share/ssl/certs/ca-bundle.crt \ + /usr/local/share/certs/ca-root-nss.crt \ + /etc/ssl/cert.pem \ + "$cac"; do + if test -f "$a"; then + ca="$a" + break + fi + done + fi + AC_MSG_NOTICE([want $want_capath ca $ca]) + if test "x$want_capath" = "xunset"; then + if test "x$OPENSSL_ENABLED" = "x1" -o \ + "x$GNUTLS_ENABLED" = "x1" -o \ + "x$MBEDTLS_ENABLED" = "x1" -o \ + "x$WOLFSSL_ENABLED" = "x1"; then + check_capath="/etc/ssl/certs" + fi + fi + else + dnl no option given and cross-compiling + AC_MSG_WARN([skipped the ca-cert path detection when cross-compiling]) + fi + fi + + if test "x$ca" = "xno" || test -f "$ca"; then + ca_warning="" + fi + + if test "x$capath" != "xno"; then + check_capath="$capath" + fi + + if test ! -z "$check_capath"; then + for a in "$check_capath"; do + if test -d "$a" && ls "$a"/[[0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f]].0 >/dev/null 2>/dev/null; then + if test "x$capath" = "xno"; then + capath="$a" + fi + capath_warning="" + break + fi + done + fi + + if test "x$capath" = "xno"; then + capath_warning="" + fi + + if test "x$ca" != "xno"; then + CURL_CA_BUNDLE='"'$ca'"' + AC_DEFINE_UNQUOTED(CURL_CA_BUNDLE, "$ca", [Location of default ca bundle]) + AC_SUBST(CURL_CA_BUNDLE) + AC_MSG_RESULT([$ca]) + fi + if test "x$capath" != "xno"; then + CURL_CA_PATH="\"$capath\"" + AC_DEFINE_UNQUOTED(CURL_CA_PATH, "$capath", [Location of default ca path]) + AC_MSG_RESULT([$capath (capath)]) + fi + if test "x$ca" = "xno" && test "x$capath" = "xno"; then + AC_MSG_RESULT([no]) + fi + + AC_MSG_CHECKING([whether to use builtin CA store of SSL library]) + AC_ARG_WITH(ca-fallback, +AS_HELP_STRING([--with-ca-fallback], [Use the built in CA store of the SSL library]) +AS_HELP_STRING([--without-ca-fallback], [Don't use the built in CA store of the SSL library]), + [ + if test "x$with_ca_fallback" != "xyes" -a "x$with_ca_fallback" != "xno"; then + AC_MSG_ERROR([--with-ca-fallback only allows yes or no as parameter]) + fi + ], + [ with_ca_fallback="no"]) + AC_MSG_RESULT([$with_ca_fallback]) + if test "x$with_ca_fallback" = "xyes"; then + if test "x$OPENSSL_ENABLED" != "x1" -a "x$GNUTLS_ENABLED" != "x1"; then + AC_MSG_ERROR([--with-ca-fallback only works with OpenSSL or GnuTLS]) + fi + AC_DEFINE_UNQUOTED(CURL_CA_FALLBACK, 1, [define "1" to use built in CA store of SSL library ]) + fi +]) + +dnl CURL_CHECK_WIN32_LARGEFILE +dnl ------------------------------------------------- +dnl Check if curl's WIN32 large file will be used + +AC_DEFUN([CURL_CHECK_WIN32_LARGEFILE], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_MSG_CHECKING([whether build target supports WIN32 file API]) + curl_win32_file_api="no" + if test "$curl_cv_header_windows_h" = "yes"; then + if test x"$enable_largefile" != "xno"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ +#if !defined(_WIN32_WCE) && \ + (defined(__MINGW32__) || \ + (defined(_MSC_VER) && (defined(_WIN32) || defined(_WIN64)))) + int dummy=1; +#else + WIN32 large file API not supported. +#endif + ]]) + ],[ + curl_win32_file_api="win32_large_files" + ]) + fi + if test "$curl_win32_file_api" = "no"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ +#if defined(_WIN32_WCE) || defined(__MINGW32__) || defined(_MSC_VER) + int dummy=1; +#else + WIN32 small file API not supported. +#endif + ]]) + ],[ + curl_win32_file_api="win32_small_files" + ]) + fi + fi + case "$curl_win32_file_api" in + win32_large_files) + AC_MSG_RESULT([yes (large file enabled)]) + AC_DEFINE_UNQUOTED(USE_WIN32_LARGE_FILES, 1, + [Define to 1 if you are building a Windows target with large file support.]) + AC_SUBST(USE_WIN32_LARGE_FILES, [1]) + ;; + win32_small_files) + AC_MSG_RESULT([yes (large file disabled)]) + AC_DEFINE_UNQUOTED(USE_WIN32_SMALL_FILES, 1, + [Define to 1 if you are building a Windows target without large file support.]) + AC_SUBST(USE_WIN32_SMALL_FILES, [1]) + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +]) + +dnl CURL_CHECK_WIN32_CRYPTO +dnl ------------------------------------------------- +dnl Check if curl's WIN32 crypto lib can be used + +AC_DEFUN([CURL_CHECK_WIN32_CRYPTO], [ + AC_REQUIRE([CURL_CHECK_HEADER_WINDOWS])dnl + AC_MSG_CHECKING([whether build target supports WIN32 crypto API]) + curl_win32_crypto_api="no" + if test "$curl_cv_header_windows_h" = "yes"; then + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#undef inline +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#include +#include + ]],[[ + HCRYPTPROV hCryptProv; + if(CryptAcquireContext(&hCryptProv, NULL, NULL, PROV_RSA_FULL, + CRYPT_VERIFYCONTEXT | CRYPT_SILENT)) { + CryptReleaseContext(hCryptProv, 0); + } + ]]) + ],[ + curl_win32_crypto_api="yes" + ]) + fi + case "$curl_win32_crypto_api" in + yes) + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(USE_WIN32_CRYPTO, 1, + [Define to 1 if you are building a Windows target with crypto API support.]) + AC_SUBST(USE_WIN32_CRYPTO, [1]) + ;; + *) + AC_MSG_RESULT([no]) + ;; + esac +]) + +dnl CURL_EXPORT_PCDIR ($pcdir) +dnl ------------------------ +dnl if $pcdir is not empty, set PKG_CONFIG_LIBDIR to $pcdir and export +dnl +dnl we need this macro since pkg-config distinguishes among empty and unset +dnl variable while checking PKG_CONFIG_LIBDIR +dnl + +AC_DEFUN([CURL_EXPORT_PCDIR], [ + if test -n "$1"; then + PKG_CONFIG_LIBDIR="$1" + export PKG_CONFIG_LIBDIR + fi +]) + +dnl CURL_CHECK_PKGCONFIG ($module, [$pcdir]) +dnl ------------------------ +dnl search for the pkg-config tool. Set the PKGCONFIG variable to hold the +dnl path to it, or 'no' if not found/present. +dnl +dnl If pkg-config is present, check that it has info about the $module or +dnl return "no" anyway! +dnl +dnl Optionally PKG_CONFIG_LIBDIR may be given as $pcdir. +dnl + +AC_DEFUN([CURL_CHECK_PKGCONFIG], [ + if test -n "$PKG_CONFIG"; then + PKGCONFIG="$PKG_CONFIG" + else + AC_PATH_TOOL([PKGCONFIG], [pkg-config], [no], + [$PATH:/usr/bin:/usr/local/bin]) + fi + + if test "x$PKGCONFIG" != "xno"; then + AC_MSG_CHECKING([for $1 options with pkg-config]) + dnl ask pkg-config about $1 + itexists=`CURL_EXPORT_PCDIR([$2]) dnl + $PKGCONFIG --exists $1 >/dev/null 2>&1 && echo 1` + + if test -z "$itexists"; then + dnl pkg-config does not have info about the given module! set the + dnl variable to 'no' + PKGCONFIG="no" + AC_MSG_RESULT([no]) + else + AC_MSG_RESULT([found]) + fi + fi +]) + + +dnl CURL_GENERATE_CONFIGUREHELP_PM +dnl ------------------------------------------------- +dnl Generate test harness configurehelp.pm module, defining and +dnl initializing some perl variables with values which are known +dnl when the configure script runs. For portability reasons, test +dnl harness needs information on how to run the C preprocessor. + +AC_DEFUN([CURL_GENERATE_CONFIGUREHELP_PM], [ + AC_REQUIRE([AC_PROG_CPP])dnl + tmp_cpp=`eval echo "$ac_cpp" 2>/dev/null` + if test -z "$tmp_cpp"; then + tmp_cpp='cpp' + fi + cat >./tests/configurehelp.pm <<_EOF +[@%:@] This is a generated file. Do not edit. + +package configurehelp; + +use strict; +use warnings; +use Exporter; + +use vars qw( + @ISA + @EXPORT_OK + \$Cpreprocessor + ); + +@ISA = qw(Exporter); + +@EXPORT_OK = qw( + \$Cpreprocessor + ); + +\$Cpreprocessor = '$tmp_cpp'; + +1; +_EOF +]) + +dnl CURL_CPP_P +dnl +dnl Check if $cpp -P should be used for extract define values due to gcc 5 +dnl splitting up strings and defines between line outputs. gcc by default +dnl (without -P) will show TEST EINVAL TEST as +dnl +dnl # 13 "conftest.c" +dnl TEST +dnl # 13 "conftest.c" 3 4 +dnl 22 +dnl # 13 "conftest.c" +dnl TEST + +AC_DEFUN([CURL_CPP_P], [ + AC_MSG_CHECKING([if cpp -P is needed]) + AC_EGREP_CPP([TEST.*TEST], [ + #include +TEST EINVAL TEST + ], [cpp=no], [cpp=yes]) + AC_MSG_RESULT([$cpp]) + + dnl we need cpp -P so check if it works then + if test "x$cpp" = "xyes"; then + AC_MSG_CHECKING([if cpp -P works]) + OLDCPPFLAGS=$CPPFLAGS + CPPFLAGS="$CPPFLAGS -P" + AC_EGREP_CPP([TEST.*TEST], [ + #include +TEST EINVAL TEST + ], [cpp_p=yes], [cpp_p=no]) + AC_MSG_RESULT([$cpp_p]) + + if test "x$cpp_p" = "xno"; then + AC_MSG_WARN([failed to figure out cpp -P alternative]) + # without -P + CPPPFLAG="" + else + # with -P + CPPPFLAG="-P" + fi + dnl restore CPPFLAGS + CPPFLAGS=$OLDCPPFLAGS + else + # without -P + CPPPFLAG="" + fi +]) + + +dnl CURL_DARWIN_CFLAGS +dnl +dnl Set -Werror=partial-availability to detect possible breaking code +dnl with very low deployment targets. +dnl + +AC_DEFUN([CURL_DARWIN_CFLAGS], [ + + tst_cflags="no" + case $host_os in + darwin*) + tst_cflags="yes" + ;; + esac + + AC_MSG_CHECKING([for good-to-use Darwin CFLAGS]) + AC_MSG_RESULT([$tst_cflags]); + + if test "$tst_cflags" = "yes"; then + old_CFLAGS=$CFLAGS + CFLAGS="$CFLAGS -Werror=partial-availability" + AC_MSG_CHECKING([whether $CC accepts -Werror=partial-availability]) + AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], + [AC_MSG_RESULT([yes])], + [AC_MSG_RESULT([no]) + CFLAGS=$old_CFLAGS]) + fi + +]) + + +dnl CURL_SUPPORTS_BUILTIN_AVAILABLE +dnl +dnl Check to see if the compiler supports __builtin_available. This built-in +dnl compiler function first appeared in Apple LLVM 9.0.0. It's so new that, at +dnl the time this macro was written, the function was not yet documented. Its +dnl purpose is to return true if the code is running under a certain OS version +dnl or later. + +AC_DEFUN([CURL_SUPPORTS_BUILTIN_AVAILABLE], [ + AC_MSG_CHECKING([to see if the compiler supports __builtin_available()]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include + ]],[[ + if (__builtin_available(macOS 10.8, iOS 5.0, *)) {} + ]]) + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE_UNQUOTED(HAVE_BUILTIN_AVAILABLE, 1, + [Define to 1 if you have the __builtin_available function.]) + ],[ + AC_MSG_RESULT([no]) + ]) +]) diff --git a/deps/curl/appveyor.yml b/deps/curl/appveyor.yml new file mode 100644 index 0000000..175f298 --- /dev/null +++ b/deps/curl/appveyor.yml @@ -0,0 +1,443 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +# https://ci.appveyor.com/project/curlorg/curl/history +# AppVeyor configuration: +# https://www.appveyor.com/docs/appveyor-yml/ +# AppVeyor worker images: +# https://www.appveyor.com/docs/windows-images-software/ + +version: 7.50.0.{build} + +environment: + UNITY: 'OFF' + OPENSSL: 'OFF' + DEBUG: 'ON' + SHARED: 'OFF' + matrix: + # generated CMake-based Visual Studio Release builds + - job_name: 'CMake, VS2008, Release, x86, Schannel, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' + BUILD_SYSTEM: CMake + PRJ_GEN: 'Visual Studio 9 2008' + PRJ_CFG: Release + SCHANNEL: 'ON' + ENABLE_UNICODE: 'OFF' + HTTP_ONLY: 'OFF' + SHARED: 'ON' + TESTING: 'OFF' + DISABLED_TESTS: '' + - job_name: 'CMake, VS2022, Release, x64, OpenSSL 3, WebSockets, Unity, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' + BUILD_SYSTEM: CMake + PRJ_GEN: 'Visual Studio 17 2022' + TARGET: '-A x64' + PRJ_CFG: Release + OPENSSL: 'ON' + SCHANNEL: 'OFF' + ENABLE_UNICODE: 'OFF' + HTTP_ONLY: 'OFF' + SHARED: 'ON' + TESTING: 'OFF' + DISABLED_TESTS: '' + WEBSOCKETS: 'ON' + UNITY: 'ON' + - job_name: 'CMake, VS2022, Release, arm64, Schannel, Static, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' + BUILD_SYSTEM: CMake + PRJ_GEN: 'Visual Studio 17 2022' + TARGET: '-A ARM64' + PRJ_CFG: Release + SCHANNEL: 'ON' + ENABLE_UNICODE: 'OFF' + HTTP_ONLY: 'OFF' + TESTING: 'OFF' + DISABLED_TESTS: '' + # generated CMake-based Visual Studio Debug builds + - job_name: 'CMake, VS2010, Debug, x64, no SSL, Static' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' + BUILD_SYSTEM: CMake + PRJ_GEN: 'Visual Studio 10 2010 Win64' + PRJ_CFG: Debug + SCHANNEL: 'OFF' + ENABLE_UNICODE: 'OFF' + HTTP_ONLY: 'OFF' + TESTING: 'ON' + DISABLED_TESTS: '!1139 !1501' + ADD_PATH: 'C:\msys64\usr\bin' + - job_name: 'CMake, VS2022, Debug, x64, Schannel, Static, Unicode' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' + BUILD_SYSTEM: CMake + PRJ_GEN: 'Visual Studio 17 2022' + TARGET: '-A x64' + PRJ_CFG: Debug + SCHANNEL: 'ON' + ENABLE_UNICODE: 'ON' + HTTP_ONLY: 'OFF' + TESTING: 'ON' + DISABLED_TESTS: '!1139 !1501' + ADD_PATH: 'C:\msys64\usr\bin' + - job_name: 'CMake, VS2022, Debug, x64, no SSL, Static' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' + BUILD_SYSTEM: CMake + PRJ_GEN: 'Visual Studio 17 2022' + TARGET: '-A x64' + PRJ_CFG: Debug + SCHANNEL: 'OFF' + ENABLE_UNICODE: 'OFF' + HTTP_ONLY: 'OFF' + TESTING: 'ON' + DISABLED_TESTS: '!1139 !1501' + ADD_PATH: 'C:\msys64\usr\bin' + - job_name: 'CMake, VS2022, Debug, x64, no SSL, Static, HTTP only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' + BUILD_SYSTEM: CMake + PRJ_GEN: 'Visual Studio 17 2022' + TARGET: '-A x64' + PRJ_CFG: Debug + SCHANNEL: 'OFF' + ENABLE_UNICODE: 'OFF' + HTTP_ONLY: 'ON' + TESTING: 'ON' + DISABLED_TESTS: '!1139 !1501' + ADD_PATH: 'C:\msys64\usr\bin' + # generated CMake-based MSYS Makefiles builds (mingw cross-compiling) + - job_name: 'CMake, mingw-w64, gcc 13, Debug, x64, Schannel, Static, Unicode, Unity' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' + BUILD_SYSTEM: CMake + PRJ_GEN: 'MSYS Makefiles' + PRJ_CFG: Debug + SCHANNEL: 'ON' + ENABLE_UNICODE: 'ON' + HTTP_ONLY: 'OFF' + TESTING: 'ON' + DISABLED_TESTS: '!1086 !1139 !1451 !1501' + ADD_PATH: 'C:\msys64\mingw64\bin;C:\msys64\usr\bin' + MSYS2_ARG_CONV_EXCL: '/*' + BUILD_OPT: -k + UNITY: 'ON' + - job_name: 'CMake, mingw-w64, gcc 7, Debug, x64, Schannel, Static, Unicode' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' + BUILD_SYSTEM: CMake + PRJ_GEN: 'MSYS Makefiles' + PRJ_CFG: Debug + SCHANNEL: 'ON' + ENABLE_UNICODE: 'ON' + HTTP_ONLY: 'OFF' + TESTING: 'ON' + DISABLED_TESTS: '!1086 !1139 !1451 !1501' + ADD_PATH: 'C:\mingw-w64\x86_64-7.2.0-posix-seh-rt_v5-rev1\mingw64\bin;C:\msys64\usr\bin' + MSYS2_ARG_CONV_EXCL: '/*' + BUILD_OPT: -k + - job_name: 'CMake, mingw-w64, gcc 9, Debug, x64, Schannel, Static, Unity' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' + BUILD_SYSTEM: CMake + PRJ_GEN: 'MSYS Makefiles' + PRJ_CFG: Debug + SCHANNEL: 'ON' + ENABLE_UNICODE: 'OFF' + HTTP_ONLY: 'OFF' + TESTING: 'ON' + # test 286 disabled due to https://github.com/curl/curl/issues/12040 + DISABLED_TESTS: '~286 !1086 !1139 !1451 !1501' + ADD_PATH: 'C:\msys64\mingw64\bin;C:\msys64\usr\bin' + MSYS2_ARG_CONV_EXCL: '/*' + BUILD_OPT: -k + UNITY: 'ON' + - job_name: 'CMake, mingw-w64, gcc 6, Debug, x86, Schannel, Static' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' + BUILD_SYSTEM: CMake + PRJ_GEN: 'MSYS Makefiles' + PRJ_CFG: Debug + SCHANNEL: 'ON' + ENABLE_UNICODE: 'OFF' + HTTP_ONLY: 'OFF' + TESTING: 'ON' + DISABLED_TESTS: '!1086 !1139 !1451 !1501' + ADD_PATH: 'C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin;C:\msys64\usr\bin' + MSYS2_ARG_CONV_EXCL: '/*' + BUILD_OPT: -k + # winbuild-based builds + - job_name: 'winbuild, VS2015, Debug, x64, OpenSSL 1.1.1, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' + BUILD_SYSTEM: winbuild_vs2015 + DEBUG: 'yes' + PATHPART: debug + TESTING: 'OFF' + ENABLE_UNICODE: 'no' + - job_name: 'winbuild, VS2015, Release, x64, OpenSSL 1.1.1, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' + BUILD_SYSTEM: winbuild_vs2015 + DEBUG: 'no' + PATHPART: release + TESTING: 'OFF' + ENABLE_UNICODE: 'no' + - job_name: 'winbuild, VS2017, Debug, x64, OpenSSL 1.1.1, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' + BUILD_SYSTEM: winbuild_vs2017 + DEBUG: 'yes' + PATHPART: debug + TESTING: 'OFF' + ENABLE_UNICODE: 'no' + - job_name: 'winbuild, VS2017, Release, x64, OpenSSL 1.1.1, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' + BUILD_SYSTEM: winbuild_vs2017 + DEBUG: 'no' + PATHPART: release + TESTING: 'OFF' + ENABLE_UNICODE: 'no' + - job_name: 'winbuild, VS2015, Debug, x64, OpenSSL 1.1.1, Unicode, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' + BUILD_SYSTEM: winbuild_vs2015 + DEBUG: 'yes' + PATHPART: debug + TESTING: 'OFF' + ENABLE_UNICODE: 'yes' + - job_name: 'winbuild, VS2015, Release, x64, OpenSSL 1.1.1, Unicode, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2015' + BUILD_SYSTEM: winbuild_vs2015 + DEBUG: 'no' + PATHPART: release + TESTING: 'OFF' + ENABLE_UNICODE: 'yes' + - job_name: 'winbuild, VS2017, Debug, x64, OpenSSL 1.1.1, Unicode, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' + BUILD_SYSTEM: winbuild_vs2017 + DEBUG: 'yes' + PATHPART: debug + TESTING: 'OFF' + ENABLE_UNICODE: 'yes' + - job_name: 'winbuild, VS2017, Release, x64, OpenSSL 1.1.1, Unicode, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' + BUILD_SYSTEM: winbuild_vs2017 + DEBUG: 'no' + PATHPART: release + TESTING: 'OFF' + ENABLE_UNICODE: 'yes' + # generated VisualStudioSolution-based builds + - job_name: 'VisualStudioSolution, VS2017, Debug, x86, Schannel, Build-only' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' + BUILD_SYSTEM: VisualStudioSolution + PRJ_CFG: 'DLL Debug - DLL Windows SSPI - DLL WinIDN' + TESTING: 'OFF' + VC_VERSION: VC14.10 + # autotools-based builds (NOT mingw cross-compiling, but msys2 native) + - job_name: 'autotools, msys2, Debug, x86_64, no Proxy, no SSL' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' + BUILD_SYSTEM: autotools + TESTING: 'ON' + DISABLED_TESTS: '!19 !1233' + ADD_PATH: 'C:\msys64\usr\bin' + CONFIG_ARGS: '--enable-debug --enable-werror --disable-threaded-resolver --disable-proxy --without-ssl --enable-websockets' + - job_name: 'autotools, msys2, Debug, x86_64, no SSL' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' + BUILD_SYSTEM: autotools + TESTING: 'ON' + DISABLED_TESTS: '!19 !504 !704 !705 !1233' + ADD_PATH: 'C:\msys64\usr\bin' + CONFIG_ARGS: '--enable-debug --enable-werror --disable-threaded-resolver --without-ssl --enable-websockets' + - job_name: 'autotools, msys2, Release, x86_64, no SSL' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2017' + BUILD_SYSTEM: autotools + TESTING: 'ON' + DISABLED_TESTS: '!19 !504 !704 !705 !1233' + ADD_PATH: 'C:\msys64\usr\bin' + CONFIG_ARGS: '--enable-warnings --enable-werror --without-ssl --enable-websockets' + # autotools-based Cygwin build + - job_name: 'autotools, cygwin, Debug, x86_64, no SSL' + APPVEYOR_BUILD_WORKER_IMAGE: 'Visual Studio 2022' + BUILD_SYSTEM: autotools + TESTING: 'ON' + DISABLED_TESTS: '' + ADD_PATH: 'C:\cygwin64\bin' + CONFIG_ARGS: '--enable-debug --enable-werror --disable-threaded-resolver --without-ssl --enable-websockets' + POSIX_PATH_PREFIX: '/cygdrive' + +install: + - ps: | + if($env:ADD_PATH -ne $null) { + $env:PATH = "$env:ADD_PATH;$env:PATH" + } + +build_script: + - ps: | + function Pull-BatchFile-Env { + param([string]$Path, [string]$Parameters) + $tempFile = [IO.Path]::GetTempFileName() + cmd.exe /c " `"$Path`" $Parameters && set " > $tempFile + Get-Content $tempFile | ForEach-Object { if($_ -match '^(.*?)=(.*)$') { Set-Content "env:\$($matches[1])" $matches[2] } } + Remove-Item $tempFile + } + + $ErrorActionPreference = 'Stop' + + if($env:APPVEYOR_BUILD_WORKER_IMAGE -eq 'Visual Studio 2022') { + $openssl_root = 'C:\OpenSSL-v30-Win64' + } + else { + $openssl_root = 'C:\OpenSSL-v111-Win64' + } + + if($env:BUILD_SYSTEM -eq 'CMake') { + + $options = @('-DCURL_WERROR=ON') + $options += "-G$env:PRJ_GEN" + if($env:TARGET -ne $null) { + $options += "$env:TARGET" + if($env:TARGET.Contains('ARM64')) { + $env:SKIP_RUN = 'ARM64 architecture' + } + } + $options += "-DCURL_USE_OPENSSL=$env:OPENSSL" + if($env:OPENSSL -eq 'ON') { + $options += "-DOPENSSL_ROOT_DIR=$openssl_root" + } + $options += "-DCURL_USE_SCHANNEL=$env:SCHANNEL" + $options += "-DHTTP_ONLY=$env:HTTP_ONLY" + $options += "-DBUILD_SHARED_LIBS=$env:SHARED" + $options += "-DBUILD_TESTING=$env:TESTING" + $options += "-DENABLE_WEBSOCKETS=$env:WEBSOCKETS" + $options += "-DCMAKE_UNITY_BUILD=$env:UNITY" + $options += "-DENABLE_DEBUG=$env:DEBUG" + $options += "-DENABLE_UNICODE=$env:ENABLE_UNICODE" + $options += '-DCMAKE_INSTALL_PREFIX=C:/CURL' + $options += "-DCMAKE_BUILD_TYPE=$env:PRJ_CFG" + if($env:PRJ_CFG -eq 'Debug') { + $options += '-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG=' + } + elseif ($env:PRJ_CFG -eq 'Release') { + $options += '-DCMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE=' + } + if($env:PRJ_GEN.Contains('Visual Studio')) { + $options += '-DCMAKE_VS_GLOBALS=TrackFileAccess=false' + } + if($env:PRJ_GEN -eq 'Visual Studio 9 2008') { + # Without this it fails to run due to missing MSVCR90.dll + $options += '-DCURL_STATIC_CRT=ON' + } + + Write-Host 'CMake options:' $options + cmake . $options + cmake --build . --config $env:PRJ_CFG --parallel 2 --clean-first -- $env:BUILD_OPT + if($env:SHARED -eq 'ON') { + Copy-Item -Path 'C:\Projects\curl\lib\*.dll' -Destination 'C:\projects\curl\src' + Copy-Item -Path 'C:\Projects\curl\lib\*.dll' -Destination 'C:\projects\curl\tests\libtest' + } + if($env:OPENSSL -eq 'ON') { + Copy-Item -Path "$openssl_root\*.dll" -Destination 'C:\projects\curl\src' + } + $curl = '.\src\curl.exe' + } + elseif($env:BUILD_SYSTEM -eq 'VisualStudioSolution') { + cd projects + .\generate.bat $env:VC_VERSION + msbuild.exe -maxcpucount "-property:Configuration=$env:PRJ_CFG" "Windows\$env:VC_VERSION\curl-all.sln" + $curl = "..\build\Win32\$env:VC_VERSION\$env:PRJ_CFG\curld.exe" + } + elseif($env:BUILD_SYSTEM -eq 'winbuild_vs2015') { + .\buildconf.bat + cd winbuild + Pull-BatchFile-Env 'C:\Program Files\Microsoft SDKs\Windows\v7.1\Bin\SetEnv.cmd' /x64 + Pull-BatchFile-Env 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat' x86_amd64 + nmake /nologo /f Makefile.vc mode=dll VC=14 "SSL_PATH=$openssl_root" WITH_SSL=dll MACHINE=x64 DEBUG=$env:DEBUG ENABLE_UNICODE=$env:ENABLE_UNICODE + $curl = "..\builds\libcurl-vc14-x64-$env:PATHPART-dll-ssl-dll-ipv6-sspi\bin\curl.exe" + } + elseif($env:BUILD_SYSTEM -eq 'winbuild_vs2017') { + .\buildconf.bat + cd winbuild + Pull-BatchFile-Env 'C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Auxiliary\Build\vcvars64.bat' + nmake /nologo /f Makefile.vc mode=dll VC=14.10 "SSL_PATH=$openssl_root" WITH_SSL=dll MACHINE=x64 DEBUG=$env:DEBUG ENABLE_UNICODE=$env:ENABLE_UNICODE + $curl = "..\builds\libcurl-vc14.10-x64-$env:PATHPART-dll-ssl-dll-ipv6-sspi\bin\curl.exe" + } + elseif($env:BUILD_SYSTEM -eq 'autotools') { + & bash -e -c "cd $env:POSIX_PATH_PREFIX/c/projects/curl && autoreconf -fi 2>&1 && ./configure $env:CONFIG_ARGS 2>&1 && make V=1 && make V=1 examples && cd tests && make V=1" + $curl = '.\src\curl.exe' + } + + Get-ChildItem -Path C:\projects\curl -Include ('*.exe', '*.dll') -Recurse -Name + if($env:SKIP_RUN -eq $null) { + cmd.exe /c "`"$curl`" -V 2>&1" + if(-not $?) { + Write-Host "Error running curl: '$curl':" ("0x" + $LastExitCode.ToString("X")) + exit 1 + } + } + else { + Write-Host "Skip running curl.exe. Reason: $env:SKIP_RUN" + } + + if($false) { + if(Test-Path CMakeFiles/CMakeConfigureLog.yaml) { cat CMakeFiles/CMakeConfigureLog.yaml } + if(Test-Path CMakeFiles/CMakeOutput.log) { cat CMakeFiles/CMakeOutput.log } + if(Test-Path CMakeFiles/CMakeError.log) { cat CMakeFiles/CMakeError.log } + if(Test-Path config.log) { cat config.log } + } + + if($env:TESTING -eq 'ON' -and $env:BUILD_SYSTEM -eq 'CMake') { + cmake --build . --config $env:PRJ_CFG --parallel 2 --target testdeps + } + +test_script: + - ps: | + if(Test-Path 'C:/msys64/usr/bin/curl.exe') { + $acurl="-ac $env:POSIX_PATH_PREFIX/c/msys64/usr/bin/curl.exe" + } + if(Test-Path 'C:/Windows/System32/curl.exe') { + $acurl="-ac $env:POSIX_PATH_PREFIX/c/Windows/System32/curl.exe" + } + if($env:TESTING -eq 'ON') { + if($env:BUILD_SYSTEM -eq 'CMake') { + $env:TFLAGS="$acurl $env:DISABLED_TESTS" + cmake --build . --config $env:PRJ_CFG --target test-ci + } + elseif($env:BUILD_SYSTEM -eq 'autotools') { + & bash -e -c "cd $env:POSIX_PATH_PREFIX/c/projects/curl && make V=1 TFLAGS='$acurl $env:DISABLED_TESTS' test-ci" + } + else { + & bash -e -c "cd $env:POSIX_PATH_PREFIX/c/projects/curl/tests && ./runtests.pl -a -p !flaky -r -rm $acurl $env:DISABLED_TESTS" + } + } + +clone_depth: 10 + +# select branches to avoid testing feature branches twice (as branch and as pull request) +branches: + only: + - master + - /\/ci$/ + +skip_commits: + files: + - '.azure-pipelines.yml' + - '.circleci/**/*' + - '.cirrus.yml' + - '.github/**/*' + - 'packages/**/*' + - 'plan9/**/*' + +artifacts: + - path: '**/curl.exe' + name: curl + - path: '**/*curl*.dll' + name: libcurl dll diff --git a/deps/curl/buildconf b/deps/curl/buildconf new file mode 100644 index 0000000..ee6a280 --- /dev/null +++ b/deps/curl/buildconf @@ -0,0 +1,8 @@ +#!/bin/sh +# +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +echo "*** Do not use buildconf. Instead, just use: autoreconf -fi" >&2 +exec ${AUTORECONF:-autoreconf} -fi "${@}" diff --git a/deps/curl/buildconf.bat b/deps/curl/buildconf.bat new file mode 100644 index 0000000..6153661 --- /dev/null +++ b/deps/curl/buildconf.bat @@ -0,0 +1,319 @@ +@echo off +rem *************************************************************************** +rem * _ _ ____ _ +rem * Project ___| | | | _ \| | +rem * / __| | | | |_) | | +rem * | (__| |_| | _ <| |___ +rem * \___|\___/|_| \_\_____| +rem * +rem * Copyright (C) Daniel Stenberg, , et al. +rem * +rem * This software is licensed as described in the file COPYING, which +rem * you should have received as part of this distribution. The terms +rem * are also available at https://curl.se/docs/copyright.html. +rem * +rem * You may opt to use, copy, modify, merge, publish, distribute and/or sell +rem * copies of the Software, and permit persons to whom the Software is +rem * furnished to do so, under the terms of the COPYING file. +rem * +rem * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +rem * KIND, either express or implied. +rem * +rem * SPDX-License-Identifier: curl +rem * +rem *************************************************************************** + +rem NOTES +rem +rem This batch file must be used to set up a git tree to build on systems where +rem there is no autotools support (i.e. DOS and Windows). +rem + +:begin + rem Set our variables + if "%OS%" == "Windows_NT" setlocal + set MODE=GENERATE + + rem Switch to this batch file's directory + cd /d "%~0\.." 1>NUL 2>&1 + + rem Check we are running from a curl git repository + if not exist GIT-INFO goto norepo + + rem Detect programs. HAVE_ + rem When not found the variable is set undefined. The undefined pattern + rem allows for statements like "if not defined HAVE_PERL (command)" + groff --version NUL 2>&1 + if errorlevel 1 (set HAVE_GROFF=) else (set HAVE_GROFF=Y) + nroff --version NUL 2>&1 + if errorlevel 1 (set HAVE_NROFF=) else (set HAVE_NROFF=Y) + perl --version NUL 2>&1 + if errorlevel 1 (set HAVE_PERL=) else (set HAVE_PERL=Y) + gzip --version NUL 2>&1 + if errorlevel 1 (set HAVE_GZIP=) else (set HAVE_GZIP=Y) + +:parseArgs + if "%~1" == "" goto start + + if /i "%~1" == "-clean" ( + set MODE=CLEAN + ) else if /i "%~1" == "-?" ( + goto syntax + ) else if /i "%~1" == "-h" ( + goto syntax + ) else if /i "%~1" == "-help" ( + goto syntax + ) else ( + goto unknown + ) + + shift & goto parseArgs + +:start + if "%MODE%" == "GENERATE" ( + echo. + echo Generating prerequisite files + + call :generate + if errorlevel 3 goto nogenhugehelp + if errorlevel 2 goto nogenmakefile + if errorlevel 1 goto warning + + ) else ( + echo. + echo Removing prerequisite files + + call :clean + if errorlevel 2 goto nocleanhugehelp + if errorlevel 1 goto nocleanmakefile + ) + + goto success + +rem Main generate function. +rem +rem Returns: +rem +rem 0 - success +rem 1 - success with simplified tool_hugehelp.c +rem 2 - failed to generate Makefile +rem 3 - failed to generate tool_hugehelp.c +rem +:generate + if "%OS%" == "Windows_NT" setlocal + set BASIC_HUGEHELP=0 + + rem Create Makefile + echo * %CD%\Makefile + if exist Makefile.dist ( + copy /Y Makefile.dist Makefile 1>NUL 2>&1 + if errorlevel 1 ( + if "%OS%" == "Windows_NT" endlocal + exit /B 2 + ) + ) + + rem Create tool_hugehelp.c + echo * %CD%\src\tool_hugehelp.c + call :genHugeHelp + if errorlevel 2 ( + if "%OS%" == "Windows_NT" endlocal + exit /B 3 + ) + if errorlevel 1 ( + set BASIC_HUGEHELP=1 + ) + cmd /c exit 0 + + rem Setup c-ares git tree + if exist ares\buildconf.bat ( + echo. + echo Configuring c-ares build environment + cd ares + call buildconf.bat + cd .. + ) + + if "%BASIC_HUGEHELP%" == "1" ( + if "%OS%" == "Windows_NT" endlocal + exit /B 1 + ) + + if "%OS%" == "Windows_NT" endlocal + exit /B 0 + +rem Main clean function. +rem +rem Returns: +rem +rem 0 - success +rem 1 - failed to clean Makefile +rem 2 - failed to clean tool_hugehelp.c +rem +:clean + rem Remove Makefile + echo * %CD%\Makefile + if exist Makefile ( + del Makefile 2>NUL + if exist Makefile ( + exit /B 1 + ) + ) + + rem Remove tool_hugehelp.c + echo * %CD%\src\tool_hugehelp.c + if exist src\tool_hugehelp.c ( + del src\tool_hugehelp.c 2>NUL + if exist src\tool_hugehelp.c ( + exit /B 2 + ) + ) + + exit /B + +rem Function to generate src\tool_hugehelp.c +rem +rem Returns: +rem +rem 0 - full tool_hugehelp.c generated +rem 1 - simplified tool_hugehelp.c +rem 2 - failure +rem +:genHugeHelp + if "%OS%" == "Windows_NT" setlocal + set LC_ALL=C + set ROFFCMD= + set BASIC=1 + + if defined HAVE_PERL ( + if defined HAVE_GROFF ( + set ROFFCMD=groff -mtty-char -Tascii -P-c -man + ) else if defined HAVE_NROFF ( + set ROFFCMD=nroff -c -Tascii -man + ) + ) + + if defined ROFFCMD ( + echo #include "tool_setup.h"> src\tool_hugehelp.c + echo #include "tool_hugehelp.h">> src\tool_hugehelp.c + + if defined HAVE_GZIP ( + echo #ifndef HAVE_LIBZ>> src\tool_hugehelp.c + ) + + %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl docs\MANUAL >> src\tool_hugehelp.c + if defined HAVE_GZIP ( + echo #else>> src\tool_hugehelp.c + %ROFFCMD% docs\curl.1 2>NUL | perl src\mkhelp.pl -c docs\MANUAL >> src\tool_hugehelp.c + echo #endif /^* HAVE_LIBZ ^*/>> src\tool_hugehelp.c + ) + + set BASIC=0 + ) else ( + if exist src\tool_hugehelp.c.cvs ( + copy /Y src\tool_hugehelp.c.cvs src\tool_hugehelp.c 1>NUL 2>&1 + ) else ( + echo #include "tool_setup.h"> src\tool_hugehelp.c + echo #include "tool_hugehelp.h">> src\tool_hugehelp.c + echo.>> src\tool_hugehelp.c + echo void hugehelp(void^)>> src\tool_hugehelp.c + echo {>> src\tool_hugehelp.c + echo #ifdef USE_MANUAL>> src\tool_hugehelp.c + echo fputs("Built-in manual not included\n", stdout^);>> src\tool_hugehelp.c + echo #endif>> src\tool_hugehelp.c + echo }>> src\tool_hugehelp.c + ) + ) + + findstr "/C:void hugehelp(void)" src\tool_hugehelp.c 1>NUL 2>&1 + if errorlevel 1 ( + if "%OS%" == "Windows_NT" endlocal + exit /B 2 + ) + + if "%BASIC%" == "1" ( + if "%OS%" == "Windows_NT" endlocal + exit /B 1 + ) + + if "%OS%" == "Windows_NT" endlocal + exit /B 0 + +rem Function to clean-up local variables under DOS, Windows 3.x and +rem Windows 9x as setlocal isn't available until Windows NT +rem +:dosCleanup + set MODE= + set HAVE_GROFF= + set HAVE_NROFF= + set HAVE_PERL= + set HAVE_GZIP= + set BASIC_HUGEHELP= + set LC_ALL + set ROFFCMD= + set BASIC= + + exit /B + +:syntax + rem Display the help + echo. + echo Usage: buildconf [-clean] + echo. + echo -clean - Removes the files + goto error + +:unknown + echo. + echo Error: Unknown argument '%1' + goto error + +:norepo + echo. + echo Error: This batch file should only be used with a curl git repository + goto error + +:nogenmakefile + echo. + echo Error: Unable to generate Makefile + goto error + +:nogenhugehelp + echo. + echo Error: Unable to generate src\tool_hugehelp.c + goto error + +:nocleanmakefile + echo. + echo Error: Unable to clean Makefile + goto error + +:nocleanhugehelp + echo. + echo Error: Unable to clean src\tool_hugehelp.c + goto error + +:warning + echo. + echo Warning: The curl manual could not be integrated in the source. This means when + echo you build curl the manual will not be available (curl --man^). Integration of + echo the manual is not required and a summary of the options will still be available + echo (curl --help^). To integrate the manual your PATH is required to have + echo groff/nroff, perl and optionally gzip for compression. + goto success + +:error + if "%OS%" == "Windows_NT" ( + endlocal + ) else ( + call :dosCleanup + ) + exit /B 1 + +:success + if "%OS%" == "Windows_NT" ( + endlocal + ) else ( + call :dosCleanup + ) + exit /B 0 diff --git a/deps/curl/configure.ac b/deps/curl/configure.ac new file mode 100644 index 0000000..d9b3963 --- /dev/null +++ b/deps/curl/configure.ac @@ -0,0 +1,4857 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +#*************************************************************************** +dnl Process this file with autoconf to produce a configure script. + +AC_PREREQ(2.59) + +dnl We don't know the version number "statically" so we use a dash here +AC_INIT([curl], [-], [a suitable curl mailing list: https://curl.se/mail/]) + +XC_OVR_ZZ50 +XC_OVR_ZZ60 +CURL_OVERRIDE_AUTOCONF + +dnl configure script copyright +AC_COPYRIGHT([Copyright (C) Daniel Stenberg, +This configure script may be copied, distributed and modified under the +terms of the curl license; see COPYING for more details]) + +AC_CONFIG_SRCDIR([lib/urldata.h]) +AC_CONFIG_HEADERS(lib/curl_config.h) +AC_CONFIG_MACRO_DIR([m4]) +AM_MAINTAINER_MODE +m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])]) + +CURL_CHECK_OPTION_DEBUG +CURL_CHECK_OPTION_OPTIMIZE +CURL_CHECK_OPTION_WARNINGS +CURL_CHECK_OPTION_WERROR +CURL_CHECK_OPTION_CURLDEBUG +CURL_CHECK_OPTION_SYMBOL_HIDING +CURL_CHECK_OPTION_ARES +CURL_CHECK_OPTION_RT +CURL_CHECK_OPTION_ECH + +XC_CHECK_PATH_SEPARATOR + +# +# save the configure arguments +# +CONFIGURE_OPTIONS="\"$ac_configure_args\"" +AC_SUBST(CONFIGURE_OPTIONS) + +dnl SED is mandatory for configure process and libtool. +dnl Set it now, allowing it to be changed later. +if test -z "$SED"; then + dnl allow it to be overridden + AC_PATH_PROG([SED], [sed], [not_found], + [$PATH:/usr/bin:/usr/local/bin]) + if test -z "$SED" || test "$SED" = "not_found"; then + AC_MSG_ERROR([sed not found in PATH. Cannot continue without sed.]) + fi +fi +AC_SUBST([SED]) + +dnl GREP is mandatory for configure process and libtool. +dnl Set it now, allowing it to be changed later. +if test -z "$GREP"; then + dnl allow it to be overridden + AC_PATH_PROG([GREP], [grep], [not_found], + [$PATH:/usr/bin:/usr/local/bin]) + if test -z "$GREP" || test "$GREP" = "not_found"; then + AC_MSG_ERROR([grep not found in PATH. Cannot continue without grep.]) + fi +fi +AC_SUBST([GREP]) + +dnl 'grep -E' is mandatory for configure process and libtool. +dnl Set it now, allowing it to be changed later. +if test -z "$EGREP"; then + dnl allow it to be overridden + AC_MSG_CHECKING([that grep -E works]) + if echo a | ($GREP -E '(a|b)') >/dev/null 2>&1; then + EGREP="$GREP -E" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + AC_PATH_PROG([EGREP], [egrep], [not_found], + [$PATH:/usr/bin:/usr/local/bin]) + fi +fi +if test -z "$EGREP" || test "$EGREP" = "not_found"; then + AC_MSG_ERROR([grep -E is not working and egrep is not found in PATH. Cannot continue.]) +fi +AC_SUBST([EGREP]) + +dnl AR is mandatory for configure process and libtool. +dnl This is target dependent, so check it as a tool. +if test -z "$AR"; then + dnl allow it to be overridden + AC_PATH_TOOL([AR], [ar], [not_found], + [$PATH:/usr/bin:/usr/local/bin]) + if test -z "$AR" || test "$AR" = "not_found"; then + AC_MSG_ERROR([ar not found in PATH. Cannot continue without ar.]) + fi +fi +AC_SUBST([AR]) + +AC_SUBST(libext) + +dnl figure out the libcurl version +CURLVERSION=`$SED -ne 's/^#define LIBCURL_VERSION "\(.*\)".*/\1/p' ${srcdir}/include/curl/curlver.h` +XC_CHECK_PROG_CC +CURL_ATOMIC + +dnl for --enable-code-coverage +CURL_COVERAGE + +XC_AUTOMAKE +AC_MSG_CHECKING([curl version]) +AC_MSG_RESULT($CURLVERSION) + +AC_SUBST(CURLVERSION) + +dnl +dnl we extract the numerical version for curl-config only +VERSIONNUM=`$SED -ne 's/^#define LIBCURL_VERSION_NUM 0x\([0-9A-Fa-f]*\).*/\1/p' ${srcdir}/include/curl/curlver.h` +AC_SUBST(VERSIONNUM) + +dnl Solaris pkgadd support definitions +PKGADD_PKG="HAXXcurl" +PKGADD_NAME="curl - a client that groks URLs" +PKGADD_VENDOR="curl.se" +AC_SUBST(PKGADD_PKG) +AC_SUBST(PKGADD_NAME) +AC_SUBST(PKGADD_VENDOR) + +dnl +dnl initialize all the info variables + curl_ssl_msg="no (--with-{openssl,gnutls,mbedtls,wolfssl,schannel,secure-transport,amissl,bearssl,rustls} )" + curl_ssh_msg="no (--with-{libssh,libssh2})" + curl_zlib_msg="no (--with-zlib)" + curl_brotli_msg="no (--with-brotli)" + curl_zstd_msg="no (--with-zstd)" + curl_gss_msg="no (--with-gssapi)" + curl_gsasl_msg="no (--with-gsasl)" +curl_tls_srp_msg="no (--enable-tls-srp)" + curl_res_msg="default (--enable-ares / --enable-threaded-resolver)" + curl_ipv6_msg="no (--enable-ipv6)" +curl_unix_sockets_msg="no (--enable-unix-sockets)" + curl_idn_msg="no (--with-{libidn2,winidn})" + curl_manual_msg="no (--enable-manual)" +curl_libcurl_msg="enabled (--disable-libcurl-option)" +curl_verbose_msg="enabled (--disable-verbose)" + curl_sspi_msg="no (--enable-sspi)" + curl_ldap_msg="no (--enable-ldap / --with-ldap-lib / --with-lber-lib)" + curl_ldaps_msg="no (--enable-ldaps)" + curl_rtsp_msg="no (--enable-rtsp)" + curl_rtmp_msg="no (--with-librtmp)" + curl_psl_msg="no (--with-libpsl)" + curl_altsvc_msg="enabled (--disable-alt-svc)" +curl_headers_msg="enabled (--disable-headers-api)" + curl_hsts_msg="enabled (--disable-hsts)" + curl_ws_msg="no (--enable-websockets)" + ssl_backends= + curl_h1_msg="enabled (internal)" + curl_h2_msg="no (--with-nghttp2)" + curl_h3_msg="no (--with-ngtcp2 --with-nghttp3, --with-quiche, --with-msh3)" + +enable_altsvc="yes" +hsts="yes" + +dnl +dnl Save some initial values the user might have provided +dnl +INITIAL_LDFLAGS=$LDFLAGS +INITIAL_LIBS=$LIBS + +dnl +dnl Generates a shell script to run the compiler with LD_LIBRARY_PATH set to +dnl the value used right now. This lets CURL_RUN_IFELSE set LD_LIBRARY_PATH to +dnl something different but only have that affect the execution of the results +dnl of the compile, not change the libraries for the compiler itself. +dnl +compilersh="run-compiler" +CURL_SAVED_CC="$CC" +export CURL_SAVED_CC +CURL_SAVED_LD_LIBRARY_PATH="$LD_LIBRARY_PATH" +export CURL_SAVED_LD_LIBRARY_PATH +cat <<\EOF > "$compilersh" +CC="$CURL_SAVED_CC" +export CC +LD_LIBRARY_PATH="$CURL_SAVED_LD_LIBRARY_PATH" +export LD_LIBRARY_PATH +exec $CC "$@" +EOF + +dnl ********************************************************************** +dnl See which TLS backend(s) that are requested. Just do all the +dnl TLS AC_ARG_WITH() invokes here and do the checks later +dnl ********************************************************************** +OPT_SCHANNEL=no +AC_ARG_WITH(schannel,dnl +AS_HELP_STRING([--with-schannel],[enable Windows native SSL/TLS]), + OPT_SCHANNEL=$withval + TLSCHOICE="schannel") + +OPT_SECURETRANSPORT=no +AC_ARG_WITH(secure-transport,dnl +AS_HELP_STRING([--with-secure-transport],[enable Apple OS native SSL/TLS]),[ + OPT_SECURETRANSPORT=$withval + TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }Secure-Transport" +]) + +OPT_AMISSL=no +AC_ARG_WITH(amissl,dnl +AS_HELP_STRING([--with-amissl],[enable Amiga native SSL/TLS (AmiSSL)]),[ + OPT_AMISSL=$withval + TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }AmiSSL" +]) + +OPT_OPENSSL=no +dnl Default to no CA bundle +ca="no" +AC_ARG_WITH(ssl,dnl +AS_HELP_STRING([--with-ssl=PATH],[old version of --with-openssl]) +AS_HELP_STRING([--without-ssl], [build without any TLS library]),[ + OPT_SSL=$withval + OPT_OPENSSL=$withval + if test X"$withval" != Xno; then + TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }OpenSSL" + else + SSL_DISABLED="D" + fi +]) + +AC_ARG_WITH(openssl,dnl +AS_HELP_STRING([--with-openssl=PATH],[Where to look for OpenSSL, PATH points to the SSL installation (default: /usr/local/ssl); when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]),[ + OPT_OPENSSL=$withval + if test X"$withval" != Xno; then + TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }OpenSSL" + fi +]) + +OPT_GNUTLS=no +AC_ARG_WITH(gnutls,dnl +AS_HELP_STRING([--with-gnutls=PATH],[where to look for GnuTLS, PATH points to the installation root]),[ + OPT_GNUTLS=$withval + if test X"$withval" != Xno; then + TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }GnuTLS" + fi +]) + +OPT_MBEDTLS=no +AC_ARG_WITH(mbedtls,dnl +AS_HELP_STRING([--with-mbedtls=PATH],[where to look for mbedTLS, PATH points to the installation root]),[ + OPT_MBEDTLS=$withval + if test X"$withval" != Xno; then + TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }mbedTLS" + fi +]) + +OPT_WOLFSSL=no +AC_ARG_WITH(wolfssl,dnl +AS_HELP_STRING([--with-wolfssl=PATH],[where to look for WolfSSL, PATH points to the installation root (default: system lib default)]),[ + OPT_WOLFSSL=$withval + if test X"$withval" != Xno; then + TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }wolfSSL" + fi +]) + +OPT_BEARSSL=no +AC_ARG_WITH(bearssl,dnl +AS_HELP_STRING([--with-bearssl=PATH],[where to look for BearSSL, PATH points to the installation root]),[ + OPT_BEARSSL=$withval + if test X"$withval" != Xno; then + TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }BearSSL" + fi +]) + +OPT_RUSTLS=no +AC_ARG_WITH(rustls,dnl +AS_HELP_STRING([--with-rustls=PATH],[where to look for rustls, PATH points to the installation root]),[ + OPT_RUSTLS=$withval + if test X"$withval" != Xno; then + TLSCHOICE="${TLSCHOICE:+$TLSCHOICE, }rustls" + experimental="$experimental rustls" + fi +]) + +TEST_NGHTTPX=nghttpx +AC_ARG_WITH(test-nghttpx,dnl +AS_HELP_STRING([--with-test-nghttpx=PATH],[where to find nghttpx for testing]), + TEST_NGHTTPX=$withval + if test X"$OPT_TEST_NGHTTPX" = "Xno" ; then + TEST_NGHTTPX="" + fi +) +AC_SUBST(TEST_NGHTTPX) + +CADDY=caddy +AC_ARG_WITH(test-caddy,dnl +AS_HELP_STRING([--with-test-caddy=PATH],[where to find caddy for testing]), + CADDY=$withval + if test X"$OPT_CADDY" = "Xno" ; then + CADDY="" + fi +) +AC_SUBST(CADDY) + +dnl we'd like a httpd+apachectl as test server +dnl +HTTPD_ENABLED="maybe" +AC_ARG_WITH(test-httpd, [AS_HELP_STRING([--with-test-httpd=PATH], + [where to find httpd/apache2 for testing])], + [request_httpd=$withval], [request_httpd=check]) +if test x"$request_httpd" = "xcheck" -o x"$request_httpd" = "xyes"; then + if test -x "/usr/sbin/apache2" -a -x "/usr/sbin/apache2ctl"; then + # common location on distros (debian/ubuntu) + HTTPD="/usr/sbin/apache2" + APACHECTL="/usr/sbin/apache2ctl" + AC_PATH_PROG([APXS], [apxs]) + if test "x$APXS" = "x"; then + AC_MSG_NOTICE([apache2-dev not installed, httpd tests disabled]) + HTTPD_ENABLED="no" + fi + else + AC_PATH_PROG([HTTPD], [httpd]) + if test "x$HTTPD" = "x"; then + AC_PATH_PROG([HTTPD], [apache2]) + fi + AC_PATH_PROG([APACHECTL], [apachectl]) + AC_PATH_PROG([APXS], [apxs]) + if test "x$HTTPD" = "x" -o "x$APACHECTL" = "x"; then + AC_MSG_NOTICE([httpd/apache2 not in PATH, http tests disabled]) + HTTPD_ENABLED="no" + fi + if test "x$APXS" = "x"; then + AC_MSG_NOTICE([apxs not in PATH, http tests disabled]) + HTTPD_ENABLED="no" + fi + fi +elif test x"$request_httpd" != "xno"; then + HTTPD="${request_httpd}/bin/httpd" + APACHECTL="${request_httpd}/bin/apachectl" + APXS="${request_httpd}/bin/apxs" + if test ! -x "${HTTPD}"; then + AC_MSG_NOTICE([httpd not found as ${HTTPD}, http tests disabled]) + HTTPD_ENABLED="no" + elif test ! -x "${APACHECTL}"; then + AC_MSG_NOTICE([apachectl not found as ${APACHECTL}, http tests disabled]) + HTTPD_ENABLED="no" + elif test ! -x "${APXS}"; then + AC_MSG_NOTICE([apxs not found as ${APXS}, http tests disabled]) + HTTPD_ENABLED="no" + else + AC_MSG_NOTICE([using HTTPD=$HTTPD for tests]) + fi +fi +if test x"$HTTPD_ENABLED" = "xno"; then + HTTPD="" + APACHECTL="" + APXS="" +fi +AC_SUBST(HTTPD) +AC_SUBST(APACHECTL) +AC_SUBST(APXS) + +dnl the nghttpx we might use in httpd testing +if test "x$TEST_NGHTTPX" != "x" -a "x$TEST_NGHTTPX" != "xnghttpx"; then + HTTPD_NGHTTPX="$TEST_NGHTTPX" +else + AC_PATH_PROG([HTTPD_NGHTTPX], [nghttpx], [], + [$PATH:/usr/bin:/usr/local/bin]) +fi +AC_SUBST(HTTPD_NGHTTPX) + +dnl the Caddy server we might use in testing +if test "x$TEST_CADDY" != "x"; then + CADDY="$TEST_CADDY" +else + AC_PATH_PROG([CADDY], [caddy]) +fi +AC_SUBST(CADDY) + +dnl If no TLS choice has been made, check if it was explicitly disabled or +dnl error out to force the user to decide. +if test -z "$TLSCHOICE"; then + if test "x$OPT_SSL" != "xno"; then + AC_MSG_ERROR([select TLS backend(s) or disable TLS with --without-ssl. + +Select from these: + + --with-amissl + --with-bearssl + --with-gnutls + --with-mbedtls + --with-openssl (also works for BoringSSL and libressl) + --with-rustls + --with-schannel + --with-secure-transport + --with-wolfssl +]) + fi +fi + +AC_ARG_WITH(darwinssl,, + AC_MSG_ERROR([--with-darwin-ssl and --without-darwin-ssl no longer work!])) + +dnl +dnl Detect the canonical host and target build environment +dnl + +AC_CANONICAL_HOST +dnl Get system canonical name +AC_DEFINE_UNQUOTED(OS, "${host}", [cpu-machine-OS]) + +# Silence warning: ar: 'u' modifier ignored since 'D' is the default +AC_SUBST(AR_FLAGS, [cr]) + +dnl This defines _ALL_SOURCE for AIX +CURL_CHECK_AIX_ALL_SOURCE + +dnl Our configure and build reentrant settings +CURL_CONFIGURE_THREAD_SAFE +CURL_CONFIGURE_REENTRANT + +dnl check for how to do large files +AC_SYS_LARGEFILE + +XC_LIBTOOL + +LT_LANG([Windows Resource]) + +# +# Automake conditionals based on libtool related checks +# + +AM_CONDITIONAL([CURL_LT_SHLIB_USE_VERSION_INFO], + [test "x$xc_lt_shlib_use_version_info" = 'xyes']) +AM_CONDITIONAL([CURL_LT_SHLIB_USE_NO_UNDEFINED], + [test "x$xc_lt_shlib_use_no_undefined" = 'xyes']) +AM_CONDITIONAL([CURL_LT_SHLIB_USE_MIMPURE_TEXT], + [test "x$xc_lt_shlib_use_mimpure_text" = 'xyes']) + +# +# Due to libtool and automake machinery limitations of not allowing +# specifying separate CPPFLAGS or CFLAGS when compiling objects for +# inclusion of these in shared or static libraries, we are forced to +# build using separate configure runs for shared and static libraries +# on systems where different CPPFLAGS or CFLAGS are mandatory in order +# to compile objects for each kind of library. Notice that relying on +# the '-DPIC' CFLAG that libtool provides is not valid given that the +# user might for example choose to build static libraries with PIC. +# + +# +# Make our Makefile.am files use the staticlib CPPFLAG only when strictly +# targeting a static library and not building its shared counterpart. +# + +AM_CONDITIONAL([USE_CPPFLAG_CURL_STATICLIB], + [test "x$xc_lt_build_static_only" = 'xyes']) + +# +# Make staticlib CPPFLAG variable and its definition visible in output +# files unconditionally, providing an empty definition unless strictly +# targeting a static library and not building its shared counterpart. +# + +CPPFLAG_CURL_STATICLIB= +if test "x$xc_lt_build_static_only" = 'xyes'; then + CPPFLAG_CURL_STATICLIB='-DCURL_STATICLIB' +fi +AC_SUBST([CPPFLAG_CURL_STATICLIB]) + + +# Determine whether all dependent libraries must be specified when linking +if test "X$enable_shared" = "Xyes" -a "X$link_all_deplibs" = "Xno" +then + REQUIRE_LIB_DEPS=no +else + REQUIRE_LIB_DEPS=yes +fi +AC_SUBST(REQUIRE_LIB_DEPS) +AM_CONDITIONAL(USE_EXPLICIT_LIB_DEPS, test x$REQUIRE_LIB_DEPS = xyes) + +dnl check if there's a way to force code inline +AC_C_INLINE + +dnl ********************************************************************** +dnl platform/compiler/architecture specific checks/flags +dnl ********************************************************************** + +CURL_CHECK_COMPILER +CURL_SET_COMPILER_BASIC_OPTS +CURL_SET_COMPILER_DEBUG_OPTS +CURL_SET_COMPILER_OPTIMIZE_OPTS +CURL_SET_COMPILER_WARNING_OPTS + +if test "$compiler_id" = "INTEL_UNIX_C"; then + # + if test "$compiler_num" -ge "1000"; then + dnl icc 10.X or later + CFLAGS="$CFLAGS -shared-intel" + elif test "$compiler_num" -ge "900"; then + dnl icc 9.X specific + CFLAGS="$CFLAGS -i-dynamic" + fi + # +fi + +CURL_CFLAG_EXTRAS="" +if test X"$want_werror" = Xyes; then + CURL_CFLAG_EXTRAS="-Werror" + if test "$compiler_id" = "GNU_C"; then + dnl enable -pedantic-errors for GCC 5 and later, + dnl as before that it was the same as -Werror=pedantic + if test "$compiler_num" -ge "500"; then + CURL_CFLAG_EXTRAS="$CURL_CFLAG_EXTRAS -pedantic-errors" + fi + fi +fi +AC_SUBST(CURL_CFLAG_EXTRAS) + +CURL_CHECK_COMPILER_HALT_ON_ERROR +CURL_CHECK_COMPILER_ARRAY_SIZE_NEGATIVE +CURL_CHECK_COMPILER_PROTOTYPE_MISMATCH +CURL_CHECK_COMPILER_SYMBOL_HIDING + +CURL_CHECK_CURLDEBUG +AM_CONDITIONAL(CURLDEBUG, test x$want_curldebug = xyes) + +supports_unittests=yes +# cross-compilation of unit tests static library/programs fails when +# libcurl shared library is built. This might be due to a libtool or +# automake issue. In this case we disable unit tests. +if test "x$cross_compiling" != "xno" && + test "x$enable_shared" != "xno"; then + supports_unittests=no +fi + +# IRIX 6.5.24 gcc 3.3 autobuilds fail unittests library compilation due to +# a problem related with OpenSSL headers and library versions not matching. +# Disable unit tests while time to further investigate this is found. +case $host in + mips-sgi-irix6.5) + if test "$compiler_id" = "GNU_C"; then + supports_unittests=no + fi + ;; +esac + +# All AIX autobuilds fails unit tests linking against unittests library +# due to unittests library being built with no symbols or members. Libtool ? +# Disable unit tests while time to further investigate this is found. +case $host_os in + aix*) + supports_unittests=no + ;; +esac + +dnl Build unit tests when option --enable-debug is given. +if test "x$want_debug" = "xyes" && + test "x$supports_unittests" = "xyes"; then + want_unittests=yes +else + want_unittests=no +fi +AM_CONDITIONAL(BUILD_UNITTESTS, test x$want_unittests = xyes) + +dnl ********************************************************************** +dnl Compilation based checks should not be done before this point. +dnl ********************************************************************** + +dnl ********************************************************************** +dnl Make sure that our checks for headers windows.h winsock2.h +dnl and ws2tcpip.h take precedence over any other further checks which +dnl could be done later using AC_CHECK_HEADER or AC_CHECK_HEADERS for +dnl this specific header files. And do them before its results are used. +dnl ********************************************************************** + +CURL_CHECK_HEADER_WINDOWS +CURL_CHECK_NATIVE_WINDOWS +case X-"$curl_cv_native_windows" in + X-yes) + CURL_CHECK_HEADER_WINSOCK2 + CURL_CHECK_HEADER_WS2TCPIP + ;; + *) + curl_cv_header_winsock2_h="no" + curl_cv_header_ws2tcpip_h="no" + ;; +esac +CURL_CHECK_WIN32_LARGEFILE +CURL_CHECK_WIN32_CRYPTO + +CURL_DARWIN_CFLAGS +CURL_DARWIN_SYSTEMCONFIGURATION +CURL_SUPPORTS_BUILTIN_AVAILABLE + +AM_CONDITIONAL([HAVE_WINDRES], + [test "$curl_cv_native_windows" = "yes" && test -n "${RC}"]) + +if test "$curl_cv_native_windows" = "yes"; then + AM_COND_IF([HAVE_WINDRES],, + [AC_MSG_ERROR([windres not found in PATH. Windows builds require windres. Cannot continue.])]) +fi + +dnl ************************************************************ +dnl switch off particular protocols +dnl +AC_MSG_CHECKING([whether to support http]) +AC_ARG_ENABLE(http, +AS_HELP_STRING([--enable-http],[Enable HTTP support]) +AS_HELP_STRING([--disable-http],[Disable HTTP support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_HTTP, 1, [to disable HTTP]) + disable_http="yes" + AC_MSG_WARN([disable HTTP disables FTP over proxy and RTSP]) + AC_SUBST(CURL_DISABLE_HTTP, [1]) + AC_DEFINE(CURL_DISABLE_RTSP, 1, [to disable RTSP]) + AC_SUBST(CURL_DISABLE_RTSP, [1]) + dnl toggle off alt-svc too when HTTP is disabled + AC_DEFINE(CURL_DISABLE_ALTSVC, 1, [disable alt-svc]) + AC_DEFINE(CURL_DISABLE_HSTS, 1, [disable HSTS]) + curl_h1_msg="no (--enable-http, --with-hyper)" + curl_altsvc_msg="no"; + curl_hsts_msg="no (--enable-hsts)"; + enable_altsvc="no" + hsts="no" + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) +AC_MSG_CHECKING([whether to support ftp]) +AC_ARG_ENABLE(ftp, +AS_HELP_STRING([--enable-ftp],[Enable FTP support]) +AS_HELP_STRING([--disable-ftp],[Disable FTP support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_FTP, 1, [to disable FTP]) + AC_SUBST(CURL_DISABLE_FTP, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) +AC_MSG_CHECKING([whether to support file]) +AC_ARG_ENABLE(file, +AS_HELP_STRING([--enable-file],[Enable FILE support]) +AS_HELP_STRING([--disable-file],[Disable FILE support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_FILE, 1, [to disable FILE]) + AC_SUBST(CURL_DISABLE_FILE, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) +AC_MSG_CHECKING([whether to support ldap]) +AC_ARG_ENABLE(ldap, +AS_HELP_STRING([--enable-ldap],[Enable LDAP support]) +AS_HELP_STRING([--disable-ldap],[Disable LDAP support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP]) + AC_SUBST(CURL_DISABLE_LDAP, [1]) + ;; + yes) + ldap_askedfor="yes" + AC_MSG_RESULT(yes) + ;; + *) + AC_MSG_RESULT(yes) + ;; + esac ],[ + AC_MSG_RESULT(yes) ] +) +AC_MSG_CHECKING([whether to support ldaps]) +AC_ARG_ENABLE(ldaps, +AS_HELP_STRING([--enable-ldaps],[Enable LDAPS support]) +AS_HELP_STRING([--disable-ldaps],[Disable LDAPS support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS]) + AC_SUBST(CURL_DISABLE_LDAPS, [1]) + ;; + *) if test "x$CURL_DISABLE_LDAP" = "x1" ; then + AC_MSG_RESULT(LDAP needs to be enabled to support LDAPS) + AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS]) + AC_SUBST(CURL_DISABLE_LDAPS, [1]) + else + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_LDAP_SSL, 1, [Use LDAPS implementation]) + AC_SUBST(HAVE_LDAP_SSL, [1]) + fi + ;; + esac ],[ + if test "x$CURL_DISABLE_LDAP" = "x1" ; then + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS]) + AC_SUBST(CURL_DISABLE_LDAPS, [1]) + else + AC_MSG_RESULT(yes) + AC_DEFINE(HAVE_LDAP_SSL, 1, [Use LDAPS implementation]) + AC_SUBST(HAVE_LDAP_SSL, [1]) + fi ] +) + +dnl ********************************************************************** +dnl Check for Hyper +dnl ********************************************************************** + +OPT_HYPER="no" + +AC_ARG_WITH(hyper, +AS_HELP_STRING([--with-hyper=PATH],[Enable hyper usage]) +AS_HELP_STRING([--without-hyper],[Disable hyper usage]), + [OPT_HYPER=$withval]) +case "$OPT_HYPER" in + no) + dnl --without-hyper option used + want_hyper="no" + ;; + yes) + dnl --with-hyper option used without path + want_hyper="default" + want_hyper_path="" + ;; + *) + dnl --with-hyper option used with path + want_hyper="yes" + want_hyper_path="$withval" + ;; +esac + +if test X"$want_hyper" != Xno; then + if test "x$disable_http" = "xyes"; then + AC_MSG_ERROR([--with-hyper is not compatible with --disable-http]) + fi + + dnl backup the pre-hyper variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + CURL_CHECK_PKGCONFIG(hyper, $want_hyper_path) + + if test "$PKGCONFIG" != "no" ; then + LIB_HYPER=`CURL_EXPORT_PCDIR([$want_hyper_path]) + $PKGCONFIG --libs-only-l hyper` + CPP_HYPER=`CURL_EXPORT_PCDIR([$want_hyper_path]) dnl + $PKGCONFIG --cflags-only-I hyper` + LD_HYPER=`CURL_EXPORT_PCDIR([$want_hyper_path]) + $PKGCONFIG --libs-only-L hyper` + else + dnl no hyper pkg-config found + LIB_HYPER="-lhyper -ldl -lpthread -lm" + if test X"$want_hyper" != Xdefault; then + CPP_HYPER=-I"$want_hyper_path/capi/include" + LD_HYPER="-L$want_hyper_path/target/release -L$want_hyper_path/target/debug" + fi + fi + if test -n "$LIB_HYPER"; then + AC_MSG_NOTICE([-l is $LIB_HYPER]) + AC_MSG_NOTICE([-I is $CPP_HYPER]) + AC_MSG_NOTICE([-L is $LD_HYPER]) + + LDFLAGS="$LDFLAGS $LD_HYPER" + CPPFLAGS="$CPPFLAGS $CPP_HYPER" + LIBS="$LIB_HYPER $LIBS" + + if test "x$cross_compiling" != "xyes"; then + dnl remove -L, separate with colon if more than one + DIR_HYPER=`echo $LD_HYPER | $SED -e 's/^-L//' -e 's/ -L/:/g'` + fi + + AC_CHECK_LIB(hyper, hyper_io_new, + [ + AC_CHECK_HEADERS(hyper.h, + experimental="$experimental Hyper" + AC_MSG_NOTICE([Hyper support is experimental]) + curl_h1_msg="enabled (Hyper)" + HYPER_ENABLED=1 + AC_DEFINE(USE_HYPER, 1, [if hyper is in use]) + AC_SUBST(USE_HYPER, [1]) + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_HYPER" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_HYPER to CURL_LIBRARY_PATH]), + ) + ], + for d in `echo $DIR_HYPER | $SED -e 's/:/ /'`; do + if test -f "$d/libhyper.a"; then + AC_MSG_ERROR([hyper was found in $d but was probably built with wrong flags. See docs/HYPER.md.]) + fi + done + AC_MSG_ERROR([--with-hyper but hyper was not found. See docs/HYPER.md.]) + ) + fi +fi + +if test X"$want_hyper" != Xno; then + AC_MSG_NOTICE([Disable RTSP support with hyper]) + AC_DEFINE(CURL_DISABLE_RTSP, 1, [to disable RTSP]) + AC_SUBST(CURL_DISABLE_RTSP, [1]) +else + AC_MSG_CHECKING([whether to support rtsp]) + AC_ARG_ENABLE(rtsp, +AS_HELP_STRING([--enable-rtsp],[Enable RTSP support]) +AS_HELP_STRING([--disable-rtsp],[Disable RTSP support]), + [ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_RTSP, 1, [to disable RTSP]) + AC_SUBST(CURL_DISABLE_RTSP, [1]) + ;; + *) + if test x$CURL_DISABLE_HTTP = x1 ; then + AC_MSG_ERROR(HTTP support needs to be enabled in order to enable RTSP support!) + else + AC_MSG_RESULT(yes) + curl_rtsp_msg="enabled" + fi + ;; + esac ], + if test "x$CURL_DISABLE_HTTP" != "x1"; then + AC_MSG_RESULT(yes) + curl_rtsp_msg="enabled" + else + AC_MSG_RESULT(no) + fi + ) +fi + +AC_MSG_CHECKING([whether to support proxies]) +AC_ARG_ENABLE(proxy, +AS_HELP_STRING([--enable-proxy],[Enable proxy support]) +AS_HELP_STRING([--disable-proxy],[Disable proxy support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_PROXY, 1, [to disable proxies]) + AC_SUBST(CURL_DISABLE_PROXY, [1]) + https_proxy="no" + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +AC_MSG_CHECKING([whether to support dict]) +AC_ARG_ENABLE(dict, +AS_HELP_STRING([--enable-dict],[Enable DICT support]) +AS_HELP_STRING([--disable-dict],[Disable DICT support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_DICT, 1, [to disable DICT]) + AC_SUBST(CURL_DISABLE_DICT, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) +AC_MSG_CHECKING([whether to support telnet]) +AC_ARG_ENABLE(telnet, +AS_HELP_STRING([--enable-telnet],[Enable TELNET support]) +AS_HELP_STRING([--disable-telnet],[Disable TELNET support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_TELNET, 1, [to disable TELNET]) + AC_SUBST(CURL_DISABLE_TELNET, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) +AC_MSG_CHECKING([whether to support tftp]) +AC_ARG_ENABLE(tftp, +AS_HELP_STRING([--enable-tftp],[Enable TFTP support]) +AS_HELP_STRING([--disable-tftp],[Disable TFTP support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_TFTP, 1, [to disable TFTP]) + AC_SUBST(CURL_DISABLE_TFTP, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +AC_MSG_CHECKING([whether to support pop3]) +AC_ARG_ENABLE(pop3, +AS_HELP_STRING([--enable-pop3],[Enable POP3 support]) +AS_HELP_STRING([--disable-pop3],[Disable POP3 support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_POP3, 1, [to disable POP3]) + AC_SUBST(CURL_DISABLE_POP3, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + + +AC_MSG_CHECKING([whether to support imap]) +AC_ARG_ENABLE(imap, +AS_HELP_STRING([--enable-imap],[Enable IMAP support]) +AS_HELP_STRING([--disable-imap],[Disable IMAP support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_IMAP, 1, [to disable IMAP]) + AC_SUBST(CURL_DISABLE_IMAP, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + + +AC_MSG_CHECKING([whether to support smb]) +AC_ARG_ENABLE(smb, +AS_HELP_STRING([--enable-smb],[Enable SMB/CIFS support]) +AS_HELP_STRING([--disable-smb],[Disable SMB/CIFS support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_SMB, 1, [to disable SMB/CIFS]) + AC_SUBST(CURL_DISABLE_SMB, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +AC_MSG_CHECKING([whether to support smtp]) +AC_ARG_ENABLE(smtp, +AS_HELP_STRING([--enable-smtp],[Enable SMTP support]) +AS_HELP_STRING([--disable-smtp],[Disable SMTP support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_SMTP, 1, [to disable SMTP]) + AC_SUBST(CURL_DISABLE_SMTP, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +AC_MSG_CHECKING([whether to support gopher]) +AC_ARG_ENABLE(gopher, +AS_HELP_STRING([--enable-gopher],[Enable Gopher support]) +AS_HELP_STRING([--disable-gopher],[Disable Gopher support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_GOPHER, 1, [to disable Gopher]) + AC_SUBST(CURL_DISABLE_GOPHER, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +AC_MSG_CHECKING([whether to support mqtt]) +AC_ARG_ENABLE(mqtt, +AS_HELP_STRING([--enable-mqtt],[Enable MQTT support]) +AS_HELP_STRING([--disable-mqtt],[Disable MQTT support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_MQTT, 1, [to disable MQTT]) + AC_SUBST(CURL_DISABLE_MQTT, [1]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(no) +) + +dnl ********************************************************************** +dnl Check for built-in manual +dnl ********************************************************************** + +AC_MSG_CHECKING([whether to provide built-in manual]) +AC_ARG_ENABLE(manual, +AS_HELP_STRING([--enable-manual],[Enable built-in manual]) +AS_HELP_STRING([--disable-manual],[Disable built-in manual]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + ;; + *) AC_MSG_RESULT(yes) + USE_MANUAL="1" + ;; + esac ], + AC_MSG_RESULT(yes) + USE_MANUAL="1" +) +dnl The actual use of the USE_MANUAL variable is done much later in this +dnl script to allow other actions to disable it as well. + +dnl ************************************************************ +dnl disable C code generation support +dnl +AC_MSG_CHECKING([whether to enable generation of C code]) +AC_ARG_ENABLE(libcurl_option, +AS_HELP_STRING([--enable-libcurl-option],[Enable --libcurl C code generation support]) +AS_HELP_STRING([--disable-libcurl-option],[Disable --libcurl C code generation support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_LIBCURL_OPTION, 1, [to disable --libcurl C code generation option]) + curl_libcurl_msg="no" + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ********************************************************************** +dnl Checks for libraries. +dnl ********************************************************************** + +AC_MSG_CHECKING([whether to use libgcc]) +AC_ARG_ENABLE(libgcc, +AS_HELP_STRING([--enable-libgcc],[use libgcc when linking]), +[ case "$enableval" in + yes) + LIBS="-lgcc $LIBS" + AC_MSG_RESULT(yes) + ;; + *) AC_MSG_RESULT(no) + ;; + esac ], + AC_MSG_RESULT(no) +) + +CURL_CHECK_LIB_XNET + +dnl gethostbyname without lib or in the nsl lib? +AC_CHECK_FUNC(gethostbyname, + [HAVE_GETHOSTBYNAME="1" + ], + [ AC_CHECK_LIB(nsl, gethostbyname, + [HAVE_GETHOSTBYNAME="1" + LIBS="-lnsl $LIBS" + ]) + ]) + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl gethostbyname in the socket lib? + AC_CHECK_LIB(socket, gethostbyname, + [HAVE_GETHOSTBYNAME="1" + LIBS="-lsocket $LIBS" + ]) +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl gethostbyname in the watt lib? + AC_CHECK_LIB(watt, gethostbyname, + [HAVE_GETHOSTBYNAME="1" + CPPFLAGS="-I/dev/env/WATT_ROOT/inc" + LDFLAGS="-L/dev/env/WATT_ROOT/lib" + LIBS="-lwatt $LIBS" + ]) +fi + +dnl At least one system has been identified to require BOTH nsl and socket +dnl libs at the same time to link properly. +if test "$HAVE_GETHOSTBYNAME" != "1" +then + AC_MSG_CHECKING([for gethostbyname with both nsl and socket libs]) + my_ac_save_LIBS=$LIBS + LIBS="-lnsl -lsocket $LIBS" + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + gethostbyname(); + ]]) + ],[ + AC_MSG_RESULT([yes]) + HAVE_GETHOSTBYNAME="1" + ],[ + AC_MSG_RESULT([no]) + LIBS=$my_ac_save_LIBS + ]) +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl This is for winsock systems + if test "$curl_cv_header_windows_h" = "yes"; then + if test "$curl_cv_header_winsock2_h" = "yes"; then + winsock_LIB="-lws2_32" + fi + if test ! -z "$winsock_LIB"; then + my_ac_save_LIBS=$LIBS + LIBS="$winsock_LIB $LIBS" + AC_MSG_CHECKING([for gethostbyname in $winsock_LIB]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#ifdef HAVE_WINDOWS_H +#ifndef WIN32_LEAN_AND_MEAN +#define WIN32_LEAN_AND_MEAN +#endif +#ifdef HAVE_WINSOCK2_H +#include +#endif +#include +#endif + ]],[[ + gethostbyname("localhost"); + ]]) + ],[ + AC_MSG_RESULT([yes]) + HAVE_GETHOSTBYNAME="1" + ],[ + AC_MSG_RESULT([no]) + winsock_LIB="" + LIBS=$my_ac_save_LIBS + ]) + fi + fi +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl This is for Minix 3.1 + AC_MSG_CHECKING([for gethostbyname for Minix 3]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +/* Older Minix versions may need here instead */ +#include + ]],[[ + gethostbyname("localhost"); + ]]) + ],[ + AC_MSG_RESULT([yes]) + HAVE_GETHOSTBYNAME="1" + ],[ + AC_MSG_RESULT([no]) + ]) +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl This is for eCos with a stubbed DNS implementation + AC_MSG_CHECKING([for gethostbyname for eCos]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ +#include +#include + ]],[[ + gethostbyname("localhost"); + ]]) + ],[ + AC_MSG_RESULT([yes]) + HAVE_GETHOSTBYNAME="1" + ],[ + AC_MSG_RESULT([no]) + ]) +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" -o "${with_amissl+set}" = set +then + dnl This is for AmigaOS with bsdsocket.library - needs testing before -lnet + AC_MSG_CHECKING([for gethostbyname for AmigaOS bsdsocket.library]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + #define __USE_INLINE__ + #include + #ifdef __amigaos4__ + struct SocketIFace *ISocket = NULL; + #else + struct Library *SocketBase = NULL; + #endif + ]],[[ + gethostbyname("localhost"); + ]]) + ],[ + AC_MSG_RESULT([yes]) + HAVE_GETHOSTBYNAME="1" + HAVE_PROTO_BSDSOCKET_H="1" + AC_DEFINE(HAVE_PROTO_BSDSOCKET_H, 1, [if Amiga bsdsocket.library is in use]) + AC_SUBST(HAVE_PROTO_BSDSOCKET_H, [1]) + ],[ + AC_MSG_RESULT([no]) + ]) +fi + +if test "$HAVE_GETHOSTBYNAME" != "1" +then + dnl gethostbyname in the network lib - for Haiku OS + AC_CHECK_LIB(network, gethostbyname, + [HAVE_GETHOSTBYNAME="1" + LIBS="-lnetwork $LIBS" + ]) +fi + +if test "$HAVE_GETHOSTBYNAME" != "1"; then + AC_MSG_ERROR([couldn't find libraries for gethostbyname()]) +fi + +CURL_CHECK_LIBS_CONNECT + +CURL_NETWORK_LIBS=$LIBS + +dnl ********************************************************************** +dnl In case that function clock_gettime with monotonic timer is available, +dnl check for additional required libraries. +dnl ********************************************************************** +CURL_CHECK_LIBS_CLOCK_GETTIME_MONOTONIC + +dnl Check for even better option +CURL_CHECK_FUNC_CLOCK_GETTIME_MONOTONIC_RAW + +dnl ********************************************************************** +dnl The preceding library checks are all potentially useful for test +dnl servers and libtest cases which require networking and clock_gettime +dnl support. Save the list of required libraries at this point for use +dnl while linking those test servers and programs. +dnl ********************************************************************** +CURL_NETWORK_AND_TIME_LIBS=$LIBS + +dnl ********************************************************************** +dnl Check for the presence of ZLIB libraries and headers +dnl ********************************************************************** + +dnl Check for & handle argument to --with-zlib. + +clean_CPPFLAGS=$CPPFLAGS +clean_LDFLAGS=$LDFLAGS +clean_LIBS=$LIBS +ZLIB_LIBS="" +AC_ARG_WITH(zlib, +AS_HELP_STRING([--with-zlib=PATH],[search for zlib in PATH]) +AS_HELP_STRING([--without-zlib],[disable use of zlib]), + [OPT_ZLIB="$withval"]) + +if test "$OPT_ZLIB" = "no" ; then + AC_MSG_WARN([zlib disabled]) +else + if test "$OPT_ZLIB" = "yes" ; then + OPT_ZLIB="" + fi + + if test -z "$OPT_ZLIB" ; then + CURL_CHECK_PKGCONFIG(zlib) + + if test "$PKGCONFIG" != "no" ; then + ZLIB_LIBS="`$PKGCONFIG --libs-only-l zlib`" + if test -n "$ZLIB_LIBS"; then + LDFLAGS="$LDFLAGS `$PKGCONFIG --libs-only-L zlib`" + else + ZLIB_LIBS="`$PKGCONFIG --libs zlib`" + fi + LIBS="$ZLIB_LIBS $LIBS" + CPPFLAGS="$CPPFLAGS `$PKGCONFIG --cflags zlib`" + OPT_ZLIB="" + HAVE_LIBZ="1" + fi + + if test -z "$HAVE_LIBZ"; then + + dnl Check for the lib without setting any new path, since many + dnl people have it in the default path + + AC_CHECK_LIB(z, inflateEnd, + dnl libz found, set the variable + [HAVE_LIBZ="1" + ZLIB_LIBS="-lz" + LIBS="$ZLIB_LIBS $LIBS"], + dnl if no lib found, try /usr/local + [OPT_ZLIB="/usr/local"]) + fi + fi + + dnl Add a nonempty path to the compiler flags + if test -n "$OPT_ZLIB"; then + CPPFLAGS="$CPPFLAGS -I$OPT_ZLIB/include" + LDFLAGS="$LDFLAGS -L$OPT_ZLIB/lib$libsuff" + fi + + AC_CHECK_HEADER(zlib.h, + [ + dnl zlib.h was found + HAVE_ZLIB_H="1" + dnl if the lib wasn't found already, try again with the new paths + if test "$HAVE_LIBZ" != "1"; then + AC_CHECK_LIB(z, gzread, + [ + dnl the lib was found! + HAVE_LIBZ="1" + ZLIB_LIBS="-lz" + LIBS="$ZLIB_LIBS $LIBS" + ], + [ CPPFLAGS=$clean_CPPFLAGS + LDFLAGS=$clean_LDFLAGS]) + fi + ], + [ + dnl zlib.h was not found, restore the flags + CPPFLAGS=$clean_CPPFLAGS + LDFLAGS=$clean_LDFLAGS] + ) + + if test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" != "1" + then + AC_MSG_WARN([configure found only the libz lib, not the header file!]) + HAVE_LIBZ="" + CPPFLAGS=$clean_CPPFLAGS + LDFLAGS=$clean_LDFLAGS + LIBS=$clean_LIBS + ZLIB_LIBS="" + elif test "$HAVE_LIBZ" != "1" && test "$HAVE_ZLIB_H" = "1" + then + AC_MSG_WARN([configure found only the libz header file, not the lib!]) + CPPFLAGS=$clean_CPPFLAGS + LDFLAGS=$clean_LDFLAGS + LIBS=$clean_LIBS + ZLIB_LIBS="" + elif test "$HAVE_LIBZ" = "1" && test "$HAVE_ZLIB_H" = "1" + then + dnl both header and lib were found! + AC_SUBST(HAVE_LIBZ) + AC_DEFINE(HAVE_LIBZ, 1, [if zlib is available]) + LIBS="$ZLIB_LIBS $clean_LIBS" + + dnl replace 'HAVE_LIBZ' in the automake makefile.ams + AMFIXLIB="1" + AC_MSG_NOTICE([found both libz and libz.h header]) + curl_zlib_msg="enabled" + fi +fi + +dnl set variable for use in automakefile(s) +AM_CONDITIONAL(HAVE_LIBZ, test x"$AMFIXLIB" = x1) +AC_SUBST(ZLIB_LIBS) + +dnl ********************************************************************** +dnl Check for the presence of BROTLI decoder libraries and headers +dnl ********************************************************************** + +dnl Brotli project home page: https://github.com/google/brotli + +dnl Default to compiler & linker defaults for BROTLI files & libraries. +OPT_BROTLI=off +AC_ARG_WITH(brotli,dnl +AS_HELP_STRING([--with-brotli=PATH],[Where to look for brotli, PATH points to the BROTLI installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) +AS_HELP_STRING([--without-brotli], [disable BROTLI]), + OPT_BROTLI=$withval) + +if test X"$OPT_BROTLI" != Xno; then + dnl backup the pre-brotli variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + case "$OPT_BROTLI" in + yes) + dnl --with-brotli (without path) used + CURL_CHECK_PKGCONFIG(libbrotlidec) + + if test "$PKGCONFIG" != "no" ; then + LIB_BROTLI=`$PKGCONFIG --libs-only-l libbrotlidec` + LD_BROTLI=`$PKGCONFIG --libs-only-L libbrotlidec` + CPP_BROTLI=`$PKGCONFIG --cflags-only-I libbrotlidec` + version=`$PKGCONFIG --modversion libbrotlidec` + DIR_BROTLI=`echo $LD_BROTLI | $SED -e 's/^-L//'` + fi + + ;; + off) + dnl no --with-brotli option given, just check default places + ;; + *) + dnl use the given --with-brotli spot + PREFIX_BROTLI=$OPT_BROTLI + ;; + esac + + dnl if given with a prefix, we set -L and -I based on that + if test -n "$PREFIX_BROTLI"; then + LIB_BROTLI="-lbrotlidec" + LD_BROTLI=-L${PREFIX_BROTLI}/lib$libsuff + CPP_BROTLI=-I${PREFIX_BROTLI}/include + DIR_BROTLI=${PREFIX_BROTLI}/lib$libsuff + fi + + LDFLAGS="$LDFLAGS $LD_BROTLI" + CPPFLAGS="$CPPFLAGS $CPP_BROTLI" + LIBS="$LIB_BROTLI $LIBS" + + AC_CHECK_LIB(brotlidec, BrotliDecoderDecompress) + + AC_CHECK_HEADERS(brotli/decode.h, + curl_brotli_msg="enabled (libbrotlidec)" + HAVE_BROTLI=1 + AC_DEFINE(HAVE_BROTLI, 1, [if BROTLI is in use]) + AC_SUBST(HAVE_BROTLI, [1]) + ) + + if test X"$OPT_BROTLI" != Xoff && + test "$HAVE_BROTLI" != "1"; then + AC_MSG_ERROR([BROTLI libs and/or directories were not found where specified!]) + fi + + if test "$HAVE_BROTLI" = "1"; then + if test -n "$DIR_BROTLI"; then + dnl when the brotli shared libs were found in a path that the run-time + dnl linker doesn't search through, we need to add it to CURL_LIBRARY_PATH + dnl to prevent further configure tests to fail due to this + + if test "x$cross_compiling" != "xyes"; then + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_BROTLI" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_BROTLI to CURL_LIBRARY_PATH]) + fi + fi + else + dnl no brotli, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + fi +fi + +dnl ********************************************************************** +dnl Check for libzstd +dnl ********************************************************************** + +dnl Default to compiler & linker defaults for libzstd +OPT_ZSTD=off +AC_ARG_WITH(zstd,dnl +AS_HELP_STRING([--with-zstd=PATH],[Where to look for libzstd, PATH points to the libzstd installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) +AS_HELP_STRING([--without-zstd], [disable libzstd]), + OPT_ZSTD=$withval) + +if test X"$OPT_ZSTD" != Xno; then + dnl backup the pre-zstd variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + case "$OPT_ZSTD" in + yes) + dnl --with-zstd (without path) used + CURL_CHECK_PKGCONFIG(libzstd) + + if test "$PKGCONFIG" != "no" ; then + LIB_ZSTD=`$PKGCONFIG --libs-only-l libzstd` + LD_ZSTD=`$PKGCONFIG --libs-only-L libzstd` + CPP_ZSTD=`$PKGCONFIG --cflags-only-I libzstd` + version=`$PKGCONFIG --modversion libzstd` + DIR_ZSTD=`echo $LD_ZSTD | $SED -e 's/-L//'` + fi + + ;; + off) + dnl no --with-zstd option given, just check default places + ;; + *) + dnl use the given --with-zstd spot + PREFIX_ZSTD=$OPT_ZSTD + ;; + esac + + dnl if given with a prefix, we set -L and -I based on that + if test -n "$PREFIX_ZSTD"; then + LIB_ZSTD="-lzstd" + LD_ZSTD=-L${PREFIX_ZSTD}/lib$libsuff + CPP_ZSTD=-I${PREFIX_ZSTD}/include + DIR_ZSTD=${PREFIX_ZSTD}/lib$libsuff + fi + + LDFLAGS="$LDFLAGS $LD_ZSTD" + CPPFLAGS="$CPPFLAGS $CPP_ZSTD" + LIBS="$LIB_ZSTD $LIBS" + + AC_CHECK_LIB(zstd, ZSTD_createDStream) + + AC_CHECK_HEADERS(zstd.h, + curl_zstd_msg="enabled (libzstd)" + HAVE_ZSTD=1 + AC_DEFINE(HAVE_ZSTD, 1, [if libzstd is in use]) + AC_SUBST(HAVE_ZSTD, [1]) + ) + + if test X"$OPT_ZSTD" != Xoff && + test "$HAVE_ZSTD" != "1"; then + AC_MSG_ERROR([libzstd was not found where specified!]) + fi + + if test "$HAVE_ZSTD" = "1"; then + if test -n "$DIR_ZSTD"; then + dnl when the zstd shared lib were found in a path that the run-time + dnl linker doesn't search through, we need to add it to + dnl CURL_LIBRARY_PATH to prevent further configure tests to fail due to + dnl this + + if test "x$cross_compiling" != "xyes"; then + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_ZSTD" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_ZSTD to CURL_LIBRARY_PATH]) + fi + fi + else + dnl no zstd, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + fi +fi + +dnl ********************************************************************** +dnl Check for LDAP +dnl ********************************************************************** + +LDAPLIBNAME="" +AC_ARG_WITH(ldap-lib, +AS_HELP_STRING([--with-ldap-lib=libname],[Specify name of ldap lib file]), + [LDAPLIBNAME="$withval"]) + +LBERLIBNAME="" +AC_ARG_WITH(lber-lib, +AS_HELP_STRING([--with-lber-lib=libname],[Specify name of lber lib file]), + [LBERLIBNAME="$withval"]) + +if test x$CURL_DISABLE_LDAP != x1 ; then + + CURL_CHECK_HEADER_LBER + CURL_CHECK_HEADER_LDAP + CURL_CHECK_HEADER_LDAP_SSL + + if test -z "$LDAPLIBNAME" ; then + if test "$curl_cv_native_windows" = "yes"; then + dnl Windows uses a single and unique LDAP library name + LDAPLIBNAME="wldap32" + LBERLIBNAME="no" + fi + fi + + if test "$LDAPLIBNAME" ; then + AC_CHECK_LIB("$LDAPLIBNAME", ldap_init,, [ + if test -n "$ldap_askedfor"; then + AC_MSG_ERROR([couldn't detect the LDAP libraries]) + fi + AC_MSG_WARN(["$LDAPLIBNAME" is not an LDAP library: LDAP disabled]) + AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP]) + AC_SUBST(CURL_DISABLE_LDAP, [1]) + AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS]) + AC_SUBST(CURL_DISABLE_LDAPS, [1])]) + else + dnl Try to find the right ldap libraries for this system + CURL_CHECK_LIBS_LDAP + case X-"$curl_cv_ldap_LIBS" in + X-unknown) + if test -n "$ldap_askedfor"; then + AC_MSG_ERROR([couldn't detect the LDAP libraries]) + fi + AC_MSG_WARN([Cannot find libraries for LDAP support: LDAP disabled]) + AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP]) + AC_SUBST(CURL_DISABLE_LDAP, [1]) + AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS]) + AC_SUBST(CURL_DISABLE_LDAPS, [1]) + ;; + esac + fi +fi + +if test x$CURL_DISABLE_LDAP != x1 ; then + + if test "$LBERLIBNAME" ; then + dnl If name is "no" then don't define this library at all + dnl (it's only needed if libldap.so's dependencies are broken). + if test "$LBERLIBNAME" != "no" ; then + AC_CHECK_LIB("$LBERLIBNAME", ber_free,, [ + AC_MSG_WARN(["$LBERLIBNAME" is not an LBER library: LDAP disabled]) + AC_DEFINE(CURL_DISABLE_LDAP, 1, [to disable LDAP]) + AC_SUBST(CURL_DISABLE_LDAP, [1]) + AC_DEFINE(CURL_DISABLE_LDAPS, 1, [to disable LDAPS]) + AC_SUBST(CURL_DISABLE_LDAPS, [1])]) + fi + fi +fi + +if test x$CURL_DISABLE_LDAP != x1 ; then + AC_CHECK_FUNCS([ldap_url_parse \ + ldap_init_fd]) + + if test "$LDAPLIBNAME" = "wldap32"; then + curl_ldap_msg="enabled (winldap)" + AC_DEFINE(USE_WIN32_LDAP, 1, [Use Windows LDAP implementation]) + else + if test "x$ac_cv_func_ldap_init_fd" = "xyes"; then + curl_ldap_msg="enabled (OpenLDAP)" + AC_DEFINE(USE_OPENLDAP, 1, [Use OpenLDAP-specific code]) + AC_SUBST(USE_OPENLDAP, [1]) + else + curl_ldap_msg="enabled (ancient OpenLDAP)" + fi + fi +fi + +if test x$CURL_DISABLE_LDAPS != x1 ; then + curl_ldaps_msg="enabled" +fi + +dnl ********************************************************************** +dnl Checks for IPv6 +dnl ********************************************************************** + +AC_MSG_CHECKING([whether to enable IPv6]) +AC_ARG_ENABLE(ipv6, +AS_HELP_STRING([--enable-ipv6],[Enable IPv6 (with IPv4) support]) +AS_HELP_STRING([--disable-ipv6],[Disable IPv6 support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + ipv6=no + ;; + *) AC_MSG_RESULT(yes) + ipv6=yes + ;; + esac ], + + AC_RUN_IFELSE([AC_LANG_SOURCE([[ +/* are AF_INET6 and sockaddr_in6 available? */ +#include +#ifdef HAVE_WINSOCK2_H +#include +#include +#else +#include +#include +#if defined (__TANDEM) +# include +#endif +#endif +#include /* for exit() */ +main() +{ + struct sockaddr_in6 s; + (void)s; + if (socket(AF_INET6, SOCK_STREAM, 0) < 0) + exit(1); + else + exit(0); +} +]]) +], + AC_MSG_RESULT(yes) + ipv6=yes, + AC_MSG_RESULT(no) + ipv6=no, + AC_MSG_RESULT(yes) + ipv6=yes +)) + +if test "$ipv6" = yes; then + curl_ipv6_msg="enabled" + AC_DEFINE(ENABLE_IPV6, 1, [Define if you want to enable IPv6 support]) + IPV6_ENABLED=1 + AC_SUBST(IPV6_ENABLED) + + AC_MSG_CHECKING([if struct sockaddr_in6 has sin6_scope_id member]) + AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ +#include +#ifdef HAVE_WINSOCK2_H +#include +#include +#else +#include +#if defined (__TANDEM) +# include +#endif +#endif +]], [[ + struct sockaddr_in6 s; + s.sin6_scope_id = 0; +]])], [ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_SOCKADDR_IN6_SIN6_SCOPE_ID, 1, [Define to 1 if struct sockaddr_in6 has the sin6_scope_id member]) + ], [ + AC_MSG_RESULT([no]) + ]) +fi + +dnl ********************************************************************** +dnl Check if the operating system allows programs to write to their own argv[] +dnl ********************************************************************** + +AC_MSG_CHECKING([if argv can be written to]) +CURL_RUN_IFELSE([[ +int main(int argc, char **argv) +{ +#ifdef _WIN32 + /* on Windows, writing to the argv does not hide the argument in + process lists so it can just be skipped */ + (void)argc; + (void)argv; + return 1; +#else + (void)argc; + argv[0][0] = ' '; + return (argv[0][0] == ' ')?0:1; +#endif +} +]],[ + curl_cv_writable_argv=yes +],[ + curl_cv_writable_argv=no +],[ + curl_cv_writable_argv=cross +]) +case $curl_cv_writable_argv in +yes) + AC_DEFINE(HAVE_WRITABLE_ARGV, 1, [Define this symbol if your OS supports changing the contents of argv]) + AC_MSG_RESULT(yes) + ;; +no) + AC_MSG_RESULT(no) + ;; +*) + AC_MSG_RESULT(no) + AC_MSG_WARN([the previous check could not be made default was used]) + ;; +esac + +dnl ********************************************************************** +dnl Check for GSS-API libraries +dnl ********************************************************************** + +dnl check for GSS-API stuff in the /usr as default + +GSSAPI_ROOT="/usr" +AC_ARG_WITH(gssapi-includes, + AS_HELP_STRING([--with-gssapi-includes=DIR], + [Specify location of GSS-API headers]), + [ GSSAPI_INCS="-I$withval" + want_gss="yes" ] +) + +AC_ARG_WITH(gssapi-libs, + AS_HELP_STRING([--with-gssapi-libs=DIR], + [Specify location of GSS-API libs]), + [ GSSAPI_LIB_DIR="-L$withval" + want_gss="yes" ] +) + +AC_ARG_WITH(gssapi, + AS_HELP_STRING([--with-gssapi=DIR], + [Where to look for GSS-API]), [ + GSSAPI_ROOT="$withval" + if test x"$GSSAPI_ROOT" != xno; then + want_gss="yes" + if test x"$GSSAPI_ROOT" = xyes; then + dnl if yes, then use default root + GSSAPI_ROOT="/usr" + fi + fi +]) + +: ${KRB5CONFIG:="$GSSAPI_ROOT/bin/krb5-config"} + +save_CPPFLAGS="$CPPFLAGS" +AC_MSG_CHECKING([if GSS-API support is requested]) +if test x"$want_gss" = xyes; then + AC_MSG_RESULT(yes) + + if test $GSSAPI_ROOT != "/usr"; then + CURL_CHECK_PKGCONFIG(mit-krb5-gssapi, $GSSAPI_ROOT/lib/pkgconfig) + else + CURL_CHECK_PKGCONFIG(mit-krb5-gssapi) + fi + if test -z "$GSSAPI_INCS"; then + if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then + GSSAPI_INCS=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --cflags gssapi` + elif test "$PKGCONFIG" != "no" ; then + GSSAPI_INCS=`$PKGCONFIG --cflags mit-krb5-gssapi` + elif test -f "$KRB5CONFIG"; then + GSSAPI_INCS=`$KRB5CONFIG --cflags gssapi` + elif test "$GSSAPI_ROOT" != "yes"; then + GSSAPI_INCS="-I$GSSAPI_ROOT/include" + fi + fi + + CPPFLAGS="$CPPFLAGS $GSSAPI_INCS" + + AC_CHECK_HEADER(gss.h, + [ + dnl found in the given dirs + AC_DEFINE(HAVE_GSSGNU, 1, [if you have GNU GSS]) + gnu_gss=yes + ], + [ + dnl not found, check Heimdal or MIT + AC_CHECK_HEADERS([gssapi/gssapi.h], [], [not_mit=1]) + AC_CHECK_HEADERS( + [gssapi/gssapi_generic.h gssapi/gssapi_krb5.h], + [], + [not_mit=1], + [ +AC_INCLUDES_DEFAULT +#ifdef HAVE_GSSAPI_GSSAPI_H +#include +#endif + ]) + if test "x$not_mit" = "x1"; then + dnl MIT not found, check for Heimdal + AC_CHECK_HEADER(gssapi.h, + [ + dnl found + AC_DEFINE(HAVE_GSSHEIMDAL, 1, [if you have Heimdal]) + ], + [ + dnl no header found, disabling GSS + want_gss=no + AC_MSG_WARN(disabling GSS-API support since no header files were found) + ] + ) + else + dnl MIT found + AC_DEFINE(HAVE_GSSMIT, 1, [if you have MIT Kerberos]) + dnl check if we have a really old MIT Kerberos version (<= 1.2) + AC_MSG_CHECKING([if GSS-API headers declare GSS_C_NT_HOSTBASED_SERVICE]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ +#include +#include +#include + ]],[[ + gss_import_name( + (OM_uint32 *)0, + (gss_buffer_t)0, + GSS_C_NT_HOSTBASED_SERVICE, + (gss_name_t *)0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_DEFINE(HAVE_OLD_GSSMIT, 1, + [if you have an old MIT Kerberos version, lacking GSS_C_NT_HOSTBASED_SERVICE]) + ]) + fi + ] + ) +else + AC_MSG_RESULT(no) +fi +if test x"$want_gss" = xyes; then + AC_DEFINE(HAVE_GSSAPI, 1, [if you have GSS-API libraries]) + HAVE_GSSAPI=1 + curl_gss_msg="enabled (MIT Kerberos/Heimdal)" + + if test -n "$gnu_gss"; then + curl_gss_msg="enabled (GNU GSS)" + LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR" + LIBS="-lgss $LIBS" + elif test -z "$GSSAPI_LIB_DIR"; then + case $host in + *-*-darwin*) + LIBS="-lgssapi_krb5 -lresolv $LIBS" + ;; + *) + if test $GSSAPI_ROOT != "/usr"; then + CURL_CHECK_PKGCONFIG(mit-krb5-gssapi, $GSSAPI_ROOT/lib/pkgconfig) + else + CURL_CHECK_PKGCONFIG(mit-krb5-gssapi) + fi + if test -n "$host_alias" -a -f "$GSSAPI_ROOT/bin/$host_alias-krb5-config"; then + dnl krb5-config doesn't have --libs-only-L or similar, put everything + dnl into LIBS + gss_libs=`$GSSAPI_ROOT/bin/$host_alias-krb5-config --libs gssapi` + LIBS="$gss_libs $LIBS" + elif test "$PKGCONFIG" != "no" ; then + gss_libs=`$PKGCONFIG --libs mit-krb5-gssapi` + LIBS="$gss_libs $LIBS" + elif test -f "$KRB5CONFIG"; then + dnl krb5-config doesn't have --libs-only-L or similar, put everything + dnl into LIBS + gss_libs=`$KRB5CONFIG --libs gssapi` + LIBS="$gss_libs $LIBS" + else + case $host in + *-hp-hpux*) + gss_libname="gss" + ;; + *) + gss_libname="gssapi" + ;; + esac + + if test "$GSSAPI_ROOT" != "yes"; then + LDFLAGS="$LDFLAGS -L$GSSAPI_ROOT/lib$libsuff" + LIBS="-l$gss_libname $LIBS" + else + LIBS="-l$gss_libname $LIBS" + fi + fi + ;; + esac + else + LDFLAGS="$LDFLAGS $GSSAPI_LIB_DIR" + case $host in + *-hp-hpux*) + LIBS="-lgss $LIBS" + ;; + *) + LIBS="-lgssapi $LIBS" + ;; + esac + fi +else + CPPFLAGS="$save_CPPFLAGS" +fi + +if test x"$want_gss" = xyes; then + AC_MSG_CHECKING([if we can link against GSS-API library]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([gss_init_sec_context]) + ],[ + AC_MSG_RESULT([yes]) + ],[ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([--with-gssapi was specified, but a GSS-API library was not found.]) + ]) +fi + +build_libstubgss=no +if test x"$want_gss" = "xyes"; then + build_libstubgss=yes +fi + +AM_CONDITIONAL(BUILD_STUB_GSS, test "x$build_libstubgss" = "xyes") + +dnl ------------------------------------------------------------- +dnl parse --with-default-ssl-backend so it can be validated below +dnl ------------------------------------------------------------- + +DEFAULT_SSL_BACKEND=no +VALID_DEFAULT_SSL_BACKEND= +AC_ARG_WITH(default-ssl-backend, +AS_HELP_STRING([--with-default-ssl-backend=NAME],[Use NAME as default SSL backend]) +AS_HELP_STRING([--without-default-ssl-backend],[Use implicit default SSL backend]), + [DEFAULT_SSL_BACKEND=$withval]) +case "$DEFAULT_SSL_BACKEND" in + no) + dnl --without-default-ssl-backend option used + ;; + default|yes) + dnl --with-default-ssl-backend option used without name + AC_MSG_ERROR([The name of the default SSL backend is required.]) + ;; + *) + dnl --with-default-ssl-backend option used with name + AC_SUBST(DEFAULT_SSL_BACKEND) + dnl needs to be validated below + VALID_DEFAULT_SSL_BACKEND=no + ;; +esac + +CURL_WITH_SCHANNEL +CURL_WITH_SECURETRANSPORT +CURL_WITH_AMISSL +CURL_WITH_OPENSSL +CURL_WITH_GNUTLS +CURL_WITH_MBEDTLS +CURL_WITH_WOLFSSL +CURL_WITH_BEARSSL +CURL_WITH_RUSTLS + +dnl link required libraries for USE_WIN32_CRYPTO or USE_SCHANNEL +if test "x$USE_WIN32_CRYPTO" = "x1" -o "x$USE_SCHANNEL" = "x1"; then + LIBS="-ladvapi32 -lcrypt32 $LIBS" +fi + +dnl link bcrypt for BCryptGenRandom() (used when building for Vista or newer) +if test "x$curl_cv_native_windows" = "xyes"; then + LIBS="-lbcrypt $LIBS" +fi + +case "x$SSL_DISABLED$OPENSSL_ENABLED$GNUTLS_ENABLED$MBEDTLS_ENABLED$WOLFSSL_ENABLED$SCHANNEL_ENABLED$SECURETRANSPORT_ENABLED$BEARSSL_ENABLED$RUSTLS_ENABLED" +in +x) + AC_MSG_ERROR([TLS not detected, you will not be able to use HTTPS, FTPS, NTLM and more. +Use --with-openssl, --with-gnutls, --with-wolfssl, --with-mbedtls, --with-schannel, --with-secure-transport, --with-amissl, --with-bearssl or --with-rustls to address this.]) + ;; +x1) + # one SSL backend is enabled + AC_SUBST(SSL_ENABLED) + SSL_ENABLED="1" + AC_MSG_NOTICE([built with one SSL backend]) + ;; +xD) + # explicitly built without TLS + ;; +xD*) + AC_MSG_ERROR([--without-ssl has been set together with an explicit option to use an ssl library +(e.g. --with-openssl, --with-gnutls, --with-wolfssl, --with-mbedtls, --with-schannel, --with-secure-transport, --with-amissl, --with-bearssl, --with-rustls). +Since these are conflicting parameters, verify which is the desired one and drop the other.]) + ;; +*) + # more than one SSL backend is enabled + AC_SUBST(SSL_ENABLED) + SSL_ENABLED="1" + AC_SUBST(CURL_WITH_MULTI_SSL) + CURL_WITH_MULTI_SSL="1" + AC_DEFINE(CURL_WITH_MULTI_SSL, 1, [built with multiple SSL backends]) + AC_MSG_NOTICE([built with multiple SSL backends]) + ;; +esac + +if test -n "$ssl_backends"; then + curl_ssl_msg="enabled ($ssl_backends)" +fi + +if test no = "$VALID_DEFAULT_SSL_BACKEND" +then + if test -n "$SSL_ENABLED" + then + AC_MSG_ERROR([Default SSL backend $DEFAULT_SSL_BACKEND not enabled!]) + else + AC_MSG_ERROR([Default SSL backend requires SSL!]) + fi +elif test yes = "$VALID_DEFAULT_SSL_BACKEND" +then + AC_DEFINE_UNQUOTED([CURL_DEFAULT_SSL_BACKEND], ["$DEFAULT_SSL_BACKEND"], [Default SSL backend]) +fi + +dnl ********************************************************************** +dnl Check for the CA bundle +dnl ********************************************************************** + +if test -n "$check_for_ca_bundle"; then + CURL_CHECK_CA_BUNDLE +fi + +dnl ********************************************************************** +dnl Check for libpsl +dnl ********************************************************************** + +AC_ARG_WITH(libpsl, + AS_HELP_STRING([--without-libpsl], + [disable support for libpsl cookie checking]), + with_libpsl=$withval, + with_libpsl=yes) +if test $with_libpsl != "no"; then + AC_SEARCH_LIBS(psl_builtin, psl, + [curl_psl_msg="enabled"; + AC_DEFINE([USE_LIBPSL], [1], [PSL support enabled]) + ], + [curl_psl_msg="no (libpsl not found)"; + AC_MSG_WARN([libpsl was not found]) + ] + ) +fi +AM_CONDITIONAL([USE_LIBPSL], [test "$curl_psl_msg" = "enabled"]) + + +dnl ********************************************************************** +dnl Check for libgsasl +dnl ********************************************************************** + +AC_ARG_WITH(libgsasl, + AS_HELP_STRING([--without-libgsasl], + [disable libgsasl support for SCRAM]), + with_libgsasl=$withval, + with_libgsasl=yes) +if test $with_libgsasl != "no"; then + AC_SEARCH_LIBS(gsasl_init, gsasl, + [curl_gsasl_msg="enabled"; + AC_DEFINE([USE_GSASL], [1], [GSASL support enabled]) + ], + [curl_gsasl_msg="no (libgsasl not found)"; + AC_MSG_WARN([libgsasl was not found]) + ] + ) +fi +AM_CONDITIONAL([USE_GSASL], [test "$curl_gsasl_msg" = "enabled"]) + +AC_ARG_WITH(libmetalink,, + AC_MSG_ERROR([--with-libmetalink and --without-libmetalink no longer work!])) + +dnl ********************************************************************** +dnl Check for the presence of LIBSSH2 libraries and headers +dnl ********************************************************************** + +dnl Default to compiler & linker defaults for LIBSSH2 files & libraries. +OPT_LIBSSH2=off +AC_ARG_WITH(libssh2,dnl +AS_HELP_STRING([--with-libssh2=PATH],[Where to look for libssh2, PATH points to the libssh2 installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) +AS_HELP_STRING([--with-libssh2], [enable libssh2]), + OPT_LIBSSH2=$withval, OPT_LIBSSH2=no) + + +OPT_LIBSSH=off +AC_ARG_WITH(libssh,dnl +AS_HELP_STRING([--with-libssh=PATH],[Where to look for libssh, PATH points to the libssh installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) +AS_HELP_STRING([--with-libssh], [enable libssh]), + OPT_LIBSSH=$withval, OPT_LIBSSH=no) + +OPT_WOLFSSH=off +AC_ARG_WITH(wolfssh,dnl +AS_HELP_STRING([--with-wolfssh=PATH],[Where to look for wolfssh, PATH points to the wolfSSH installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) +AS_HELP_STRING([--with-wolfssh], [enable wolfssh]), + OPT_WOLFSSH=$withval, OPT_WOLFSSH=no) + +if test X"$OPT_LIBSSH2" != Xno; then + dnl backup the pre-libssh2 variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + case "$OPT_LIBSSH2" in + yes) + dnl --with-libssh2 (without path) used + CURL_CHECK_PKGCONFIG(libssh2) + + if test "$PKGCONFIG" != "no" ; then + LIB_SSH2=`$PKGCONFIG --libs-only-l libssh2` + LD_SSH2=`$PKGCONFIG --libs-only-L libssh2` + CPP_SSH2=`$PKGCONFIG --cflags-only-I libssh2` + version=`$PKGCONFIG --modversion libssh2` + DIR_SSH2=`echo $LD_SSH2 | $SED -e 's/^-L//'` + fi + + ;; + off) + dnl no --with-libssh2 option given, just check default places + ;; + *) + dnl use the given --with-libssh2 spot + PREFIX_SSH2=$OPT_LIBSSH2 + ;; + esac + + dnl if given with a prefix, we set -L and -I based on that + if test -n "$PREFIX_SSH2"; then + LIB_SSH2="-lssh2" + LD_SSH2=-L${PREFIX_SSH2}/lib$libsuff + CPP_SSH2=-I${PREFIX_SSH2}/include + DIR_SSH2=${PREFIX_SSH2}/lib$libsuff + fi + + LDFLAGS="$LDFLAGS $LD_SSH2" + CPPFLAGS="$CPPFLAGS $CPP_SSH2" + LIBS="$LIB_SSH2 $LIBS" + + dnl check for function added in libssh2 version 1.0 + AC_CHECK_LIB(ssh2, libssh2_session_block_directions) + + AC_CHECK_HEADER(libssh2.h, + curl_ssh_msg="enabled (libSSH2)" + LIBSSH2_ENABLED=1 + AC_DEFINE(USE_LIBSSH2, 1, [if libSSH2 is in use]) + AC_SUBST(USE_LIBSSH2, [1]) + ) + + if test X"$OPT_LIBSSH2" != Xoff && + test "$LIBSSH2_ENABLED" != "1"; then + AC_MSG_ERROR([libSSH2 libs and/or directories were not found where specified!]) + fi + + if test "$LIBSSH2_ENABLED" = "1"; then + if test -n "$DIR_SSH2"; then + dnl when the libssh2 shared libs were found in a path that the run-time + dnl linker doesn't search through, we need to add it to CURL_LIBRARY_PATH + dnl to prevent further configure tests to fail due to this + + if test "x$cross_compiling" != "xyes"; then + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_SSH2" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_SSH2 to CURL_LIBRARY_PATH]) + fi + fi + else + dnl no libssh2, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + fi +elif test X"$OPT_LIBSSH" != Xno; then + dnl backup the pre-libssh variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + case "$OPT_LIBSSH" in + yes) + dnl --with-libssh (without path) used + CURL_CHECK_PKGCONFIG(libssh) + + if test "$PKGCONFIG" != "no" ; then + LIB_SSH=`$PKGCONFIG --libs-only-l libssh` + LD_SSH=`$PKGCONFIG --libs-only-L libssh` + CPP_SSH=`$PKGCONFIG --cflags-only-I libssh` + version=`$PKGCONFIG --modversion libssh` + DIR_SSH=`echo $LD_SSH | $SED -e 's/^-L//'` + fi + + ;; + off) + dnl no --with-libssh option given, just check default places + ;; + *) + dnl use the given --with-libssh spot + PREFIX_SSH=$OPT_LIBSSH + ;; + esac + + dnl if given with a prefix, we set -L and -I based on that + if test -n "$PREFIX_SSH"; then + LIB_SSH="-lssh" + LD_SSH=-L${PREFIX_SSH}/lib$libsuff + CPP_SSH=-I${PREFIX_SSH}/include + DIR_SSH=${PREFIX_SSH}/lib$libsuff + fi + + LDFLAGS="$LDFLAGS $LD_SSH" + CPPFLAGS="$CPPFLAGS $CPP_SSH" + LIBS="$LIB_SSH $LIBS" + + AC_CHECK_LIB(ssh, ssh_new) + + AC_CHECK_HEADER(libssh/libssh.h, + curl_ssh_msg="enabled (libSSH)" + LIBSSH_ENABLED=1 + AC_DEFINE(USE_LIBSSH, 1, [if libSSH is in use]) + AC_SUBST(USE_LIBSSH, [1]) + ) + + if test X"$OPT_LIBSSH" != Xoff && + test "$LIBSSH_ENABLED" != "1"; then + AC_MSG_ERROR([libSSH libs and/or directories were not found where specified!]) + fi + + if test "$LIBSSH_ENABLED" = "1"; then + if test -n "$DIR_SSH"; then + dnl when the libssh shared libs were found in a path that the run-time + dnl linker doesn't search through, we need to add it to CURL_LIBRARY_PATH + dnl to prevent further configure tests to fail due to this + + if test "x$cross_compiling" != "xyes"; then + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_SSH" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_SSH to CURL_LIBRARY_PATH]) + fi + fi + else + dnl no libssh, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + fi +elif test X"$OPT_WOLFSSH" != Xno; then + dnl backup the pre-wolfssh variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + + if test "$OPT_WOLFSSH" != yes; then + WOLFCONFIG="$OPT_WOLFSSH/bin/wolfssh-config" + LDFLAGS="$LDFLAGS `$WOLFCONFIG --libs`" + CPPFLAGS="$CPPFLAGS `$WOLFCONFIG --cflags`" + fi + + AC_CHECK_LIB(wolfssh, wolfSSH_Init) + + AC_CHECK_HEADERS(wolfssh/ssh.h, + curl_ssh_msg="enabled (wolfSSH)" + WOLFSSH_ENABLED=1 + AC_DEFINE(USE_WOLFSSH, 1, [if wolfSSH is in use]) + AC_SUBST(USE_WOLFSSH, [1]) + ) + +fi + +dnl ********************************************************************** +dnl Check for the presence of LIBRTMP libraries and headers +dnl ********************************************************************** + +dnl Default to compiler & linker defaults for LIBRTMP files & libraries. +OPT_LIBRTMP=off +AC_ARG_WITH(librtmp,dnl +AS_HELP_STRING([--with-librtmp=PATH],[Where to look for librtmp, PATH points to the LIBRTMP installation; when possible, set the PKG_CONFIG_PATH environment variable instead of using this option]) +AS_HELP_STRING([--without-librtmp], [disable LIBRTMP]), + OPT_LIBRTMP=$withval) + +if test X"$OPT_LIBRTMP" != Xno; then + dnl backup the pre-librtmp variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + case "$OPT_LIBRTMP" in + yes) + dnl --with-librtmp (without path) used + CURL_CHECK_PKGCONFIG(librtmp) + + if test "$PKGCONFIG" != "no" ; then + LIB_RTMP=`$PKGCONFIG --libs-only-l librtmp` + LD_RTMP=`$PKGCONFIG --libs-only-L librtmp` + CPP_RTMP=`$PKGCONFIG --cflags-only-I librtmp` + version=`$PKGCONFIG --modversion librtmp` + DIR_RTMP=`echo $LD_RTMP | $SED -e 's/^-L//'` + else + dnl To avoid link errors, we do not allow --librtmp without + dnl a pkgconfig file + AC_MSG_ERROR([--librtmp was specified but could not find librtmp pkgconfig file.]) + fi + + ;; + off) + dnl no --with-librtmp option given, just check default places + LIB_RTMP="-lrtmp" + ;; + *) + dnl use the given --with-librtmp spot + LIB_RTMP="-lrtmp" + PREFIX_RTMP=$OPT_LIBRTMP + ;; + esac + + dnl if given with a prefix, we set -L and -I based on that + if test -n "$PREFIX_RTMP"; then + LD_RTMP=-L${PREFIX_RTMP}/lib$libsuff + CPP_RTMP=-I${PREFIX_RTMP}/include + DIR_RTMP=${PREFIX_RTMP}/lib$libsuff + fi + + LDFLAGS="$LDFLAGS $LD_RTMP" + CPPFLAGS="$CPPFLAGS $CPP_RTMP" + LIBS="$LIB_RTMP $LIBS" + + AC_CHECK_LIB(rtmp, RTMP_Init, + [ + AC_CHECK_HEADERS(librtmp/rtmp.h, + curl_rtmp_msg="enabled (librtmp)" + LIBRTMP_ENABLED=1 + AC_DEFINE(USE_LIBRTMP, 1, [if librtmp is in use]) + AC_SUBST(USE_LIBRTMP, [1]) + ) + ], + dnl not found, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + ) + + if test X"$OPT_LIBRTMP" != Xoff && + test "$LIBRTMP_ENABLED" != "1"; then + AC_MSG_ERROR([librtmp libs and/or directories were not found where specified!]) + fi + +fi + +dnl ********************************************************************** +dnl Check for linker switch for versioned symbols +dnl ********************************************************************** + +versioned_symbols_flavour= +AC_MSG_CHECKING([whether versioned symbols are wanted]) +AC_ARG_ENABLE(versioned-symbols, +AS_HELP_STRING([--enable-versioned-symbols], [Enable versioned symbols in shared library]) +AS_HELP_STRING([--disable-versioned-symbols], [Disable versioned symbols in shared library]), +[ case "$enableval" in + yes) AC_MSG_RESULT(yes) + AC_MSG_CHECKING([if libraries can be versioned]) + GLD=`$LD --help < /dev/null 2>/dev/null | grep version-script` + if test -z "$GLD"; then + AC_MSG_RESULT(no) + AC_MSG_WARN([You need an ld version supporting the --version-script option]) + else + AC_MSG_RESULT(yes) + if test "x$CURL_WITH_MULTI_SSL" = "x1"; then + versioned_symbols_flavour="MULTISSL_" + elif test "x$OPENSSL_ENABLED" = "x1"; then + versioned_symbols_flavour="OPENSSL_" + elif test "x$GNUTLS_ENABLED" = "x1"; then + versioned_symbols_flavour="GNUTLS_" + elif test "x$WOLFSSL_ENABLED" = "x1"; then + versioned_symbols_flavour="WOLFSSL_" + elif test "x$SCHANNEL_ENABLED" = "x1"; then + versioned_symbols_flavour="SCHANNEL_" + elif test "x$SECURETRANSPORT_ENABLED" = "x1"; then + versioned_symbols_flavour="SECURE_TRANSPORT_" + else + versioned_symbols_flavour="" + fi + versioned_symbols="yes" + fi + ;; + + *) AC_MSG_RESULT(no) + ;; + esac +], [ +AC_MSG_RESULT(no) +] +) + +AC_SUBST([CURL_LT_SHLIB_VERSIONED_FLAVOUR], + ["$versioned_symbols_flavour"]) +AM_CONDITIONAL([CURL_LT_SHLIB_USE_VERSIONED_SYMBOLS], + [test "x$versioned_symbols" = 'xyes']) + +dnl Update .plist file with current version +AC_SUBST([CURL_PLIST_VERSION], + ["$CURLVERSION"]) + +dnl ------------------------------------------------- +dnl check winidn option before other IDN libraries +dnl ------------------------------------------------- + +AC_MSG_CHECKING([whether to enable Windows native IDN (Windows native builds only)]) +OPT_WINIDN="default" +AC_ARG_WITH(winidn, +AS_HELP_STRING([--with-winidn=PATH],[enable Windows native IDN]) +AS_HELP_STRING([--without-winidn], [disable Windows native IDN]), + OPT_WINIDN=$withval) +case "$OPT_WINIDN" in + no|default) + dnl --without-winidn option used or configure option not specified + want_winidn="no" + AC_MSG_RESULT([no]) + ;; + yes) + dnl --with-winidn option used without path + want_winidn="yes" + want_winidn_path="default" + AC_MSG_RESULT([yes]) + ;; + *) + dnl --with-winidn option used with path + want_winidn="yes" + want_winidn_path="$withval" + AC_MSG_RESULT([yes ($withval)]) + ;; +esac + +if test "$want_winidn" = "yes"; then + dnl winidn library support has been requested + clean_CFLAGS="$CFLAGS" + clean_CPPFLAGS="$CPPFLAGS" + clean_LDFLAGS="$LDFLAGS" + clean_LIBS="$LIBS" + WINIDN_LIBS="-lnormaliz" + WINIDN_CPPFLAGS="" + # + if test "$want_winidn_path" != "default"; then + dnl path has been specified + dnl pkg-config not available or provides no info + WINIDN_LDFLAGS="-L$want_winidn_path/lib$libsuff" + WINIDN_CPPFLAGS="-I$want_winidn_path/include" + WINIDN_DIR="$want_winidn_path/lib$libsuff" + fi + # + dnl WinIDN requires a minimum supported OS version of at least Vista (0x0600) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #include + ]],[[ + #if (WINVER < 0x600) && (_WIN32_WINNT < 0x600) + #error + #endif + ]]) + ],[ + ],[ + CFLAGS=`echo $CFLAGS | $SED -e 's/-DWINVER=[[^ ]]*//g'` + CFLAGS=`echo $CFLAGS | $SED -e 's/-D_WIN32_WINNT=[[^ ]]*//g'` + CPPFLAGS=`echo $CPPFLAGS | $SED -e 's/-DWINVER=[[^ ]]*//g'` + CPPFLAGS=`echo $CPPFLAGS | $SED -e 's/-D_WIN32_WINNT=[[^ ]]*//g'` + WINIDN_CPPFLAGS="$WINIDN_CPPFLAGS -DWINVER=0x0600" + ]) + # + CPPFLAGS="$CPPFLAGS $WINIDN_CPPFLAGS" + LDFLAGS="$LDFLAGS $WINIDN_LDFLAGS" + LIBS="$WINIDN_LIBS $LIBS" + # + AC_MSG_CHECKING([if IdnToUnicode can be linked]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + #include + ]],[[ + IdnToUnicode(0, NULL, 0, NULL, 0); + ]]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_winidn="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_winidn="no" + ]) + # + if test "$tst_links_winidn" = "yes"; then + AC_DEFINE(USE_WIN32_IDN, 1, [Define to 1 if you have the `normaliz' (WinIDN) library (-lnormaliz).]) + AC_SUBST([IDN_ENABLED], [1]) + curl_idn_msg="enabled (Windows-native)" + else + AC_MSG_WARN([Cannot find libraries for IDN support: IDN disabled]) + CFLAGS="$clean_CFLAGS" + CPPFLAGS="$clean_CPPFLAGS" + LDFLAGS="$clean_LDFLAGS" + LIBS="$clean_LIBS" + fi +fi + +dnl ********************************************************************** +dnl Check for the presence of IDN libraries and headers +dnl ********************************************************************** + +AC_MSG_CHECKING([whether to build with libidn2]) +OPT_IDN="default" +AC_ARG_WITH(libidn2, +AS_HELP_STRING([--with-libidn2=PATH],[Enable libidn2 usage]) +AS_HELP_STRING([--without-libidn2],[Disable libidn2 usage]), + [OPT_IDN=$withval]) +if test "x$tst_links_winidn" = "xyes"; then + want_idn="no" + AC_MSG_RESULT([no (using winidn instead)]) +else + case "$OPT_IDN" in + no) + dnl --without-libidn2 option used + want_idn="no" + AC_MSG_RESULT([no]) + ;; + default) + dnl configure option not specified + want_idn="yes" + want_idn_path="default" + AC_MSG_RESULT([(assumed) yes]) + ;; + yes) + dnl --with-libidn2 option used without path + want_idn="yes" + want_idn_path="default" + AC_MSG_RESULT([yes]) + ;; + *) + dnl --with-libidn2 option used with path + want_idn="yes" + want_idn_path="$withval" + AC_MSG_RESULT([yes ($withval)]) + ;; + esac +fi + +if test "$want_idn" = "yes"; then + dnl idn library support has been requested + clean_CPPFLAGS="$CPPFLAGS" + clean_LDFLAGS="$LDFLAGS" + clean_LIBS="$LIBS" + PKGCONFIG="no" + # + if test "$want_idn_path" != "default"; then + dnl path has been specified + IDN_PCDIR="$want_idn_path/lib$libsuff/pkgconfig" + CURL_CHECK_PKGCONFIG(libidn2, [$IDN_PCDIR]) + if test "$PKGCONFIG" != "no"; then + IDN_LIBS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl + $PKGCONFIG --libs-only-l libidn2 2>/dev/null` + IDN_LDFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl + $PKGCONFIG --libs-only-L libidn2 2>/dev/null` + IDN_CPPFLAGS=`CURL_EXPORT_PCDIR([$IDN_PCDIR]) dnl + $PKGCONFIG --cflags-only-I libidn2 2>/dev/null` + IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/^-L//'` + else + dnl pkg-config not available or provides no info + IDN_LIBS="-lidn2" + IDN_LDFLAGS="-L$want_idn_path/lib$libsuff" + IDN_CPPFLAGS="-I$want_idn_path/include" + IDN_DIR="$want_idn_path/lib$libsuff" + fi + else + dnl path not specified + CURL_CHECK_PKGCONFIG(libidn2) + if test "$PKGCONFIG" != "no"; then + IDN_LIBS=`$PKGCONFIG --libs-only-l libidn2 2>/dev/null` + IDN_LDFLAGS=`$PKGCONFIG --libs-only-L libidn2 2>/dev/null` + IDN_CPPFLAGS=`$PKGCONFIG --cflags-only-I libidn2 2>/dev/null` + IDN_DIR=`echo $IDN_LDFLAGS | $SED -e 's/^-L//'` + else + dnl pkg-config not available or provides no info + IDN_LIBS="-lidn2" + fi + fi + # + if test "$PKGCONFIG" != "no"; then + AC_MSG_NOTICE([pkg-config: IDN_LIBS: "$IDN_LIBS"]) + AC_MSG_NOTICE([pkg-config: IDN_LDFLAGS: "$IDN_LDFLAGS"]) + AC_MSG_NOTICE([pkg-config: IDN_CPPFLAGS: "$IDN_CPPFLAGS"]) + AC_MSG_NOTICE([pkg-config: IDN_DIR: "$IDN_DIR"]) + else + AC_MSG_NOTICE([IDN_LIBS: "$IDN_LIBS"]) + AC_MSG_NOTICE([IDN_LDFLAGS: "$IDN_LDFLAGS"]) + AC_MSG_NOTICE([IDN_CPPFLAGS: "$IDN_CPPFLAGS"]) + AC_MSG_NOTICE([IDN_DIR: "$IDN_DIR"]) + fi + # + CPPFLAGS="$CPPFLAGS $IDN_CPPFLAGS" + LDFLAGS="$LDFLAGS $IDN_LDFLAGS" + LIBS="$IDN_LIBS $LIBS" + # + AC_MSG_CHECKING([if idn2_lookup_ul can be linked]) + AC_LINK_IFELSE([ + AC_LANG_FUNC_LINK_TRY([idn2_lookup_ul]) + ],[ + AC_MSG_RESULT([yes]) + tst_links_libidn="yes" + ],[ + AC_MSG_RESULT([no]) + tst_links_libidn="no" + ]) + # + AC_CHECK_HEADERS( idn2.h ) + + if test "$tst_links_libidn" = "yes"; then + AC_DEFINE(HAVE_LIBIDN2, 1, [Define to 1 if you have the `idn2' library (-lidn2).]) + dnl different versions of libidn have different setups of these: + + AC_SUBST([IDN_ENABLED], [1]) + curl_idn_msg="enabled (libidn2)" + if test -n "$IDN_DIR" -a "x$cross_compiling" != "xyes"; then + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$IDN_DIR" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $IDN_DIR to CURL_LIBRARY_PATH]) + fi + else + AC_MSG_WARN([Cannot find libraries for IDN support: IDN disabled]) + CPPFLAGS="$clean_CPPFLAGS" + LDFLAGS="$clean_LDFLAGS" + LIBS="$clean_LIBS" + fi +fi + +dnl ********************************************************************** +dnl Check for nghttp2 +dnl ********************************************************************** + +OPT_H2="yes" + +if test "x$disable_http" = "xyes" -o X"$want_hyper" != Xno; then + # without HTTP or with Hyper, nghttp2 is no use + OPT_H2="no" +fi + +AC_ARG_WITH(nghttp2, +AS_HELP_STRING([--with-nghttp2=PATH],[Enable nghttp2 usage]) +AS_HELP_STRING([--without-nghttp2],[Disable nghttp2 usage]), + [OPT_H2=$withval]) +case "$OPT_H2" in + no) + dnl --without-nghttp2 option used + want_nghttp2="no" + ;; + yes) + dnl --with-nghttp2 option used without path + want_nghttp2="default" + want_nghttp2_path="" + want_nghttp2_pkg_config_path="" + ;; + *) + dnl --with-nghttp2 option used with path + want_nghttp2="yes" + want_nghttp2_path="$withval" + want_nghttp2_pkg_config_path="$withval/lib/pkgconfig" + ;; +esac + +if test X"$want_nghttp2" != Xno; then + dnl backup the pre-nghttp2 variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + CURL_CHECK_PKGCONFIG(libnghttp2, $want_nghttp2_pkg_config_path) + + if test "$PKGCONFIG" != "no" ; then + LIB_H2=`CURL_EXPORT_PCDIR([$want_nghttp2_pkg_config_path]) + $PKGCONFIG --libs-only-l libnghttp2` + AC_MSG_NOTICE([-l is $LIB_H2]) + + CPP_H2=`CURL_EXPORT_PCDIR([$want_nghttp2_pkg_config_path]) dnl + $PKGCONFIG --cflags-only-I libnghttp2` + AC_MSG_NOTICE([-I is $CPP_H2]) + + LD_H2=`CURL_EXPORT_PCDIR([$want_nghttp2_pkg_config_path]) + $PKGCONFIG --libs-only-L libnghttp2` + AC_MSG_NOTICE([-L is $LD_H2]) + + DIR_H2=`echo $LD_H2 | $SED -e 's/^-L//'` + elif test x"$want_nghttp2_path" != x; then + LIB_H2="-lnghttp2" + LD_H2=-L${want_nghttp2_path}/lib$libsuff + CPP_H2=-I${want_nghttp2_path}/include + DIR_H2=${want_nghttp2_path}/lib$libsuff + elif test X"$want_nghttp2" != Xdefault; then + dnl no nghttp2 pkg-config found and no custom directory specified, + dnl deal with it + AC_MSG_ERROR([--with-nghttp2 was specified but could not find libnghttp2 pkg-config file.]) + else + LIB_H2="-lnghttp2" + fi + + LDFLAGS="$LDFLAGS $LD_H2" + CPPFLAGS="$CPPFLAGS $CPP_H2" + LIBS="$LIB_H2 $LIBS" + + # use nghttp2_session_get_stream_local_window_size to require nghttp2 + # >= 1.15.0 + AC_CHECK_LIB(nghttp2, nghttp2_session_get_stream_local_window_size, + [ + AC_CHECK_HEADERS(nghttp2/nghttp2.h, + curl_h2_msg="enabled (nghttp2)" + NGHTTP2_ENABLED=1 + AC_DEFINE(USE_NGHTTP2, 1, [if nghttp2 is in use]) + AC_SUBST(USE_NGHTTP2, [1]) + ) + + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_H2" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_H2 to CURL_LIBRARY_PATH]) + ], + dnl not found, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + ) +fi + +dnl ********************************************************************** +dnl Check for ngtcp2 (QUIC) +dnl ********************************************************************** + +OPT_TCP2="no" + +if test "x$disable_http" = "xyes"; then + # without HTTP, ngtcp2 is no use + OPT_TCP2="no" +fi + +AC_ARG_WITH(ngtcp2, +AS_HELP_STRING([--with-ngtcp2=PATH],[Enable ngtcp2 usage]) +AS_HELP_STRING([--without-ngtcp2],[Disable ngtcp2 usage]), + [OPT_TCP2=$withval]) +case "$OPT_TCP2" in + no) + dnl --without-ngtcp2 option used + want_tcp2="no" + ;; + yes) + dnl --with-ngtcp2 option used without path + want_tcp2="default" + want_tcp2_path="" + ;; + *) + dnl --with-ngtcp2 option used with path + want_tcp2="yes" + want_tcp2_path="$withval/lib/pkgconfig" + ;; +esac + +curl_tcp2_msg="no (--with-ngtcp2)" +if test X"$want_tcp2" != Xno; then + dnl backup the pre-ngtcp2 variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + CURL_CHECK_PKGCONFIG(libngtcp2, $want_tcp2_path) + + if test "$PKGCONFIG" != "no" ; then + LIB_TCP2=`CURL_EXPORT_PCDIR([$want_tcp2_path]) + $PKGCONFIG --libs-only-l libngtcp2` + AC_MSG_NOTICE([-l is $LIB_TCP2]) + + CPP_TCP2=`CURL_EXPORT_PCDIR([$want_tcp2_path]) dnl + $PKGCONFIG --cflags-only-I libngtcp2` + AC_MSG_NOTICE([-I is $CPP_TCP2]) + + LD_TCP2=`CURL_EXPORT_PCDIR([$want_tcp2_path]) + $PKGCONFIG --libs-only-L libngtcp2` + AC_MSG_NOTICE([-L is $LD_TCP2]) + + LDFLAGS="$LDFLAGS $LD_TCP2" + CPPFLAGS="$CPPFLAGS $CPP_TCP2" + LIBS="$LIB_TCP2 $LIBS" + + if test "x$cross_compiling" != "xyes"; then + DIR_TCP2=`echo $LD_TCP2 | $SED -e 's/^-L//'` + fi + AC_CHECK_LIB(ngtcp2, ngtcp2_conn_client_new_versioned, + [ + AC_CHECK_HEADERS(ngtcp2/ngtcp2.h, + NGTCP2_ENABLED=1 + AC_DEFINE(USE_NGTCP2, 1, [if ngtcp2 is in use]) + AC_SUBST(USE_NGTCP2, [1]) + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_TCP2" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_TCP2 to CURL_LIBRARY_PATH]) + ) + ], + dnl not found, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + ) + + else + dnl no ngtcp2 pkg-config found, deal with it + if test X"$want_tcp2" != Xdefault; then + dnl To avoid link errors, we do not allow --with-ngtcp2 without + dnl a pkgconfig file + AC_MSG_ERROR([--with-ngtcp2 was specified but could not find ngtcp2 pkg-config file.]) + fi + fi + +fi + +if test "x$NGTCP2_ENABLED" = "x1" -a "x$OPENSSL_ENABLED" = "x1"; then + dnl backup the pre-ngtcp2_crypto_quictls variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + CURL_CHECK_PKGCONFIG(libngtcp2_crypto_quictls, $want_tcp2_path) + + if test "$PKGCONFIG" != "no" ; then + LIB_NGTCP2_CRYPTO_QUICTLS=`CURL_EXPORT_PCDIR([$want_tcp2_path]) + $PKGCONFIG --libs-only-l libngtcp2_crypto_quictls` + AC_MSG_NOTICE([-l is $LIB_NGTCP2_CRYPTO_QUICTLS]) + + CPP_NGTCP2_CRYPTO_QUICTLS=`CURL_EXPORT_PCDIR([$want_tcp2_path]) dnl + $PKGCONFIG --cflags-only-I libngtcp2_crypto_quictls` + AC_MSG_NOTICE([-I is $CPP_NGTCP2_CRYPTO_QUICTLS]) + + LD_NGTCP2_CRYPTO_QUICTLS=`CURL_EXPORT_PCDIR([$want_tcp2_path]) + $PKGCONFIG --libs-only-L libngtcp2_crypto_quictls` + AC_MSG_NOTICE([-L is $LD_NGTCP2_CRYPTO_QUICTLS]) + + LDFLAGS="$LDFLAGS $LD_NGTCP2_CRYPTO_QUICTLS" + CPPFLAGS="$CPPFLAGS $CPP_NGTCP2_CRYPTO_QUICTLS" + LIBS="$LIB_NGTCP2_CRYPTO_QUICTLS $LIBS" + + if test "x$cross_compiling" != "xyes"; then + DIR_NGTCP2_CRYPTO_QUICTLS=`echo $LD_NGTCP2_CRYPTO_QUICTLS | $SED -e 's/^-L//'` + fi + AC_CHECK_LIB(ngtcp2_crypto_quictls, ngtcp2_crypto_recv_client_initial_cb, + [ + AC_CHECK_HEADERS(ngtcp2/ngtcp2_crypto.h, + NGTCP2_ENABLED=1 + AC_DEFINE(USE_NGTCP2_CRYPTO_QUICTLS, 1, [if ngtcp2_crypto_quictls is in use]) + AC_SUBST(USE_NGTCP2_CRYPTO_QUICTLS, [1]) + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_QUICTLS" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_NGTCP2_CRYPTO_QUICTLS to CURL_LIBRARY_PATH]) + ) + ], + dnl not found, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + ) + + else + dnl no ngtcp2_crypto_quictls pkg-config found, deal with it + if test X"$want_tcp2" != Xdefault; then + dnl To avoid link errors, we do not allow --with-ngtcp2 without + dnl a pkgconfig file + AC_MSG_ERROR([--with-ngtcp2 was specified but could not find ngtcp2_crypto_quictls pkg-config file.]) + fi + fi +fi + +if test "x$NGTCP2_ENABLED" = "x1" -a "x$GNUTLS_ENABLED" = "x1"; then + dnl backup the pre-ngtcp2_crypto_gnutls variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + CURL_CHECK_PKGCONFIG(libngtcp2_crypto_gnutls, $want_tcp2_path) + + if test "$PKGCONFIG" != "no" ; then + LIB_NGTCP2_CRYPTO_GNUTLS=`CURL_EXPORT_PCDIR([$want_tcp2_path]) + $PKGCONFIG --libs-only-l libngtcp2_crypto_gnutls` + AC_MSG_NOTICE([-l is $LIB_NGTCP2_CRYPTO_GNUTLS]) + + CPP_NGTCP2_CRYPTO_GNUTLS=`CURL_EXPORT_PCDIR([$want_tcp2_path]) dnl + $PKGCONFIG --cflags-only-I libngtcp2_crypto_gnutls` + AC_MSG_NOTICE([-I is $CPP_NGTCP2_CRYPTO_GNUTLS]) + + LD_NGTCP2_CRYPTO_GNUTLS=`CURL_EXPORT_PCDIR([$want_tcp2_path]) + $PKGCONFIG --libs-only-L libngtcp2_crypto_gnutls` + AC_MSG_NOTICE([-L is $LD_NGTCP2_CRYPTO_GNUTLS]) + + LDFLAGS="$LDFLAGS $LD_NGTCP2_CRYPTO_GNUTLS" + CPPFLAGS="$CPPFLAGS $CPP_NGTCP2_CRYPTO_GNUTLS" + LIBS="$LIB_NGTCP2_CRYPTO_GNUTLS $LIBS" + + if test "x$cross_compiling" != "xyes"; then + DIR_NGTCP2_CRYPTO_GNUTLS=`echo $LD_NGTCP2_CRYPTO_GNUTLS | $SED -e 's/^-L//'` + fi + AC_CHECK_LIB(ngtcp2_crypto_gnutls, ngtcp2_crypto_recv_client_initial_cb, + [ + AC_CHECK_HEADERS(ngtcp2/ngtcp2_crypto.h, + NGTCP2_ENABLED=1 + AC_DEFINE(USE_NGTCP2_CRYPTO_GNUTLS, 1, [if ngtcp2_crypto_gnutls is in use]) + AC_SUBST(USE_NGTCP2_CRYPTO_GNUTLS, [1]) + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_GNUTLS" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_NGTCP2_CRYPTO_GNUTLS to CURL_LIBRARY_PATH]) + ) + ], + dnl not found, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + ) + + else + dnl no ngtcp2_crypto_gnutls pkg-config found, deal with it + if test X"$want_tcp2" != Xdefault; then + dnl To avoid link errors, we do not allow --with-ngtcp2 without + dnl a pkgconfig file + AC_MSG_ERROR([--with-ngtcp2 was specified but could not find ngtcp2_crypto_gnutls pkg-config file.]) + fi + fi +fi + +if test "x$NGTCP2_ENABLED" = "x1" -a "x$WOLFSSL_ENABLED" = "x1"; then + dnl backup the pre-ngtcp2_crypto_wolfssl variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + CURL_CHECK_PKGCONFIG(libngtcp2_crypto_wolfssl, $want_tcp2_path) + + if test "$PKGCONFIG" != "no" ; then + LIB_NGTCP2_CRYPTO_WOLFSSL=`CURL_EXPORT_PCDIR([$want_tcp2_path]) + $PKGCONFIG --libs-only-l libngtcp2_crypto_wolfssl` + AC_MSG_NOTICE([-l is $LIB_NGTCP2_CRYPTO_WOLFSSL]) + + CPP_NGTCP2_CRYPTO_WOLFSSL=`CURL_EXPORT_PCDIR([$want_tcp2_path]) dnl + $PKGCONFIG --cflags-only-I libngtcp2_crypto_wolfssl` + AC_MSG_NOTICE([-I is $CPP_NGTCP2_CRYPTO_WOLFSSL]) + + LD_NGTCP2_CRYPTO_WOLFSSL=`CURL_EXPORT_PCDIR([$want_tcp2_path]) + $PKGCONFIG --libs-only-L libngtcp2_crypto_wolfssl` + AC_MSG_NOTICE([-L is $LD_NGTCP2_CRYPTO_WOLFSSL]) + + LDFLAGS="$LDFLAGS $LD_NGTCP2_CRYPTO_WOLFSSL" + CPPFLAGS="$CPPFLAGS $CPP_NGTCP2_CRYPTO_WOLFSSL" + LIBS="$LIB_NGTCP2_CRYPTO_WOLFSSL $LIBS" + + if test "x$cross_compiling" != "xyes"; then + DIR_NGTCP2_CRYPTO_WOLFSSL=`echo $LD_NGTCP2_CRYPTO_WOLFSSL | $SED -e 's/^-L//'` + fi + AC_CHECK_LIB(ngtcp2_crypto_wolfssl, ngtcp2_crypto_recv_client_initial_cb, + [ + AC_CHECK_HEADERS(ngtcp2/ngtcp2_crypto.h, + NGTCP2_ENABLED=1 + AC_DEFINE(USE_NGTCP2_CRYPTO_WOLFSSL, 1, [if ngtcp2_crypto_wolfssl is in use]) + AC_SUBST(USE_NGTCP2_CRYPTO_WOLFSSL, [1]) + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGTCP2_CRYPTO_WOLFSSL" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_NGTCP2_CRYPTO_WOLFSSL to CURL_LIBRARY_PATH]) + ) + ], + dnl not found, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + ) + + else + dnl no ngtcp2_crypto_wolfssl pkg-config found, deal with it + if test X"$want_tcp2" != Xdefault; then + dnl To avoid link errors, we do not allow --with-ngtcp2 without + dnl a pkgconfig file + AC_MSG_ERROR([--with-ngtcp2 was specified but could not find ngtcp2_crypto_wolfssl pkg-config file.]) + fi + fi +fi + +dnl ********************************************************************** +dnl Check for nghttp3 (HTTP/3 with ngtcp2) +dnl ********************************************************************** + +OPT_NGHTTP3="yes" + +if test "x$NGTCP2_ENABLED" = "x"; then + # without ngtcp2, nghttp3 is of no use for us + OPT_NGHTTP3="no" +fi + +AC_ARG_WITH(nghttp3, +AS_HELP_STRING([--with-nghttp3=PATH],[Enable nghttp3 usage]) +AS_HELP_STRING([--without-nghttp3],[Disable nghttp3 usage]), + [OPT_NGHTTP3=$withval]) +case "$OPT_NGHTTP3" in + no) + dnl --without-nghttp3 option used + want_nghttp3="no" + ;; + yes) + dnl --with-nghttp3 option used without path + want_nghttp3="default" + want_nghttp3_path="" + ;; + *) + dnl --with-nghttp3 option used with path + want_nghttp3="yes" + want_nghttp3_path="$withval/lib/pkgconfig" + ;; +esac + +curl_http3_msg="no (--with-nghttp3)" +if test X"$want_nghttp3" != Xno; then + dnl backup the pre-nghttp3 variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + CURL_CHECK_PKGCONFIG(libnghttp3, $want_nghttp3_path) + + if test "$PKGCONFIG" != "no" ; then + LIB_NGHTTP3=`CURL_EXPORT_PCDIR([$want_nghttp3_path]) + $PKGCONFIG --libs-only-l libnghttp3` + AC_MSG_NOTICE([-l is $LIB_NGHTTP3]) + + CPP_NGHTTP3=`CURL_EXPORT_PCDIR([$want_nghttp3_path]) dnl + $PKGCONFIG --cflags-only-I libnghttp3` + AC_MSG_NOTICE([-I is $CPP_NGHTTP3]) + + LD_NGHTTP3=`CURL_EXPORT_PCDIR([$want_nghttp3_path]) + $PKGCONFIG --libs-only-L libnghttp3` + AC_MSG_NOTICE([-L is $LD_NGHTTP3]) + + LDFLAGS="$LDFLAGS $LD_NGHTTP3" + CPPFLAGS="$CPPFLAGS $CPP_NGHTTP3" + LIBS="$LIB_NGHTTP3 $LIBS" + + if test "x$cross_compiling" != "xyes"; then + DIR_NGHTTP3=`echo $LD_NGHTTP3 | $SED -e 's/^-L//'` + fi + AC_CHECK_LIB(nghttp3, nghttp3_conn_client_new_versioned, + [ + AC_CHECK_HEADERS(nghttp3/nghttp3.h, + curl_h3_msg="enabled (ngtcp2 + nghttp3)" + NGHTTP3_ENABLED=1 + AC_DEFINE(USE_NGHTTP3, 1, [if nghttp3 is in use]) + AC_SUBST(USE_NGHTTP3, [1]) + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_NGHTTP3" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_NGHTTP3 to CURL_LIBRARY_PATH]) + ) + ], + dnl not found, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + ) + + else + dnl no nghttp3 pkg-config found, deal with it + if test X"$want_nghttp3" != Xdefault; then + dnl To avoid link errors, we do not allow --with-nghttp3 without + dnl a pkgconfig file + AC_MSG_ERROR([--with-nghttp3 was specified but could not find nghttp3 pkg-config file.]) + fi + fi + +fi + +dnl ********************************************************************** +dnl Check for quiche (QUIC) +dnl ********************************************************************** + +OPT_QUICHE="no" + +if test "x$disable_http" = "xyes" -o "x$USE_NGTCP" = "x1"; then + # without HTTP or with ngtcp2, quiche is no use + OPT_QUICHE="no" +fi + +AC_ARG_WITH(quiche, +AS_HELP_STRING([--with-quiche=PATH],[Enable quiche usage]) +AS_HELP_STRING([--without-quiche],[Disable quiche usage]), + [OPT_QUICHE=$withval]) +case "$OPT_QUICHE" in + no) + dnl --without-quiche option used + want_quiche="no" + ;; + yes) + dnl --with-quiche option used without path + want_quiche="default" + want_quiche_path="" + ;; + *) + dnl --with-quiche option used with path + want_quiche="yes" + want_quiche_path="$withval" + ;; +esac + +if test X"$want_quiche" != Xno; then + + if test "$NGHTTP3_ENABLED" = 1; then + AC_MSG_ERROR([--with-quiche and --with-ngtcp2 are mutually exclusive]) + fi + + dnl backup the pre-quiche variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + CURL_CHECK_PKGCONFIG(quiche, $want_quiche_path) + + if test "$PKGCONFIG" != "no" ; then + LIB_QUICHE=`CURL_EXPORT_PCDIR([$want_quiche_path]) + $PKGCONFIG --libs-only-l quiche` + AC_MSG_NOTICE([-l is $LIB_QUICHE]) + + CPP_QUICHE=`CURL_EXPORT_PCDIR([$want_quiche_path]) dnl + $PKGCONFIG --cflags-only-I quiche` + AC_MSG_NOTICE([-I is $CPP_QUICHE]) + + LD_QUICHE=`CURL_EXPORT_PCDIR([$want_quiche_path]) + $PKGCONFIG --libs-only-L quiche` + AC_MSG_NOTICE([-L is $LD_QUICHE]) + + LDFLAGS="$LDFLAGS $LD_QUICHE" + CPPFLAGS="$CPPFLAGS $CPP_QUICHE" + LIBS="$LIB_QUICHE $LIBS" + + if test "x$cross_compiling" != "xyes"; then + DIR_QUICHE=`echo $LD_QUICHE | $SED -e 's/^-L//'` + fi + AC_CHECK_LIB(quiche, quiche_conn_send_ack_eliciting, + [ + AC_CHECK_HEADERS(quiche.h, + experimental="$experimental HTTP3" + AC_MSG_NOTICE([HTTP3 support is experimental]) + curl_h3_msg="enabled (quiche)" + QUICHE_ENABLED=1 + AC_DEFINE(USE_QUICHE, 1, [if quiche is in use]) + AC_SUBST(USE_QUICHE, [1]) + AC_CHECK_FUNCS([quiche_conn_set_qlog_fd]) + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_QUICHE" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_QUICHE to CURL_LIBRARY_PATH]), + [], + [ +AC_INCLUDES_DEFAULT +#include + ] + ) + ], + dnl not found, revert back to clean variables + AC_MSG_ERROR([couldn't use quiche]) + ) + else + dnl no quiche pkg-config found, deal with it + if test X"$want_quiche" != Xdefault; then + dnl To avoid link errors, we do not allow --with-quiche without + dnl a pkgconfig file + AC_MSG_ERROR([--with-quiche was specified but could not find quiche pkg-config file.]) + fi + fi +fi + +dnl ********************************************************************** +dnl Check for msh3 (QUIC) +dnl ********************************************************************** + +OPT_MSH3="no" + +if test "x$disable_http" = "xyes" -o "x$USE_NGTCP" = "x1"; then + # without HTTP or with ngtcp2, msh3 is no use + OPT_MSH3="no" +fi + +AC_ARG_WITH(msh3, +AS_HELP_STRING([--with-msh3=PATH],[Enable msh3 usage]) +AS_HELP_STRING([--without-msh3],[Disable msh3 usage]), + [OPT_MSH3=$withval]) +case "$OPT_MSH3" in + no) + dnl --without-msh3 option used + want_msh3="no" + ;; + yes) + dnl --with-msh3 option used without path + want_msh3="default" + want_msh3_path="" + ;; + *) + dnl --with-msh3 option used with path + want_msh3="yes" + want_msh3_path="$withval" + ;; +esac + +if test X"$want_msh3" != Xno; then + + if test "$NGHTTP3_ENABLED" = 1; then + AC_MSG_ERROR([--with-msh3 and --with-ngtcp2 are mutually exclusive]) + fi + + dnl backup the pre-msh3 variables + CLEANLDFLAGS="$LDFLAGS" + CLEANCPPFLAGS="$CPPFLAGS" + CLEANLIBS="$LIBS" + + if test -n "$want_msh3_path"; then + LD_MSH3="-L$want_msh3_path/lib" + CPP_MSH3="-I$want_msh3_path/include" + DIR_MSH3="$want_msh3_path/lib" + LDFLAGS="$LDFLAGS $LD_MSH3" + CPPFLAGS="$CPPFLAGS $CPP_MSH3" + fi + LIBS="-lmsh3 $LIBS" + + AC_CHECK_LIB(msh3, MsH3ApiOpen, + [ + AC_CHECK_HEADERS(msh3.h, + curl_h3_msg="enabled (msh3)" + MSH3_ENABLED=1 + AC_DEFINE(USE_MSH3, 1, [if msh3 is in use]) + AC_SUBST(USE_MSH3, [1]) + CURL_LIBRARY_PATH="$CURL_LIBRARY_PATH:$DIR_MSH3" + export CURL_LIBRARY_PATH + AC_MSG_NOTICE([Added $DIR_MSH3 to CURL_LIBRARY_PATH]), + experimental="$experimental HTTP3" + ) + ], + dnl not found, revert back to clean variables + LDFLAGS=$CLEANLDFLAGS + CPPFLAGS=$CLEANCPPFLAGS + LIBS=$CLEANLIBS + ) +fi + +dnl ********************************************************************** +dnl Check for zsh completion path +dnl ********************************************************************** + +OPT_ZSH_FPATH=default +AC_ARG_WITH(zsh-functions-dir, +AS_HELP_STRING([--with-zsh-functions-dir=PATH],[Install zsh completions to PATH]) +AS_HELP_STRING([--without-zsh-functions-dir],[Do not install zsh completions]), + [OPT_ZSH_FPATH=$withval]) +case "$OPT_ZSH_FPATH" in + no) + dnl --without-zsh-functions-dir option used + ;; + default|yes) + dnl --with-zsh-functions-dir option used without path + ZSH_FUNCTIONS_DIR="$datarootdir/zsh/site-functions" + AC_SUBST(ZSH_FUNCTIONS_DIR) + ;; + *) + dnl --with-zsh-functions-dir option used with path + ZSH_FUNCTIONS_DIR="$withval" + AC_SUBST(ZSH_FUNCTIONS_DIR) + ;; +esac + +dnl ********************************************************************** +dnl Check for fish completion path +dnl ********************************************************************** + +OPT_FISH_FPATH=default +AC_ARG_WITH(fish-functions-dir, +AS_HELP_STRING([--with-fish-functions-dir=PATH],[Install fish completions to PATH]) +AS_HELP_STRING([--without-fish-functions-dir],[Do not install fish completions]), + [OPT_FISH_FPATH=$withval]) +case "$OPT_FISH_FPATH" in + no) + dnl --without-fish-functions-dir option used + ;; + default|yes) + dnl --with-fish-functions-dir option used without path + CURL_CHECK_PKGCONFIG(fish) + if test "$PKGCONFIG" != "no" ; then + FISH_FUNCTIONS_DIR="$($PKGCONFIG --variable completionsdir fish)" + else + FISH_FUNCTIONS_DIR="$datarootdir/fish/vendor_completions.d" + fi + AC_SUBST(FISH_FUNCTIONS_DIR) + ;; + *) + dnl --with-fish-functions-dir option used with path + FISH_FUNCTIONS_DIR="$withval" + AC_SUBST(FISH_FUNCTIONS_DIR) + ;; +esac + +dnl Now check for the very most basic headers. Then we can use these +dnl ones as default-headers when checking for the rest! +AC_CHECK_HEADERS( + sys/types.h \ + sys/time.h \ + sys/select.h \ + sys/socket.h \ + sys/ioctl.h \ + unistd.h \ + stdlib.h \ + arpa/inet.h \ + net/if.h \ + netinet/in.h \ + netinet/in6.h \ + sys/un.h \ + linux/tcp.h \ + netinet/tcp.h \ + netinet/udp.h \ + netdb.h \ + sys/sockio.h \ + sys/stat.h \ + sys/param.h \ + termios.h \ + termio.h \ + fcntl.h \ + io.h \ + pwd.h \ + utime.h \ + sys/utime.h \ + sys/poll.h \ + poll.h \ + socket.h \ + sys/resource.h \ + libgen.h \ + locale.h \ + stdbool.h \ + sys/filio.h \ + sys/wait.h \ + setjmp.h, +dnl to do if not found +[], +dnl to do if found +[], +dnl default includes +[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +#ifdef HAVE_SYS_SELECT_H +#include +#elif defined(HAVE_UNISTD_H) +#include +#endif +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +#ifdef HAVE_NETINET_IN_H +#include +#endif +#ifdef HAVE_NETINET_IN6_H +#include +#endif +#ifdef HAVE_SYS_UN_H +#include +#endif +] +) + + +dnl Checks for typedefs, structures, and compiler characteristics. +AC_C_CONST +AC_TYPE_SIZE_T + +CURL_CHECK_STRUCT_TIMEVAL +CURL_VERIFY_RUNTIMELIBS + +CURL_SIZEOF(size_t) +CURL_SIZEOF(long) +CURL_SIZEOF(int) +CURL_SIZEOF(time_t) +CURL_SIZEOF(off_t) + +o=$CPPFLAGS +CPPFLAGS="-I$srcdir/include $CPPFLAGS" +CURL_SIZEOF(curl_off_t, [ +#include +]) +CURL_SIZEOF(curl_socket_t, [ +#include +]) +CPPFLAGS=$o + +AC_CHECK_TYPE(long long, + [AC_DEFINE(HAVE_LONGLONG, 1, + [Define to 1 if the compiler supports the 'long long' data type.])] + longlong="yes" +) + +if test ${ac_cv_sizeof_curl_off_t} -lt 8; then + AC_MSG_ERROR([64 bit curl_off_t is required]) +fi + +# check for ssize_t +AC_CHECK_TYPE(ssize_t, , + AC_DEFINE(ssize_t, int, [the signed version of size_t])) + +# check for bool type +AC_CHECK_TYPE([bool],[ + AC_DEFINE(HAVE_BOOL_T, 1, + [Define to 1 if bool is an available type.]) +], ,[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_STDBOOL_H +#include +#endif +]) + +# check for sa_family_t +AC_CHECK_TYPE(sa_family_t, + AC_DEFINE(CURL_SA_FAMILY_T, sa_family_t, [IP address type in sockaddr]), + [ + # The windows name? + AC_CHECK_TYPE(ADDRESS_FAMILY, + AC_DEFINE(CURL_SA_FAMILY_T, ADDRESS_FAMILY, [IP address type in sockaddr]), + AC_DEFINE(CURL_SA_FAMILY_T, unsigned short, [IP address type in sockaddr]), + [ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif + ]) + ], +[ +#ifdef HAVE_SYS_SOCKET_H +#include +#endif +]) + +# check for suseconds_t +AC_CHECK_TYPE([suseconds_t],[ + AC_DEFINE(HAVE_SUSECONDS_T, 1, + [Define to 1 if suseconds_t is an available type.]) +], ,[ +#ifdef HAVE_SYS_TYPES_H +#include +#endif +#ifdef HAVE_SYS_TIME_H +#include +#endif +]) + +AC_MSG_CHECKING([if time_t is unsigned]) +CURL_RUN_IFELSE( + [ + #include + #include + int main(void) { + time_t t = -1; + return (t < 0); + } + ],[ + AC_MSG_RESULT([yes]) + AC_DEFINE(HAVE_TIME_T_UNSIGNED, 1, [Define this if time_t is unsigned]) +],[ + AC_MSG_RESULT([no]) +],[ + dnl cross-compiling, most systems are unsigned + AC_MSG_RESULT([no]) +]) + +CURL_CONFIGURE_PULL_SYS_POLL + +TYPE_IN_ADDR_T + +TYPE_SOCKADDR_STORAGE + +CURL_CHECK_FUNC_SELECT + +CURL_CHECK_FUNC_RECV +CURL_CHECK_FUNC_SEND +CURL_CHECK_MSG_NOSIGNAL + +CURL_CHECK_FUNC_ALARM +CURL_CHECK_FUNC_BASENAME +CURL_CHECK_FUNC_CLOSESOCKET +CURL_CHECK_FUNC_CLOSESOCKET_CAMEL +CURL_CHECK_FUNC_FCNTL +CURL_CHECK_FUNC_FREEADDRINFO +CURL_CHECK_FUNC_FSETXATTR +CURL_CHECK_FUNC_FTRUNCATE +CURL_CHECK_FUNC_GETADDRINFO +CURL_CHECK_FUNC_GETHOSTBYNAME +CURL_CHECK_FUNC_GETHOSTBYNAME_R +CURL_CHECK_FUNC_GETHOSTNAME +CURL_CHECK_FUNC_GETPEERNAME +CURL_CHECK_FUNC_GETSOCKNAME +CURL_CHECK_FUNC_IF_NAMETOINDEX +CURL_CHECK_FUNC_GETIFADDRS +CURL_CHECK_FUNC_GMTIME_R +CURL_CHECK_FUNC_INET_NTOP +CURL_CHECK_FUNC_INET_PTON +CURL_CHECK_FUNC_IOCTL +CURL_CHECK_FUNC_IOCTLSOCKET +CURL_CHECK_FUNC_IOCTLSOCKET_CAMEL +CURL_CHECK_FUNC_MEMRCHR +CURL_CHECK_FUNC_POLL +CURL_CHECK_FUNC_SIGACTION +CURL_CHECK_FUNC_SIGINTERRUPT +CURL_CHECK_FUNC_SIGNAL +CURL_CHECK_FUNC_SIGSETJMP +CURL_CHECK_FUNC_SOCKET +CURL_CHECK_FUNC_SOCKETPAIR +CURL_CHECK_FUNC_STRCASECMP +CURL_CHECK_FUNC_STRCMPI +CURL_CHECK_FUNC_STRDUP +CURL_CHECK_FUNC_STRERROR_R +CURL_CHECK_FUNC_STRICMP +CURL_CHECK_FUNC_STRTOK_R +CURL_CHECK_FUNC_STRTOLL + +case $host in + *msdosdjgpp) + ac_cv_func_pipe=no + skipcheck_pipe=yes + AC_MSG_NOTICE([skip check for pipe on msdosdjgpp]) + ;; +esac + +AC_CHECK_DECLS([getpwuid_r], [], [AC_DEFINE(HAVE_DECL_GETPWUID_R_MISSING, 1, "Set if getpwuid_r() declaration is missing")], + [[#include + #include ]]) + +AC_CHECK_FUNCS([\ + _fseeki64 \ + arc4random \ + fnmatch \ + fseeko \ + geteuid \ + getpass_r \ + getppid \ + getpwuid \ + getpwuid_r \ + getrlimit \ + gettimeofday \ + if_nametoindex \ + mach_absolute_time \ + pipe \ + sched_yield \ + sendmsg \ + setlocale \ + setmode \ + setrlimit \ + snprintf \ + utime \ + utimes \ +],[ +],[ + func="$ac_func" + eval skipcheck=\$skipcheck_$func + if test "x$skipcheck" != "xyes"; then + AC_MSG_CHECKING([deeper for $func]) + AC_LINK_IFELSE([ + AC_LANG_PROGRAM([[ + ]],[[ + $func (); + ]]) + ],[ + AC_MSG_RESULT([yes]) + eval "ac_cv_func_$func=yes" + AC_DEFINE_UNQUOTED(XC_SH_TR_CPP([HAVE_$func]), [1], + [Define to 1 if you have the $func function.]) + ],[ + AC_MSG_RESULT([but still no]) + ]) + fi +]) + +dnl On Android, the only way to know if fseeko can be used is to see if it is +dnl declared or not (for this API level), as the symbol always exists in the +dnl lib. +AC_CHECK_DECL([fseeko], + [AC_DEFINE([HAVE_DECL_FSEEKO], [1], + [Define to 1 if you have the fseeko declaration])], + [], + [[#include ]]) + +CURL_CHECK_NONBLOCKING_SOCKET + +dnl ************************************************************ +dnl nroff tool stuff +dnl + +AC_PATH_PROG( PERL, perl, , + $PATH:/usr/local/bin/perl:/usr/bin/:/usr/local/bin ) +AC_SUBST(PERL) + +AC_PATH_PROGS( NROFF, gnroff nroff, , + $PATH:/usr/bin/:/usr/local/bin ) +AC_SUBST(NROFF) + +if test -n "$NROFF"; then + dnl only check for nroff options if an nroff command was found + + AC_MSG_CHECKING([how to use *nroff to get plain text from man pages]) + MANOPT="-man" + mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null` + if test -z "$mancheck"; then + MANOPT="-mandoc" + mancheck=`echo foo | $NROFF $MANOPT 2>/dev/null` + if test -z "$mancheck"; then + MANOPT="" + AC_MSG_RESULT([failed]) + AC_MSG_WARN([found no *nroff option to get plaintext from man pages]) + else + AC_MSG_RESULT([$MANOPT]) + fi + else + AC_MSG_RESULT([$MANOPT]) + fi + AC_SUBST(MANOPT) +fi + +if test -z "$MANOPT" +then + dnl if no nroff tool was found, or no option that could convert man pages + dnl was found, then disable the built-in manual stuff + AC_MSG_WARN([disabling built-in manual]) + USE_MANUAL="no"; +fi + +dnl ************************************************************************* +dnl If the manual variable still is set, then we go with providing a built-in +dnl manual + +if test "$USE_MANUAL" = "1"; then + AC_DEFINE(USE_MANUAL, 1, [If you want to build curl with the built-in manual]) + curl_manual_msg="enabled" +fi + +dnl set variable for use in automakefile(s) +AM_CONDITIONAL(USE_MANUAL, test x"$USE_MANUAL" = x1) + +CURL_CHECK_LIB_ARES + +if test "x$curl_cv_native_windows" != "xyes" && + test "x$enable_shared" = "xyes"; then + build_libhostname=yes +else + build_libhostname=no +fi +AM_CONDITIONAL(BUILD_LIBHOSTNAME, test x$build_libhostname = xyes) + +if test "x$want_ares" != xyes; then + CURL_CHECK_OPTION_THREADED_RESOLVER +fi + +dnl ************************************************************ +dnl disable POSIX threads +dnl +AC_MSG_CHECKING([whether to use POSIX threads for threaded resolver]) +AC_ARG_ENABLE(pthreads, +AS_HELP_STRING([--enable-pthreads], + [Enable POSIX threads (default for threaded resolver)]) +AS_HELP_STRING([--disable-pthreads],[Disable POSIX threads]), +[ case "$enableval" in + no) AC_MSG_RESULT(no) + want_pthreads=no + ;; + *) AC_MSG_RESULT(yes) + want_pthreads=yes + ;; + esac ], [ + AC_MSG_RESULT(auto) + want_pthreads=auto + ] +) + +dnl turn off pthreads if rt is disabled +if test "$want_pthreads" != "no"; then + if test "$want_pthreads" = "yes" && test "$dontwant_rt" = "yes"; then + AC_MSG_ERROR([options --enable-pthreads and --disable-rt are mutually exclusive]) + fi + if test "$dontwant_rt" != "no"; then + dnl if --enable-pthreads was explicit then warn it's being ignored + if test "$want_pthreads" = "yes"; then + AC_MSG_WARN([--enable-pthreads Ignored since librt is disabled.]) + fi + want_pthreads=no + fi +fi + +dnl turn off pthreads if no threaded resolver +if test "$want_pthreads" != "no" && test "$want_thres" != "yes"; then + want_pthreads=no +fi + +dnl detect pthreads +if test "$want_pthreads" != "no"; then + AC_CHECK_HEADER(pthread.h, + [ AC_DEFINE(HAVE_PTHREAD_H, 1, [if you have ]) + save_CFLAGS="$CFLAGS" + dnl When statically linking against boringssl, -lpthread is added to LIBS. + dnl Make sure to that this does not pass the check below, we really want + dnl -pthread in CFLAGS as recommended for GCC. This also ensures that + dnl lib1541 and lib1565 tests are built with these options. Otherwise + dnl they fail the build since tests/libtest/Makefile.am clears LIBS. + save_LIBS="$LIBS" + + LIBS= + dnl Check for libc variants without a separate pthread lib like bionic + AC_CHECK_FUNC(pthread_create, [USE_THREADS_POSIX=1] ) + LIBS="$save_LIBS" + + dnl on HPUX, life is more complicated... + case $host in + *-hp-hpux*) + dnl it doesn't actually work without -lpthread + USE_THREADS_POSIX="" + ;; + *) + ;; + esac + + dnl if it wasn't found without lib, search for it in pthread lib + if test "$USE_THREADS_POSIX" != "1" + then + # assign PTHREAD for pkg-config use + PTHREAD=" -pthread" + + case $host in + *-ibm-aix*) + dnl Check if compiler is xlC + COMPILER_VERSION=`"$CC" -qversion 2>/dev/null` + if test x"$COMPILER_VERSION" = "x"; then + CFLAGS="$CFLAGS -pthread" + else + CFLAGS="$CFLAGS -qthreaded" + fi + ;; + powerpc-*amigaos*) + dnl No -pthread option, but link with -lpthread + PTHREAD=" -lpthread" + ;; + *) + CFLAGS="$CFLAGS -pthread" + ;; + esac + AC_CHECK_LIB(pthread, pthread_create, + [USE_THREADS_POSIX=1], + [ CFLAGS="$save_CFLAGS"]) + fi + + if test "x$USE_THREADS_POSIX" = "x1" + then + AC_DEFINE(USE_THREADS_POSIX, 1, [if you want POSIX threaded DNS lookup]) + curl_res_msg="POSIX threaded" + fi + ]) +fi + +dnl threaded resolver check +if test "$want_thres" = "yes" && test "x$USE_THREADS_POSIX" != "x1"; then + if test "$want_pthreads" = "yes"; then + AC_MSG_ERROR([--enable-pthreads but pthreads was not found]) + fi + dnl If native Windows fallback on Win32 threads since no POSIX threads + if test "$curl_cv_native_windows" = "yes"; then + USE_THREADS_WIN32=1 + AC_DEFINE(USE_THREADS_WIN32, 1, [if you want Win32 threaded DNS lookup]) + curl_res_msg="Win32 threaded" + else + AC_MSG_ERROR([Threaded resolver enabled but no thread library found]) + fi +fi + +CURL_CONVERT_INCLUDE_TO_ISYSTEM + +dnl ************************************************************ +dnl disable verbose text strings +dnl +AC_MSG_CHECKING([whether to enable verbose strings]) +AC_ARG_ENABLE(verbose, +AS_HELP_STRING([--enable-verbose],[Enable verbose strings]) +AS_HELP_STRING([--disable-verbose],[Disable verbose strings]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_VERBOSE_STRINGS, 1, [to disable verbose strings]) + curl_verbose_msg="no" + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl enable SSPI support +dnl +AC_MSG_CHECKING([whether to enable SSPI support (Windows native builds only)]) +AC_ARG_ENABLE(sspi, +AS_HELP_STRING([--enable-sspi],[Enable SSPI]) +AS_HELP_STRING([--disable-sspi],[Disable SSPI]), +[ case "$enableval" in + yes) + if test "$curl_cv_native_windows" = "yes"; then + AC_MSG_RESULT(yes) + AC_DEFINE(USE_WINDOWS_SSPI, 1, [to enable SSPI support]) + AC_SUBST(USE_WINDOWS_SSPI, [1]) + curl_sspi_msg="enabled" + else + AC_MSG_RESULT(no) + AC_MSG_WARN([--enable-sspi Ignored. Only supported on native Windows builds.]) + fi + ;; + *) + if test "x$SCHANNEL_ENABLED" = "x1"; then + # --with-schannel implies --enable-sspi + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi + ;; + esac ], + if test "x$SCHANNEL_ENABLED" = "x1"; then + # --with-schannel implies --enable-sspi + AC_MSG_RESULT(yes) + else + AC_MSG_RESULT(no) + fi +) + +dnl ************************************************************ +dnl disable basic authentication +dnl +AC_MSG_CHECKING([whether to enable basic authentication method]) +AC_ARG_ENABLE(basic-auth, +AS_HELP_STRING([--enable-basic-auth],[Enable basic authentication (default)]) +AS_HELP_STRING([--disable-basic-auth],[Disable basic authentication]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_BASIC_AUTH, 1, [to disable basic authentication]) + CURL_DISABLE_BASIC_AUTH=1 + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable bearer authentication +dnl +AC_MSG_CHECKING([whether to enable bearer authentication method]) +AC_ARG_ENABLE(bearer-auth, +AS_HELP_STRING([--enable-bearer-auth],[Enable bearer authentication (default)]) +AS_HELP_STRING([--disable-bearer-auth],[Disable bearer authentication]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_BEARER_AUTH, 1, [to disable bearer authentication]) + CURL_DISABLE_BEARER_AUTH=1 + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable digest authentication +dnl +AC_MSG_CHECKING([whether to enable digest authentication method]) +AC_ARG_ENABLE(digest-auth, +AS_HELP_STRING([--enable-digest-auth],[Enable digest authentication (default)]) +AS_HELP_STRING([--disable-digest-auth],[Disable digest authentication]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_DIGEST_AUTH, 1, [to disable digest authentication]) + CURL_DISABLE_DIGEST_AUTH=1 + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable kerberos authentication +dnl +AC_MSG_CHECKING([whether to enable kerberos authentication method]) +AC_ARG_ENABLE(kerberos-auth, +AS_HELP_STRING([--enable-kerberos-auth],[Enable kerberos authentication (default)]) +AS_HELP_STRING([--disable-kerberos-auth],[Disable kerberos authentication]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_KERBEROS_AUTH, 1, [to disable kerberos authentication]) + CURL_DISABLE_KERBEROS_AUTH=1 + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable negotiate authentication +dnl +AC_MSG_CHECKING([whether to enable negotiate authentication method]) +AC_ARG_ENABLE(negotiate-auth, +AS_HELP_STRING([--enable-negotiate-auth],[Enable negotiate authentication (default)]) +AS_HELP_STRING([--disable-negotiate-auth],[Disable negotiate authentication]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_NEGOTIATE_AUTH, 1, [to disable negotiate authentication]) + CURL_DISABLE_NEGOTIATE_AUTH=1 + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + + +dnl ************************************************************ +dnl disable aws +dnl +AC_MSG_CHECKING([whether to enable aws sig methods]) +AC_ARG_ENABLE(aws, +AS_HELP_STRING([--enable-aws],[Enable AWS sig support (default)]) +AS_HELP_STRING([--disable-aws],[Disable AWS sig support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_AWS, 1, [to disable AWS sig support]) + CURL_DISABLE_AWS=1 + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable NTLM support +dnl +AC_MSG_CHECKING([whether to support NTLM]) +AC_ARG_ENABLE(ntlm, +AS_HELP_STRING([--enable-ntlm],[Enable NTLM support]) +AS_HELP_STRING([--disable-ntlm],[Disable NTLM support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_NTLM, 1, [to disable NTLM support]) + CURL_DISABLE_NTLM=1 + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +CURL_CHECK_OPTION_NTLM_WB + +CURL_CHECK_NTLM_WB + +dnl ************************************************************ +dnl disable TLS-SRP authentication +dnl +AC_MSG_CHECKING([whether to enable TLS-SRP authentication]) +AC_ARG_ENABLE(tls-srp, +AS_HELP_STRING([--enable-tls-srp],[Enable TLS-SRP authentication]) +AS_HELP_STRING([--disable-tls-srp],[Disable TLS-SRP authentication]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + want_tls_srp=no + ;; + *) AC_MSG_RESULT(yes) + want_tls_srp=yes + ;; + esac ], + AC_MSG_RESULT(yes) + want_tls_srp=yes +) + +if test "$want_tls_srp" = "yes" && ( test "x$HAVE_GNUTLS_SRP" = "x1" || test "x$HAVE_OPENSSL_SRP" = "x1") ; then + AC_DEFINE(USE_TLS_SRP, 1, [Use TLS-SRP authentication]) + USE_TLS_SRP=1 + curl_tls_srp_msg="enabled" +fi + +dnl ************************************************************ +dnl disable Unix domain sockets support +dnl +AC_MSG_CHECKING([whether to enable Unix domain sockets]) +AC_ARG_ENABLE(unix-sockets, +AS_HELP_STRING([--enable-unix-sockets],[Enable Unix domain sockets]) +AS_HELP_STRING([--disable-unix-sockets],[Disable Unix domain sockets]), +[ case "$enableval" in + no) AC_MSG_RESULT(no) + want_unix_sockets=no + ;; + *) AC_MSG_RESULT(yes) + want_unix_sockets=yes + ;; + esac ], [ + AC_MSG_RESULT(auto) + want_unix_sockets=auto + ] +) +if test "x$want_unix_sockets" != "xno"; then + if test "x$curl_cv_native_windows" = "xyes"; then + USE_UNIX_SOCKETS=1 + AC_DEFINE(USE_UNIX_SOCKETS, 1, [Use Unix domain sockets]) + curl_unix_sockets_msg="enabled" + else + AC_CHECK_MEMBER([struct sockaddr_un.sun_path], [ + AC_DEFINE(USE_UNIX_SOCKETS, 1, [Use Unix domain sockets]) + AC_SUBST(USE_UNIX_SOCKETS, [1]) + curl_unix_sockets_msg="enabled" + ], [ + if test "x$want_unix_sockets" = "xyes"; then + AC_MSG_ERROR([--enable-unix-sockets is not available on this platform!]) + fi + ], [ + #include + ]) + fi +fi + +dnl ************************************************************ +dnl disable cookies support +dnl +AC_MSG_CHECKING([whether to support cookies]) +AC_ARG_ENABLE(cookies, +AS_HELP_STRING([--enable-cookies],[Enable cookies support]) +AS_HELP_STRING([--disable-cookies],[Disable cookies support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_COOKIES, 1, [to disable cookies support]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable socketpair +dnl +AC_MSG_CHECKING([whether to support socketpair]) +AC_ARG_ENABLE(socketpair, +AS_HELP_STRING([--enable-socketpair],[Enable socketpair support]) +AS_HELP_STRING([--disable-socketpair],[Disable socketpair support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_SOCKETPAIR, 1, [to disable socketpair support]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable HTTP authentication support +dnl +AC_MSG_CHECKING([whether to support HTTP authentication]) +AC_ARG_ENABLE(http-auth, +AS_HELP_STRING([--enable-http-auth],[Enable HTTP authentication support]) +AS_HELP_STRING([--disable-http-auth],[Disable HTTP authentication support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_HTTP_AUTH, 1, [disable HTTP authentication]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable DoH support +dnl +AC_MSG_CHECKING([whether to support DoH]) +AC_ARG_ENABLE(doh, +AS_HELP_STRING([--enable-doh],[Enable DoH support]) +AS_HELP_STRING([--disable-doh],[Disable DoH support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_DOH, 1, [disable DoH]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable mime API support +dnl +AC_MSG_CHECKING([whether to support the MIME API]) +AC_ARG_ENABLE(mime, +AS_HELP_STRING([--enable-mime],[Enable mime API support]) +AS_HELP_STRING([--disable-mime],[Disable mime API support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_MIME, 1, [disable mime API]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable bindlocal +dnl +AC_MSG_CHECKING([whether to support binding connections locally]) +AC_ARG_ENABLE(bindlocal, +AS_HELP_STRING([--enable-bindlocal],[Enable local binding support]) +AS_HELP_STRING([--disable-bindlocal],[Disable local binding support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_BINDLOCAL, 1, [disable local binding support]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable form API support +dnl +AC_MSG_CHECKING([whether to support the form API]) +AC_ARG_ENABLE(form-api, +AS_HELP_STRING([--enable-form-api],[Enable form API support]) +AS_HELP_STRING([--disable-form-api],[Disable form API support]), +[ case "$enableval" in + no) AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_FORM_API, 1, [disable form API]) + ;; + *) AC_MSG_RESULT(yes) + test "$enable_mime" = no && + AC_MSG_ERROR(MIME support needs to be enabled in order to enable form API support) + ;; + esac ], +[ + if test "$enable_mime" = no; then + enable_form_api=no + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_FORM_API, 1, [disable form API]) + else + AC_MSG_RESULT(yes) + fi ] +) + +dnl ************************************************************ +dnl disable date parsing +dnl +AC_MSG_CHECKING([whether to support date parsing]) +AC_ARG_ENABLE(dateparse, +AS_HELP_STRING([--enable-dateparse],[Enable date parsing]) +AS_HELP_STRING([--disable-dateparse],[Disable date parsing]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_PARSEDATE, 1, [disable date parsing]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable netrc +dnl +AC_MSG_CHECKING([whether to support netrc parsing]) +AC_ARG_ENABLE(netrc, +AS_HELP_STRING([--enable-netrc],[Enable netrc parsing]) +AS_HELP_STRING([--disable-netrc],[Disable netrc parsing]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_NETRC, 1, [disable netrc parsing]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable progress-meter +dnl +AC_MSG_CHECKING([whether to support progress-meter]) +AC_ARG_ENABLE(progress-meter, +AS_HELP_STRING([--enable-progress-meter],[Enable progress-meter]) +AS_HELP_STRING([--disable-progress-meter],[Disable progress-meter]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_PROGRESS_METER, 1, [disable progress-meter]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable shuffle DNS support +dnl +AC_MSG_CHECKING([whether to support DNS shuffling]) +AC_ARG_ENABLE(dnsshuffle, +AS_HELP_STRING([--enable-dnsshuffle],[Enable DNS shuffling]) +AS_HELP_STRING([--disable-dnsshuffle],[Disable DNS shuffling]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_SHUFFLE_DNS, 1, [disable DNS shuffling]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl disable the curl_easy_options API +dnl +AC_MSG_CHECKING([whether to support curl_easy_option*]) +AC_ARG_ENABLE(get-easy-options, +AS_HELP_STRING([--enable-get-easy-options],[Enable curl_easy_options]) +AS_HELP_STRING([--disable-get-easy-options],[Disable curl_easy_options]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_GETOPTIONS, 1, [to disable curl_easy_options]) + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl switch on/off alt-svc +dnl +AC_MSG_CHECKING([whether to support alt-svc]) +AC_ARG_ENABLE(alt-svc, +AS_HELP_STRING([--enable-alt-svc],[Enable alt-svc support]) +AS_HELP_STRING([--disable-alt-svc],[Disable alt-svc support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + AC_DEFINE(CURL_DISABLE_ALTSVC, 1, [disable alt-svc]) + curl_altsvc_msg="no"; + enable_altsvc="no" + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl ************************************************************ +dnl switch on/off headers-api +dnl +AC_MSG_CHECKING([whether to support headers-api]) +AC_ARG_ENABLE(headers-api, +AS_HELP_STRING([--enable-headers-api],[Enable headers-api support]) +AS_HELP_STRING([--disable-headers-api],[Disable headers-api support]), +[ case "$enableval" in + no) AC_MSG_RESULT(no) + curl_headers_msg="no (--enable-headers-api)" + AC_DEFINE(CURL_DISABLE_HEADERS_API, 1, [disable headers-api]) + ;; + *) + AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT(yes) +) + +dnl only check for HSTS if there's SSL present +if test -n "$SSL_ENABLED"; then + dnl ************************************************************ + dnl switch on/off hsts + dnl + AC_MSG_CHECKING([whether to support HSTS]) + AC_ARG_ENABLE(hsts, +AS_HELP_STRING([--enable-hsts],[Enable HSTS support]) +AS_HELP_STRING([--disable-hsts],[Disable HSTS support]), + [ case "$enableval" in + no) + AC_MSG_RESULT(no) + hsts="no" + ;; + *) AC_MSG_RESULT(yes) + ;; + esac ], + AC_MSG_RESULT($hsts) + ) +else + AC_MSG_NOTICE([disables HSTS due to lack of SSL]) + hsts="no" +fi + +if test "x$hsts" != "xyes"; then + curl_hsts_msg="no (--enable-hsts)"; + AC_DEFINE(CURL_DISABLE_HSTS, 1, [disable alt-svc]) +fi + +dnl ************************************************************* +dnl check whether ECH support, if desired, is actually available +dnl +if test "x$want_ech" != "xno"; then + AC_MSG_CHECKING([whether ECH support is available]) + + dnl assume NOT and look for sufficient condition + ECH_ENABLED=0 + ECH_SUPPORT='' + + dnl OpenSSL with a chosen ECH function should be enough + dnl so more exhaustive checking seems unnecessary for now + if test "x$OPENSSL_ENABLED" = "x1"; then + AC_CHECK_FUNCS(SSL_get_ech_status, + ECH_SUPPORT="ECH support available (OpenSSL with SSL_get_ech_status)" + ECH_ENABLED=1) + + dnl add 'elif' chain here for additional implementations + fi + + dnl now deal with whatever we found + if test "x$ECH_ENABLED" = "x1"; then + AC_DEFINE(USE_ECH, 1, [if ECH support is available]) + AC_MSG_RESULT($ECH_SUPPORT) + experimental="$experimental ECH" + else + AC_MSG_ERROR([--enable-ech ignored: No ECH support found]) + fi +fi + +dnl ************************************************************* +dnl check whether OpenSSL (lookalikes) have SSL_set0_wbio +dnl +if test "x$OPENSSL_ENABLED" = "x1"; then + AC_CHECK_FUNCS([SSL_set0_wbio]) +fi + +dnl ************************************************************* +dnl WebSockets +dnl +AC_MSG_CHECKING([whether to support WebSockets]) +AC_ARG_ENABLE(websockets, +AS_HELP_STRING([--enable-websockets],[Enable WebSockets support]) +AS_HELP_STRING([--disable-websockets],[Disable WebSockets support]), +[ case "$enableval" in + no) + AC_MSG_RESULT(no) + ;; + *) + if test ${ac_cv_sizeof_curl_off_t} -gt 4; then + AC_MSG_RESULT(yes) + curl_ws_msg="enabled" + AC_DEFINE_UNQUOTED(USE_WEBSOCKETS, [1], [enable websockets support]) + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS WS" + if test "x$SSL_ENABLED" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS WSS" + fi + experimental="$experimental Websockets" + else + dnl websockets requires >32 bit curl_off_t + AC_MSG_RESULT(no) + AC_MSG_WARN([Websockets disabled due to lack of >32 bit curl_off_t]) + fi + ;; + esac ], + AC_MSG_RESULT(no) +) + + +dnl ************************************************************ +dnl hiding of library internal symbols +dnl +CURL_CONFIGURE_SYMBOL_HIDING + +dnl +dnl All the library dependencies put into $LIB apply to libcurl only. +dnl +LIBCURL_LIBS="$LIBS$PTHREAD" + +AC_SUBST(LIBCURL_LIBS) +AC_SUBST(CURL_NETWORK_LIBS) +AC_SUBST(CURL_NETWORK_AND_TIME_LIBS) + +dnl BLANK_AT_MAKETIME may be used in our Makefile.am files to blank +dnl LIBS variable used in generated makefile at makefile processing +dnl time. Doing this functionally prevents LIBS from being used for +dnl all link targets in given makefile. +BLANK_AT_MAKETIME= +AC_SUBST(BLANK_AT_MAKETIME) + +AM_CONDITIONAL(CROSSCOMPILING, test x$cross_compiling = xyes) + +dnl yes or no +ENABLE_SHARED="$enable_shared" +AC_SUBST(ENABLE_SHARED) + +dnl to let curl-config output the static libraries correctly +ENABLE_STATIC="$enable_static" +AC_SUBST(ENABLE_STATIC) + +dnl merge the pkg-config Libs.private field into Libs when static-only +if test "x$enable_shared" = "xno"; then + LIBCURL_NO_SHARED=$LIBCURL_LIBS +else + LIBCURL_NO_SHARED= +fi +AC_SUBST(LIBCURL_NO_SHARED) + +rm $compilersh + +dnl +dnl For keeping supported features and protocols also in pkg-config file +dnl since it is more cross-compile friendly than curl-config +dnl + +if test "x$OPENSSL_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES SSL" +elif test -n "$SSL_ENABLED"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES SSL" +fi +if test "x$IPV6_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES IPv6" +fi +if test "x$USE_UNIX_SOCKETS" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES UnixSockets" +fi +if test "x$HAVE_LIBZ" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES libz" +fi +if test "x$HAVE_BROTLI" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES brotli" +fi +if test "x$HAVE_ZSTD" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES zstd" +fi +if test "x$USE_ARES" = "x1" -o "x$USE_THREADS_POSIX" = "x1" \ + -o "x$USE_THREADS_WIN32" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES AsynchDNS" +fi +if test "x$IDN_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES IDN" +fi +if test "x$USE_WINDOWS_SSPI" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES SSPI" +fi + +if test "x$HAVE_GSSAPI" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES GSS-API" +fi + +if test "x$curl_psl_msg" = "xenabled"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES PSL" +fi + +if test "x$curl_gsasl_msg" = "xenabled"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES GSASL" +fi + +if test "x$enable_altsvc" = "xyes"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES alt-svc" +fi +if test "x$hsts" = "xyes"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES HSTS" +fi + +if test "x$CURL_DISABLE_NEGOTIATE_AUTH" != "x1" -a \ + \( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then + SUPPORT_FEATURES="$SUPPORT_FEATURES SPNEGO" +fi + +if test "x$CURL_DISABLE_KERBEROS_AUTH" != "x1" -a \ + \( "x$HAVE_GSSAPI" = "x1" -o "x$USE_WINDOWS_SSPI" = "x1" \); then + SUPPORT_FEATURES="$SUPPORT_FEATURES Kerberos" +fi + +use_curl_ntlm_core=no + +if test "x$CURL_DISABLE_NTLM" != "x1"; then + if test "x$OPENSSL_ENABLED" = "x1" -o "x$MBEDTLS_ENABLED" = "x1" \ + -o "x$GNUTLS_ENABLED" = "x1" \ + -o "x$SECURETRANSPORT_ENABLED" = "x1" \ + -o "x$USE_WIN32_CRYPTO" = "x1" \ + -o "x$WOLFSSL_NTLM" = "x1"; then + use_curl_ntlm_core=yes + fi + + if test "x$use_curl_ntlm_core" = "xyes" \ + -o "x$USE_WINDOWS_SSPI" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM" + + if test "x$CURL_DISABLE_HTTP" != "x1" -a \ + "x$NTLM_WB_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES NTLM_WB" + fi + fi +fi + +if test "x$USE_TLS_SRP" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES TLS-SRP" +fi + +if test "x$USE_NGHTTP2" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP2" +fi + +if test "x$USE_NGTCP2" = "x1" -o "x$USE_QUICHE" = "x1" \ + -o "x$USE_MSH3" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES HTTP3" +fi + +if test "x$CURL_WITH_MULTI_SSL" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES MultiSSL" +fi + +AC_MSG_CHECKING([if this build supports HTTPS-proxy]) +dnl if not explicitly turned off, HTTPS-proxy comes with some TLS backends +if test "x$CURL_DISABLE_HTTP" != "x1"; then + if test "x$https_proxy" != "xno"; then + if test "x$OPENSSL_ENABLED" = "x1" \ + -o "x$GNUTLS_ENABLED" = "x1" \ + -o "x$SECURETRANSPORT_ENABLED" = "x1" \ + -o "x$RUSTLS_ENABLED" = "x1" \ + -o "x$BEARSSL_ENABLED" = "x1" \ + -o "x$SCHANNEL_ENABLED" = "x1" \ + -o "x$GNUTLS_ENABLED" = "x1" \ + -o "x$MBEDTLS_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy" + AC_MSG_RESULT([yes]) + elif test "x$WOLFSSL_ENABLED" = "x1" -a "x$WOLFSSL_FULL_BIO" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES HTTPS-proxy" + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi + else + AC_MSG_RESULT([no]) + fi +else + AC_MSG_RESULT([no]) +fi + +if test "x$ECH_ENABLED" = "x1"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES ECH" +fi + +if test ${ac_cv_sizeof_curl_off_t} -gt 4; then + if test ${ac_cv_sizeof_off_t} -gt 4 -o \ + "$curl_win32_file_api" = "win32_large_files"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES Largefile" + fi +fi + +if test "$tst_atomic" = "yes"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES threadsafe" +elif test "x$USE_THREADS_POSIX" = "x1" -a \ + "x$ac_cv_header_pthread_h" = "xyes"; then + SUPPORT_FEATURES="$SUPPORT_FEATURES threadsafe" +else + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM([[ + #include + ]],[[ + #if (WINVER < 0x600) && (_WIN32_WINNT < 0x600) + #error + #endif + ]]) + ],[ + SUPPORT_FEATURES="$SUPPORT_FEATURES threadsafe" + ],[ + ]) +fi + +dnl replace spaces with newlines +dnl sort the lines +dnl replace the newlines back to spaces +SUPPORT_FEATURES=`echo $SUPPORT_FEATURES | tr ' ' '\012' | sort | tr '\012' ' '` +AC_SUBST(SUPPORT_FEATURES) + +dnl For supported protocols in pkg-config file +if test "x$CURL_DISABLE_HTTP" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTP" + if test "x$SSL_ENABLED" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS HTTPS" + fi +fi +if test "x$CURL_DISABLE_FTP" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FTP" + if test "x$SSL_ENABLED" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FTPS" + fi +fi +if test "x$CURL_DISABLE_FILE" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS FILE" +fi +if test "x$CURL_DISABLE_TELNET" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS TELNET" +fi +if test "x$CURL_DISABLE_LDAP" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS LDAP" + if test "x$CURL_DISABLE_LDAPS" != "x1"; then + if (test "x$USE_OPENLDAP" = "x1" && test "x$SSL_ENABLED" = "x1") || + (test "x$USE_OPENLDAP" != "x1" && test "x$HAVE_LDAP_SSL" = "x1"); then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS LDAPS" + fi + fi +fi +if test "x$CURL_DISABLE_DICT" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS DICT" +fi +if test "x$CURL_DISABLE_TFTP" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS TFTP" +fi +if test "x$CURL_DISABLE_GOPHER" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS GOPHER" + if test "x$SSL_ENABLED" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS GOPHERS" + fi +fi +if test "x$CURL_DISABLE_MQTT" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS MQTT" +fi +if test "x$CURL_DISABLE_POP3" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS POP3" + if test "x$SSL_ENABLED" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS POP3S" + fi +fi +if test "x$CURL_DISABLE_IMAP" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS IMAP" + if test "x$SSL_ENABLED" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS IMAPS" + fi +fi +if test "x$CURL_DISABLE_SMB" != "x1" \ + -a "x$use_curl_ntlm_core" = "xyes"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMB" + if test "x$SSL_ENABLED" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMBS" + fi +fi +if test "x$CURL_DISABLE_SMTP" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMTP" + if test "x$SSL_ENABLED" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SMTPS" + fi +fi +if test "x$USE_LIBSSH2" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP" + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP" +fi +if test "x$USE_LIBSSH" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SCP" + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP" +fi +if test "x$USE_WOLFSSH" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS SFTP" +fi +if test "x$CURL_DISABLE_RTSP" != "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTSP" +fi +if test "x$USE_LIBRTMP" = "x1"; then + SUPPORT_PROTOCOLS="$SUPPORT_PROTOCOLS RTMP" +fi + +dnl replace spaces with newlines +dnl sort the lines +dnl replace the newlines back to spaces +SUPPORT_PROTOCOLS=`echo $SUPPORT_PROTOCOLS | tr ' ' '\012' | sort | tr '\012' ' '` + +AC_SUBST(SUPPORT_PROTOCOLS) + +dnl squeeze whitespace out of some variables + +squeeze CFLAGS +squeeze CPPFLAGS +squeeze DEFS +squeeze LDFLAGS +squeeze LIBS + +squeeze LIBCURL_LIBS +squeeze CURL_NETWORK_LIBS +squeeze CURL_NETWORK_AND_TIME_LIBS + +squeeze SUPPORT_FEATURES +squeeze SUPPORT_PROTOCOLS + +XC_CHECK_BUILD_FLAGS + +SSL_BACKENDS=${ssl_backends} +AC_SUBST(SSL_BACKENDS) + +if test "x$want_curldebug_assumed" = "xyes" && + test "x$want_curldebug" = "xyes" && test "x$USE_ARES" = "x1"; then + ac_configure_args="$ac_configure_args --enable-curldebug" +fi + +AC_CONFIG_FILES([Makefile \ + docs/Makefile \ + docs/examples/Makefile \ + docs/libcurl/Makefile \ + docs/libcurl/opts/Makefile \ + docs/cmdline-opts/Makefile \ + include/Makefile \ + include/curl/Makefile \ + src/Makefile \ + lib/Makefile \ + scripts/Makefile \ + lib/libcurl.vers \ + lib/libcurl.plist \ + tests/Makefile \ + tests/config \ + tests/certs/Makefile \ + tests/certs/scripts/Makefile \ + tests/data/Makefile \ + tests/server/Makefile \ + tests/libtest/Makefile \ + tests/unit/Makefile \ + tests/http/config.ini \ + tests/http/Makefile \ + tests/http/clients/Makefile \ + packages/Makefile \ + packages/vms/Makefile \ + curl-config \ + libcurl.pc +]) +AC_OUTPUT + +CURL_GENERATE_CONFIGUREHELP_PM + +AC_MSG_NOTICE([Configured to build curl/libcurl: + + Host setup: ${host} + Install prefix: ${prefix} + Compiler: ${CC} + CFLAGS: ${CFLAGS} + CPPFLAGS: ${CPPFLAGS} + LDFLAGS: ${LDFLAGS} + LIBS: ${LIBS} + + curl version: ${CURLVERSION} + SSL: ${curl_ssl_msg} + SSH: ${curl_ssh_msg} + zlib: ${curl_zlib_msg} + brotli: ${curl_brotli_msg} + zstd: ${curl_zstd_msg} + GSS-API: ${curl_gss_msg} + GSASL: ${curl_gsasl_msg} + TLS-SRP: ${curl_tls_srp_msg} + resolver: ${curl_res_msg} + IPv6: ${curl_ipv6_msg} + Unix sockets: ${curl_unix_sockets_msg} + IDN: ${curl_idn_msg} + Build libcurl: Shared=${enable_shared}, Static=${enable_static} + Built-in manual: ${curl_manual_msg} + --libcurl option: ${curl_libcurl_msg} + Verbose errors: ${curl_verbose_msg} + Code coverage: ${curl_coverage_msg} + SSPI: ${curl_sspi_msg} + ca cert bundle: ${ca}${ca_warning} + ca cert path: ${capath}${capath_warning} + ca fallback: ${with_ca_fallback} + LDAP: ${curl_ldap_msg} + LDAPS: ${curl_ldaps_msg} + RTSP: ${curl_rtsp_msg} + RTMP: ${curl_rtmp_msg} + PSL: ${curl_psl_msg} + Alt-svc: ${curl_altsvc_msg} + Headers API: ${curl_headers_msg} + HSTS: ${curl_hsts_msg} + HTTP1: ${curl_h1_msg} + HTTP2: ${curl_h2_msg} + HTTP3: ${curl_h3_msg} + ECH: ${curl_ech_msg} + WebSockets: ${curl_ws_msg} + Protocols: ${SUPPORT_PROTOCOLS} + Features: ${SUPPORT_FEATURES} +]) +if test -n "$experimental"; then + cat >&2 << _EOF + WARNING: $experimental enabled but marked EXPERIMENTAL. Use with caution! +_EOF +fi diff --git a/deps/curl/curl-config.in b/deps/curl/curl-config.in new file mode 100644 index 0000000..54f92d9 --- /dev/null +++ b/deps/curl/curl-config.in @@ -0,0 +1,196 @@ +#! /bin/sh +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +prefix="@prefix@" +exec_prefix=@exec_prefix@ +includedir=@includedir@ +cppflag_curl_staticlib=@CPPFLAG_CURL_STATICLIB@ + +usage() +{ + cat <&2 + exit 1 + fi + ;; + + --configure) + echo @CONFIGURE_OPTIONS@ + ;; + + *) + echo "unknown option: $1" + usage 1 + ;; + esac + shift +done + +exit 0 diff --git a/deps/curl/docs/.gitignore b/deps/curl/docs/.gitignore new file mode 100644 index 0000000..8d0bfb3 --- /dev/null +++ b/deps/curl/docs/.gitignore @@ -0,0 +1,8 @@ +# Copyright (C) Daniel Stenberg, , et al. +# +# SPDX-License-Identifier: curl + +*.html +*.pdf +curl.1 +*.1.dist diff --git a/deps/curl/docs/ALTSVC.md b/deps/curl/docs/ALTSVC.md new file mode 100644 index 0000000..b9117e4 --- /dev/null +++ b/deps/curl/docs/ALTSVC.md @@ -0,0 +1,44 @@ +# Alt-Svc + +curl features support for the Alt-Svc: HTTP header. + +## Enable Alt-Svc in build + +`./configure --enable-alt-svc` + +(enabled by default since 7.73.0) + +## Standard + +[RFC 7838](https://datatracker.ietf.org/doc/html/rfc7838) + +# Alt-Svc cache file format + +This is a text based file with one line per entry and each line consists of nine +space separated fields. + +## Example + + h2 quic.tech 8443 h3-22 quic.tech 8443 "20190808 06:18:37" 0 0 + +## Fields + +1. The ALPN id for the source origin +2. The host name for the source origin +3. The port number for the source origin +4. The ALPN id for the destination host +5. The host name for the destination host +6. The host number for the destination host +7. The expiration date and time of this entry within double quotes. The date format is "YYYYMMDD HH:MM:SS" and the time zone is GMT. +8. Boolean (1 or 0) if "persist" was set for this entry +9. Integer priority value (not currently used) + +If the host name is an IPv6 numerical address, it is stored with brackets such +as `[::1]`. + +# TODO + +- handle multiple response headers, when one of them says `clear` (should + override them all) +- using `Age:` value for caching age as per spec +- `CURLALTSVC_IMMEDIATELY` support diff --git a/deps/curl/docs/BINDINGS.md b/deps/curl/docs/BINDINGS.md new file mode 100644 index 0000000..7f5da42 --- /dev/null +++ b/deps/curl/docs/BINDINGS.md @@ -0,0 +1,138 @@ +libcurl bindings +================ + + Creative people have written bindings or interfaces for various environments + and programming languages. Using one of these allows you to take advantage of + curl powers from within your favourite language or system. + + This is a list of all known interfaces as of this writing. + + The bindings listed below are not part of the curl/libcurl distribution + archives, but must be downloaded and installed separately. + + + +[Ada95](https://web.archive.org/web/20070403105909/www.almroth.com/adacurl/index.html) Written by Andreas Almroth + +[Basic](https://scriptbasic.com/) ScriptBasic bindings written by Peter Verhas + +C++: [curlpp](https://github.com/jpbarrette/curlpp/) Written by Jean-Philippe Barrette-LaPierre, +[curlcpp](https://github.com/JosephP91/curlcpp) by Giuseppe Persico and [C++ +Requests](https://github.com/libcpr/cpr) by Huu Nguyen + +[Ch](https://chcurl.sourceforge.net/) Written by Stephen Nestinger and Jonathan Rogado + +Cocoa: [BBHTTP](https://github.com/biasedbit/BBHTTP) written by Bruno de Carvalho +[curlhandle](https://github.com/karelia/curlhandle) Written by Dan Wood + +Clojure: [clj-curl](https://github.com/lsevero/clj-curl) by Lucas Severo + +[D](https://dlang.org/library/std/net/curl.html) Written by Kenneth Bogert + +[Delphi](https://github.com/Mercury13/curl4delphi) Written by Mikhail Merkuryev + +[Dylan](https://dylanlibs.sourceforge.net/) Written by Chris Double + +[Eiffel](https://iron.eiffel.com/repository/20.11/package/ABEF6975-37AC-45FD-9C67-52D10BA0669B) Written by Eiffel Software + +[Euphoria](https://web.archive.org/web/20050204080544/rays-web.com/eulibcurl.htm) Written by Ray Smith + +[Falcon](http://www.falconpl.org/project_docs/curl/) + +[Ferite](https://web.archive.org/web/20150102192018/ferite.org/) Written by Paul Querna + +[Fortran](https://github.com/interkosmos/fortran-curl) Written by Philipp Engel + +[Gambas](https://gambas.sourceforge.net/) + +[glib/GTK+](https://web.archive.org/web/20100526203452/atterer.net/glibcurl) Written by Richard Atterer + +Go: [go-curl](https://github.com/andelf/go-curl) by ShuYu Wang + +[Guile](https://github.com/spk121/guile-curl) Written by Michael L. Gran + +[Harbour](https://github.com/vszakats/hb/tree/main/contrib/hbcurl) Written by Viktor Szakats + +[Haskell](https://hackage.haskell.org/package/curl) Written by Galois, Inc + +[Hollywood](https://www.hollywood-mal.com/download.html) hURL by Andreas Falkenhahn + +[Java](https://github.com/pjlegato/curl-java) + +[Julia](https://github.com/JuliaWeb/LibCURL.jl) Written by Amit Murthy + +[Kapito](https://github.com/puzza007/katipo) is an Erlang HTTP library around libcurl. + +[Lisp](https://common-lisp.net/project/cl-curl/) Written by Liam Healy + +Lua: [luacurl](https://web.archive.org/web/20201205052437/luacurl.luaforge.net/) by Alexander Marinov, [Lua-cURL](https://github.com/Lua-cURL) by Jürgen Hötzel + +[Mono](https://web.archive.org/web/20070606064500/https://forge.novell.com/modules/xfmod/project/?libcurl-mono) Written by Jeffrey Phillips + +[.NET](https://sourceforge.net/projects/libcurl-net/) libcurl-net by Jeffrey Phillips + +[Nim](https://nimble.directory/pkg/libcurl) wrapper for libcurl + +[node.js](https://github.com/JCMais/node-libcurl) node-libcurl by Jonathan Cardoso Machado + +[Object-Pascal](https://web.archive.org/web/20020610214926/www.tekool.com/opcurl) Free Pascal, Delphi and Kylix binding written by Christophe Espern. + +[OCaml](https://opam.ocaml.org/packages/ocurl/) Written by Lars Nilsson and ygrek + +[Pascal](https://web.archive.org/web/20030804091414/houston.quik.com/jkp/curlpas/) Free Pascal, Delphi and Kylix binding written by Jeffrey Pohlmeyer. + +Perl: [WWW::Curl](https://github.com/szbalint/WWW--Curl) Maintained by Cris +Bailiff and Bálint Szilakszi, +[perl6-net-curl](https://github.com/azawawi/perl6-net-curl) by Ahmad M. Zawawi +[NET::Curl](https://metacpan.org/pod/Net::Curl) by Przemyslaw Iskra + +[PHP](https://php.net/curl) Originally written by Sterling Hughes + +[PostgreSQL](https://github.com/pramsey/pgsql-http) - HTTP client for PostgreSQL + +[PostgreSQL](https://github.com/RekGRpth/pg_curl) - cURL client for PostgreSQL + +[PureBasic](https://www.purebasic.com/documentation/http/index.html) uses libcurl in its "native" HTTP subsystem + +[Python](http://pycurl.io/) PycURL by Kjetil Jacobsen + +[Q](https://q-lang.sourceforge.net/) The libcurl module is part of the default install + +[R](https://cran.r-project.org/package=curl) + +[Rexx](https://rexxcurl.sourceforge.net/) Written Mark Hessling + +[Ring](https://ring-lang.sourceforge.io/doc1.3/libcurl.html) RingLibCurl by Mahmoud Fayed + +RPG, support for ILE/RPG on OS/400 is included in source distribution + +Ruby: [curb](https://github.com/taf2/curb) written by Ross Bamford, +[ruby-curl-multi](https://github.com/kball/curl_multi.rb) by Kristjan Petursson and Keith Rarick + +[Rust](https://github.com/alexcrichton/curl-rust) curl-rust - by Carl Lerche + +[Scheme](https://www.metapaper.net/lisovsky/web/curl/) Bigloo binding by Kirill Lisovsky + +[Scilab](https://help.scilab.org/docs/current/fr_FR/getURL.html) binding by Sylvestre Ledru + +[S-Lang](https://www.jedsoft.org/slang/modules/curl.html) by John E Davis + +[Smalltalk](https://www.squeaksource.com/CurlPlugin/) Written by Danil Osipchuk + +[SP-Forth](https://sourceforge.net/p/spf/spf/ci/master/tree/devel/~ac/lib/lin/curl/) Written by Andrey Cherezov + +[SPL](https://web.archive.org/web/20210203022158/www.clifford.at/spl/spldoc/curl.html) Written by Clifford Wolf + +[Tcl](https://web.archive.org/web/20160826011806/mirror.yellow5.com/tclcurl/) Tclcurl by Andrés García + +[Vibe](https://github.com/ttytm/vibe) HTTP requests through libcurl in V + +[Visual Basic](https://sourceforge.net/projects/libcurl-vb/) libcurl-vb by Jeffrey Phillips + +[Visual Foxpro](https://web.archive.org/web/20130730181523/www.ctl32.com.ar/libcurl.asp) by Carlos Alloatti + +[wxWidgets](https://wxcode.sourceforge.net/components/wxcurl/) Written by Casey O'Donnell + +[XBLite](https://web.archive.org/web/20060426150418/perso.wanadoo.fr/xblite/libraries.html) Written by David Szafranski + +[Xojo](https://github.com/charonn0/RB-libcURL) Written by Andrew Lambert diff --git a/deps/curl/docs/BUFQ.md b/deps/curl/docs/BUFQ.md new file mode 100644 index 0000000..5ff9e28 --- /dev/null +++ b/deps/curl/docs/BUFQ.md @@ -0,0 +1,141 @@ +# bufq + +This is an internal module for managing I/O buffers. A `bufq` can be written +to and read from. It manages read and write positions and has a maximum size. + +## read/write + +Its basic read/write functions have a similar signature and return code handling +as many internal Curl read and write ones. + + +``` +ssize_t Curl_bufq_write(struct bufq *q, const unsigned char *buf, size_t len, CURLcode *err); + +- returns the length written into `q` or -1 on error. +- writing to a full `q` will return -1 and set *err to CURLE_AGAIN + +ssize_t Curl_bufq_read(struct bufq *q, unsigned char *buf, size_t len, CURLcode *err); + +- returns the length read from `q` or -1 on error. +- reading from an empty `q` will return -1 and set *err to CURLE_AGAIN + +``` + +To pass data into a `bufq` without an extra copy, read callbacks can be used. + +``` +typedef ssize_t Curl_bufq_reader(void *reader_ctx, unsigned char *buf, size_t len, + CURLcode *err); + +ssize_t Curl_bufq_slurp(struct bufq *q, Curl_bufq_reader *reader, void *reader_ctx, + CURLcode *err); +``` + +`Curl_bufq_slurp()` will invoke the given `reader` callback, passing it its own internal +buffer memory to write to. It may invoke the `reader` several times, as long as it has space +and while the `reader` always returns the length that was requested. There are variations of `slurp` that call the `reader` at most once or only read in a +maximum amount of bytes. + +The analog mechanism for write out buffer data is: + +``` +typedef ssize_t Curl_bufq_writer(void *writer_ctx, const unsigned char *buf, size_t len, + CURLcode *err); + +ssize_t Curl_bufq_pass(struct bufq *q, Curl_bufq_writer *writer, void *writer_ctx, + CURLcode *err); +``` + +`Curl_bufq_pass()` will invoke the `writer`, passing its internal memory and remove the +amount that `writer` reports. + +## peek and skip + +It is possible to get access to the memory of data stored in a `bufq` with: + +``` +bool Curl_bufq_peek(const struct bufq *q, const unsigned char **pbuf, size_t *plen); +``` + +On returning TRUE, `pbuf` will point to internal memory with `plen` bytes that one may read. This will only +be valid until another operation on `bufq` is performed. + +Instead of reading `bufq` data, one may simply skip it: + +``` +void Curl_bufq_skip(struct bufq *q, size_t amount); +``` + +This will remove `amount` number of bytes from the `bufq`. + + +## lifetime + +`bufq` is initialized and freed similar to the `dynbuf` module. Code using `bufq` will +hold a `struct bufq` somewhere. Before it uses it, it invokes: + +``` +void Curl_bufq_init(struct bufq *q, size_t chunk_size, size_t max_chunks); +``` + +The `bufq` is told how many "chunks" of data it shall hold at maximum and how large those +"chunks" should be. There are some variants of this, allowing for more options. How "chunks" are handled in a `bufq` is presented in the section about memory management. + +The user of the `bufq` has the responsibility to call: + +``` +void Curl_bufq_free(struct bufq *q); +``` +to free all resources held by `q`. It is possible to reset a `bufq` to empty via: + +``` +void Curl_bufq_reset(struct bufq *q); +``` + +## memory management + +Internally, a `bufq` uses allocation of fixed size, e.g. the "chunk_size", up to a maximum number, e.g. "max_chunks". These chunks are allocated on demand, therefore writing to a `bufq` may return `CURLE_OUT_OF_MEMORY`. Once the max number of chunks are used, the `bufq` will report that it is "full". + +Each chunks has a `read` and `write` index. A `bufq` keeps its chunks in a list. Reading happens always at the head chunk, writing always goes to the tail chunk. When the head chunk becomes empty, it is removed. When the tail chunk becomes full, another chunk is added to the end of the list, becoming the new tail. + +Chunks that are no longer used are returned to a `spare` list by default. If the `bufq` is created with option `BUFQ_OPT_NO_SPARES` those chunks will be freed right away. + +If a `bufq` is created with a `bufc_pool`, the no longer used chunks are returned to the pool. Also `bufq` will ask the pool for a chunk when it needs one. More in section "pools". + +## empty, full and overflow + +One can ask about the state of a `bufq` with methods such as `Curl_bufq_is_empty(q)`, +`Curl_bufq_is_full(q)`, etc. The amount of data held by a `bufq` is the sum of the data in all its chunks. This is what is reported by `Curl_bufq_len(q)`. + +Note that a `bufq` length and it being "full" are only loosely related. A simple example: + +* create a `bufq` with chunk_size=1000 and max_chunks=4. +* write 4000 bytes to it, it will report "full" +* read 1 bytes from it, it will still report "full" +* read 999 more bytes from it, and it will no longer be "full" + +The reason for this is that full really means: *bufq uses max_chunks and the last one cannot be written to*. + +So when you read 1 byte from the head chunk in the example above, the head still hold 999 unread bytes. Only when those are also read, can the head chunk be removed and a new tail be added. + +There is another variation to this. If you initialized a `bufq` with option `BUFQ_OPT_SOFT_LIMIT`, it will allow writes **beyond** the `max_chunks`. It will report **full**, but one can **still** write. This option is necessary, if partial writes need to be avoided. But it means that you will need other checks to keep the `bufq` from growing ever larger and larger. + + +## pools + +A `struct bufc_pool` may be used to create chunks for a `bufq` and keep spare ones around. It is initialized +and used via: + +``` +void Curl_bufcp_init(struct bufc_pool *pool, size_t chunk_size, size_t spare_max); + +void Curl_bufq_initp(struct bufq *q, struct bufc_pool *pool, size_t max_chunks, int opts); +``` + +The pool gets the size and the mount of spares to keep. The `bufq` gets the pool and the `max_chunks`. It no longer needs to know the chunk sizes, as those are managed by the pool. + +A pool can be shared between many `bufq`s, as long as all of them operate in the same thread. In curl that would be true for all transfers using the same multi handle. The advantages of a pool are: + +* when all `bufq`s are empty, only memory for `max_spare` chunks in the pool is used. Empty `bufq`s will hold no memory. +* the latest spare chunk is the first to be handed out again, no matter which `bufq` needs it. This keeps the footprint of "recently used" memory smaller. diff --git a/deps/curl/docs/BUFREF.md b/deps/curl/docs/BUFREF.md new file mode 100644 index 0000000..14f41b3 --- /dev/null +++ b/deps/curl/docs/BUFREF.md @@ -0,0 +1,81 @@ +# bufref + +This is an internal module for handling buffer references. A referenced +buffer is associated with its destructor function that is implicitly called +when the reference is invalidated. Once referenced, a buffer cannot be +reallocated. + +A data length is stored within the reference for binary data handling +purposes; it is not used by the bufref API. + +The `struct bufref` is used to hold data referencing a buffer. The members of +that structure **MUST NOT** be accessed or modified without using the dedicated +bufref API. + +## `init` + +```c +void Curl_bufref_init(struct bufref *br); +``` + +Initializes a `bufref` structure. This function **MUST** be called before any +other operation is performed on the structure. + +Upon completion, the referenced buffer is `NULL` and length is zero. + +This function may also be called to bypass referenced buffer destruction while +invalidating the current reference. + +## `free` + +```c +void Curl_bufref_free(struct bufref *br); +``` + +Destroys the previously referenced buffer using its destructor and +reinitializes the structure for a possible subsequent reuse. + +## `set` + +```c +void Curl_bufref_set(struct bufref *br, const void *buffer, size_t length, + void (*destructor)(void *)); +``` + +Releases the previously referenced buffer, then assigns the new `buffer` to +the structure, associated with its `destructor` function. The latter can be +specified as `NULL`: this will be the case when the referenced buffer is +static. + +if `buffer` is NULL, `length` must be zero. + +## `memdup` + +```c +CURLcode Curl_bufref_memdup(struct bufref *br, const void *data, size_t length); +``` + +Releases the previously referenced buffer, then duplicates the `length`-byte +`data` into a buffer allocated via `malloc()` and references the latter +associated with destructor `curl_free()`. + +An additional trailing byte is allocated and set to zero as a possible string +null-terminator; it is not counted in the stored length. + +Returns `CURLE_OK` if successful, else `CURLE_OUT_OF_MEMORY`. + +## `ptr` + +```c +const unsigned char *Curl_bufref_ptr(const struct bufref *br); +``` + +Returns a `const unsigned char *` to the referenced buffer. + +## `len` + +```c +size_t Curl_bufref_len(const struct bufref *br); +``` + +Returns the stored length of the referenced buffer. diff --git a/deps/curl/docs/BUG-BOUNTY.md b/deps/curl/docs/BUG-BOUNTY.md new file mode 100644 index 0000000..3714efd --- /dev/null +++ b/deps/curl/docs/BUG-BOUNTY.md @@ -0,0 +1,78 @@ +# The curl bug bounty + +The curl project runs a bug bounty program in association with +[HackerOne](https://www.hackerone.com) and the [Internet Bug +Bounty](https://internetbugbounty.org). + +## How does it work? + +Start out by posting your suspected security vulnerability directly to [curl's +HackerOne program](https://hackerone.com/curl). + +After you have reported a security issue, it has been deemed credible, and a +patch and advisory has been made public, you may be eligible for a bounty from +this program. See the [Security Process](https://curl.se/dev/secprocess.html) +document for how we work with security issues. + +## What are the reward amounts? + +The curl project offers monetary compensation for reported and published +security vulnerabilities. The amount of money that is rewarded depends on how +serious the flaw is determined to be. + +Since 2021, the Bug Bounty is managed in association with the Internet Bug +Bounty and they will set the reward amounts. If it would turn out that they +set amounts that are way lower than we can accept, the curl project intends to +"top up" rewards. + +In 2022, typical "Medium" rated vulnerabilities have been rewarded 2,400 USD +each. + +## Who is eligible for a reward? + +Everyone and anyone who reports a security problem in a released curl version +that has not already been reported can ask for a bounty. + +Dedicated - paid for - security audits that are performed in collaboration +with curl developers are not eligible for bounties. + +Vulnerabilities in features that are off by default and documented as +experimental are not eligible for a reward. + +The vulnerability has to be fixed and publicly announced (by the curl project) +before a bug bounty will be considered. + +Once the vulnerability has been published by curl, the researcher can request +their bounty from the [Internet Bug Bounty](https://hackerone.com/ibb). + +Bounties need to be requested within twelve months from the publication of the +vulnerability. + +## Product vulnerabilities only + +This bug bounty only concerns the curl and libcurl products and thus their +respective source codes - when running on existing hardware. It does not +include curl documentation, curl websites, or other curl related +infrastructure. + +The curl security team is the sole arbiter if a reported flaw is subject to a +bounty or not. + +## How are vulnerabilities graded? + +The grading of each reported vulnerability that makes a reward claim will be +performed by the curl security team. The grading will be based on the CVSS +(Common Vulnerability Scoring System) 3.0. + +## How are reward amounts determined? + +The curl security team gives the vulnerability a score or severity level, as +mentioned above. The actual monetary reward amount is decided and paid by the +Internet Bug Bounty.. + +## Regarding taxes, etc. on the bounties + +In the event that the individual receiving a bug bounty needs to pay taxes on +the reward money, the responsibility lies with the receiver. The curl project +or its security team never actually receive any of this money, hold the money, +or pay out the money. diff --git a/deps/curl/docs/BUGS.md b/deps/curl/docs/BUGS.md new file mode 100644 index 0000000..2a8c56f --- /dev/null +++ b/deps/curl/docs/BUGS.md @@ -0,0 +1,265 @@ +# BUGS + +## There are still bugs + + Curl and libcurl keep being developed. Adding features and changing code + means that bugs will sneak in, no matter how hard we try to keep them out. + + Of course there are lots of bugs left. And lots of misfeatures. + + To help us make curl the stable and solid product we want it to be, we need + bug reports and bug fixes. + +## Where to report + + If you cannot fix a bug yourself and submit a fix for it, try to report an as + detailed report as possible to a curl mailing list to allow one of us to have + a go at a solution. You can optionally also submit your problem in [curl's + bug tracking system](https://github.com/curl/curl/issues). + + Please read the rest of this document below first before doing that. + + If you feel you need to ask around first, find a suitable [mailing list]( + https://curl.se/mail/) and post your questions there. + +## Security bugs + + If you find a bug or problem in curl or libcurl that you think has a security + impact, for example a bug that can put users in danger or make them + vulnerable if the bug becomes public knowledge, then please report that bug + using our security development process. + + Security related bugs or bugs that are suspected to have a security impact, + should be reported on the [curl security tracker at + HackerOne](https://hackerone.com/curl). + + This ensures that the report reaches the curl security team so that they + first can deal with the report away from the public to minimize the harm + and impact it will have on existing users out there who might be using the + vulnerable versions. + + The curl project's process for handling security related issues is + [documented separately](https://curl.se/dev/secprocess.html). + +## What to report + + When reporting a bug, you should include all information that will help us + understand what is wrong, what you expected to happen and how to repeat the + bad behavior. You therefore need to tell us: + + - your operating system's name and version number + + - what version of curl you are using (`curl -V` is fine) + + - versions of the used libraries that libcurl is built to use + + - what URL you were working with (if possible), at least which protocol + + and anything and everything else you think matters. Tell us what you expected + to happen, tell use what did happen, tell us how you could make it work + another way. Dig around, try out, test. Then include all the tiny bits and + pieces in your report. You will benefit from this yourself, as it will enable + us to help you quicker and more accurately. + + Since curl deals with networks, it often helps us if you include a protocol + debug dump with your bug report. The output you get by using the `-v` or + `--trace` options. + + If curl crashed, causing a core dump (in Unix), there is hardly any use to + send that huge file to anyone of us. Unless we have the same system setup as + you, we cannot do much with it. Instead, we ask you to get a stack trace and + send that (much smaller) output to us instead. + + The address and how to subscribe to the mailing lists are detailed in the + `MANUAL.md` file. + +## libcurl problems + + When you have written your own application with libcurl to perform transfers, + it is even more important to be specific and detailed when reporting bugs. + + Tell us the libcurl version and your operating system. Tell us the name and + version of all relevant sub-components like for example the SSL library + you are using and what name resolving your libcurl uses. If you use SFTP or + SCP, the libssh2 version is relevant etc. + + Showing us a real source code example repeating your problem is the best way + to get our attention and it will greatly increase our chances to understand + your problem and to work on a fix (if we agree it truly is a problem). + + Lots of problems that appear to be libcurl problems are actually just abuses + of the libcurl API or other malfunctions in your applications. It is advised + that you run your problematic program using a memory debug tool like valgrind + or similar before you post memory-related or "crashing" problems to us. + +## Who will fix the problems + + If the problems or bugs you describe are considered to be bugs, we want to + have the problems fixed. + + There are no developers in the curl project that are paid to work on bugs. + All developers that take on reported bugs do this on a voluntary basis. We do + it out of an ambition to keep curl and libcurl excellent products and out of + pride. + + Please do not assume that you can just lump over something to us and it will + then magically be fixed after some given time. Most often we need feedback + and help to understand what you have experienced and how to repeat a + problem. Then we may only be able to assist YOU to debug the problem and to + track down the proper fix. + + We get reports from many people every month and each report can take a + considerable amount of time to really go to the bottom with. + +## How to get a stack trace + + First, you must make sure that you compile all sources with `-g` and that you + do not 'strip' the final executable. Try to avoid optimizing the code as well, + remove `-O`, `-O2` etc from the compiler options. + + Run the program until it cores. + + Run your debugger on the core file, like ` curl + core`. `` should be replaced with the name of your debugger, in + most cases that will be `gdb`, but `dbx` and others also occur. + + When the debugger has finished loading the core file and presents you a + prompt, enter `where` (without quotes) and press return. + + The list that is presented is the stack trace. If everything worked, it is + supposed to contain the chain of functions that were called when curl + crashed. Include the stack trace with your detailed bug report, it will help a + lot. + +## Bugs in libcurl bindings + + There will of course pop up bugs in libcurl bindings. You should then + primarily approach the team that works on that particular binding and see + what you can do to help them fix the problem. + + If you suspect that the problem exists in the underlying libcurl, then please + convert your program over to plain C and follow the steps outlined above. + +## Bugs in old versions + + The curl project typically releases new versions every other month, and we + fix several hundred bugs per year. For a huge table of releases, number of + bug fixes and more, see: https://curl.se/docs/releases.html + + The developers in the curl project do not have bandwidth or energy enough to + maintain several branches or to spend much time on hunting down problems in + old versions when chances are we already fixed them or at least that they have + changed nature and appearance in later versions. + + When you experience a problem and want to report it, you really SHOULD + include the version number of the curl you are using when you experience the + issue. If that version number shows us that you are using an out-of-date curl, + you should also try out a modern curl version to see if the problem persists + or how/if it has changed in appearance. + + Even if you cannot immediately upgrade your application/system to run the + latest curl version, you can most often at least run a test version or + experimental build or similar, to get this confirmed or not. + + At times people insist that they cannot upgrade to a modern curl version, but + instead, they "just want the bug fixed". That is fine, just do not count on us + spending many cycles on trying to identify which single commit, if that is + even possible, that at some point in the past fixed the problem you are now + experiencing. + + Security wise, it is almost always a bad idea to lag behind the current curl + versions by a lot. We keep discovering and reporting security problems + over time see you can see in [this + table](https://curl.se/docs/vulnerabilities.html) + +# Bug fixing procedure + +## What happens on first filing + + When a new issue is posted in the issue tracker or on the mailing list, the + team of developers first needs to see the report. Maybe they took the day off, + maybe they are off in the woods hunting. Have patience. Allow at least a few + days before expecting someone to have responded. + + In the issue tracker, you can expect that some labels will be set on the issue + to help categorize it. + +## First response + + If your issue/bug report was not perfect at once (and few are), chances are + that someone will ask follow-up questions. Which version did you use? Which + options did you use? How often does the problem occur? How can we reproduce + this problem? Which protocols does it involve? Or perhaps much more specific + and deep diving questions. It all depends on your specific issue. + + You should then respond to these follow-up questions and provide more info + about the problem, so that we can help you figure it out. Or maybe you can + help us figure it out. An active back-and-forth communication is important + and the key for finding a cure and landing a fix. + +## Not reproducible + + We may require further work from you who actually see or experience the + problem if we cannot reproduce it and cannot understand it even after having + gotten all the info we need and having studied the source code over again. + +## Unresponsive + + If the problem have not been understood or reproduced, and there is nobody + responding to follow-up questions or questions asking for clarifications or + for discussing possible ways to move forward with the task, we take that as a + strong suggestion that the bug is unimportant. + + Unimportant issues will be closed as inactive sooner or later as they cannot + be fixed. The inactivity period (waiting for responses) should not be shorter + than two weeks but may extend months. + +## Lack of time/interest + + Bugs that are filed and are understood can unfortunately end up in the + "nobody cares enough about it to work on it" category. Such bugs are + perfectly valid problems that *should* get fixed but apparently are not. We + try to mark such bugs as `KNOWN_BUGS material` after a time of inactivity and + if no activity is noticed after yet some time those bugs are added to the + `KNOWN_BUGS` document and are closed in the issue tracker. + +## `KNOWN_BUGS` + + This is a list of known bugs. Bugs we know exist and that have been pointed + out but that have not yet been fixed. The reasons for why they have not been + fixed can involve anything really, but the primary reason is that nobody has + considered these problems to be important enough to spend the necessary time + and effort to have them fixed. + + The `KNOWN_BUGS` items are always up for grabs and we love the ones who bring + one of them back to life and offer solutions to them. + + The `KNOWN_BUGS` document has a sibling document known as `TODO`. + +## `TODO` + + Issues that are filed or reported that are not really bugs but more missing + features or ideas for future improvements and so on are marked as + 'enhancement' or 'feature-request' and will be added to the `TODO` document + and the issues are closed. We do not keep TODO items open in the issue + tracker. + + The `TODO` document is full of ideas and suggestions of what we can add or + fix one day. You are always encouraged and free to grab one of those items and + take up a discussion with the curl development team on how that could be + implemented or provided in the project so that you can work on ticking it odd + that document. + + If an issue is rather a bug and not a missing feature or functionality, it is + listed in `KNOWN_BUGS` instead. + +## Closing off stalled bugs + + The [issue and pull request trackers](https://github.com/curl/curl) only + hold "active" entries open (using a non-precise definition of what active + actually is, but they are at least not completely dead). Those that are + abandoned or in other ways dormant will be closed and sometimes added to + `TODO` and `KNOWN_BUGS` instead. + + This way, we only have "active" issues open on GitHub. Irrelevant issues and + pull requests will not distract developers or casual visitors. diff --git a/deps/curl/docs/CHECKSRC.md b/deps/curl/docs/CHECKSRC.md new file mode 100644 index 0000000..f73e7a8 --- /dev/null +++ b/deps/curl/docs/CHECKSRC.md @@ -0,0 +1,184 @@ +# checksrc + +This is the tool we use within the curl project to scan C source code and +check that it adheres to our [Source Code Style guide](CODE_STYLE.md). + +## Usage + + checksrc.pl [options] [file1] [file2] ... + +## Command line options + +`-W[file]` skip that file and exclude it from being checked. Helpful +when, for example, one of the files is generated. + +`-D[dir]` directory name to prepend to file names when accessing them. + +`-h` shows the help output, that also lists all recognized warnings + +## What does `checksrc` warn for? + +`checksrc` does not check and verify the code against the entire style guide. +The script is an effort to detect the most common mistakes and syntax mistakes +that contributors make before they get accustomed to our code style. Heck, +many of us regulars do the mistakes too and this script helps us keep the code +in shape. + + checksrc.pl -h + +Lists how to use the script and it lists all existing warnings it has and +problems it detects. At the time of this writing, the existing `checksrc` +warnings are: + +- `ASSIGNWITHINCONDITION`: Assignment within a conditional expression. The + code style mandates the assignment to be done outside of it. + +- `ASTERISKNOSPACE`: A pointer was declared like `char* name` instead of the + more appropriate `char *name` style. The asterisk should sit next to the + name. + +- `ASTERISKSPACE`: A pointer was declared like `char * name` instead of the + more appropriate `char *name` style. The asterisk should sit right next to + the name without a space in between. + +- `BADCOMMAND`: There is a bad `checksrc` instruction in the code. See the + **Ignore certain warnings** section below for details. + +- `BANNEDFUNC`: A banned function was used. The functions sprintf, vsprintf, + strcat, strncat, gets are **never** allowed in curl source code. + +- `BRACEELSE`: '} else' on the same line. The else is supposed to be on the + following line. + +- `BRACEPOS`: wrong position for an open brace (`{`). + +- `BRACEWHILE`: more than once space between end brace and while keyword + +- `COMMANOSPACE`: a comma without following space + +- `COPYRIGHT`: the file is missing a copyright statement + +- `CPPCOMMENTS`: `//` comment detected, that is not C89 compliant + +- `DOBRACE`: only use one space after do before open brace + +- `EMPTYLINEBRACE`: found empty line before open brace + +- `EQUALSNOSPACE`: no space after `=` sign + +- `EQUALSNULL`: comparison with `== NULL` used in if/while. We use `!var`. + +- `EXCLAMATIONSPACE`: space found after exclamations mark + +- `FOPENMODE`: `fopen()` needs a macro for the mode string, use it + +- `INDENTATION`: detected a wrong start column for code. Note that this + warning only checks some specific places and will certainly miss many bad + indentations. + +- `LONGLINE`: A line is longer than 79 columns. + +- `MULTISPACE`: Multiple spaces were found where only one should be used. + +- `NOSPACEEQUALS`: An equals sign was found without preceding space. We prefer + `a = 2` and *not* `a=2`. + +- `NOTEQUALSZERO`: check found using `!= 0`. We use plain `if(var)`. + +- `ONELINECONDITION`: do not put the conditional block on the same line as `if()` + +- `OPENCOMMENT`: File ended with a comment (`/*`) still "open". + +- `PARENBRACE`: `){` was used without sufficient space in between. + +- `RETURNNOSPACE`: `return` was used without space between the keyword and the + following value. + +- `SEMINOSPACE`: There was no space (or newline) following a semicolon. + +- `SIZEOFNOPAREN`: Found use of sizeof without parentheses. We prefer + `sizeof(int)` style. + +- `SNPRINTF` - Found use of `snprintf()`. Since we use an internal replacement + with a different return code etc, we prefer `msnprintf()`. + +- `SPACEAFTERPAREN`: there was a space after open parenthesis, `( text`. + +- `SPACEBEFORECLOSE`: there was a space before a close parenthesis, `text )`. + +- `SPACEBEFORECOMMA`: there was a space before a comma, `one , two`. + +- `SPACEBEFOREPAREN`: there was a space before an open parenthesis, `if (`, + where one was not expected + +- `SPACESEMICOLON`: there was a space before semicolon, ` ;`. + +- `TABS`: TAB characters are not allowed + +- `TRAILINGSPACE`: Trailing whitespace on the line + +- `TYPEDEFSTRUCT`: we frown upon (most) typedefed structs + +- `UNUSEDIGNORE`: a `checksrc` inlined warning ignore was asked for but not + used, that is an ignore that should be removed or changed to get used. + +### Extended warnings + +Some warnings are quite computationally expensive to perform, so they are +turned off by default. To enable these warnings, place a `.checksrc` file in +the directory where they should be activated with commands to enable the +warnings you are interested in. The format of the file is to enable one +warning per line like so: `enable ` + +Currently these are the extended warnings which can be enabled: + +- `COPYRIGHTYEAR`: the current changeset has not updated the copyright year in + the source file + +- `STRERROR`: use of banned function strerror() + +- `STDERR`: use of banned variable `stderr` + +## Ignore certain warnings + +Due to the nature of the source code and the flaws of the `checksrc` tool, +there is sometimes a need to ignore specific warnings. `checksrc` allows a few +different ways to do this. + +### Inline ignore + +You can control what to ignore within a specific source file by providing +instructions to `checksrc` in the source code itself. See examples below. The +instruction can ask to ignore a specific warning a specific number of times or +you ignore all of them until you mark the end of the ignored section. + +Inline ignores are only done for that single specific source code file. + +Example + + /* !checksrc! disable LONGLINE all */ + +This will ignore the warning for overly long lines until it is re-enabled with: + + /* !checksrc! enable LONGLINE */ + +If the enabling is not performed before the end of the file, it will be enabled +automatically for the next file. + +You can also opt to ignore just N violations so that if you have a single long +line you just cannot shorten and is agreed to be fine anyway: + + /* !checksrc! disable LONGLINE 1 */ + +... and the warning for long lines will be enabled again automatically after +it has ignored that single warning. The number `1` can of course be changed to +any other integer number. It can be used to make sure only the exact intended +instances are ignored and nothing extra. + +### Directory wide ignore patterns + +This is a method we have transitioned away from. Use inline ignores as far as +possible. + +Make a `checksrc.skip` file in the directory of the source code with the +false positive, and include the full offending line into this file. diff --git a/deps/curl/docs/CIPHERS.md b/deps/curl/docs/CIPHERS.md new file mode 100644 index 0000000..27de940 --- /dev/null +++ b/deps/curl/docs/CIPHERS.md @@ -0,0 +1,427 @@ +# Ciphers + +With curl's options +[`CURLOPT_SSL_CIPHER_LIST`](https://curl.se/libcurl/c/CURLOPT_SSL_CIPHER_LIST.html) +and +[`--ciphers`](https://curl.se/docs/manpage.html#--ciphers) +users can control which ciphers to consider when negotiating TLS connections. + +TLS 1.3 ciphers are supported since curl 7.61 for OpenSSL 1.1.1+, and since +curl 7.85 for Schannel with options +[`CURLOPT_TLS13_CIPHERS`](https://curl.se/libcurl/c/CURLOPT_TLS13_CIPHERS.html) +and +[`--tls13-ciphers`](https://curl.se/docs/manpage.html#--tls13-ciphers) +. If you are using a different SSL backend you can try setting TLS 1.3 cipher +suites by using the respective regular cipher option. + +The names of the known ciphers differ depending on which TLS backend that +libcurl was built to use. This is an attempt to list known cipher names. + +## OpenSSL + +(based on [OpenSSL docs](https://www.openssl.org/docs/manmaster/man1/openssl-ciphers.html)) + +When specifying multiple cipher names, separate them with colon (`:`). + +### SSL3 cipher suites + +`NULL-MD5` +`NULL-SHA` +`RC4-MD5` +`RC4-SHA` +`IDEA-CBC-SHA` +`DES-CBC3-SHA` +`DH-DSS-DES-CBC3-SHA` +`DH-RSA-DES-CBC3-SHA` +`DHE-DSS-DES-CBC3-SHA` +`DHE-RSA-DES-CBC3-SHA` +`ADH-RC4-MD5` +`ADH-DES-CBC3-SHA` + +### TLS v1.0 cipher suites + +`NULL-MD5` +`NULL-SHA` +`RC4-MD5` +`RC4-SHA` +`IDEA-CBC-SHA` +`DES-CBC3-SHA` +`DHE-DSS-DES-CBC3-SHA` +`DHE-RSA-DES-CBC3-SHA` +`ADH-RC4-MD5` +`ADH-DES-CBC3-SHA` + +### AES cipher suites from RFC 3268, extending TLS v1.0 + +`AES128-SHA` +`AES256-SHA` +`DH-DSS-AES128-SHA` +`DH-DSS-AES256-SHA` +`DH-RSA-AES128-SHA` +`DH-RSA-AES256-SHA` +`DHE-DSS-AES128-SHA` +`DHE-DSS-AES256-SHA` +`DHE-RSA-AES128-SHA` +`DHE-RSA-AES256-SHA` +`ADH-AES128-SHA` +`ADH-AES256-SHA` + +### SEED cipher suites from RFC 4162, extending TLS v1.0 + +`SEED-SHA` +`DH-DSS-SEED-SHA` +`DH-RSA-SEED-SHA` +`DHE-DSS-SEED-SHA` +`DHE-RSA-SEED-SHA` +`ADH-SEED-SHA` + +### GOST cipher suites, extending TLS v1.0 + +`GOST94-GOST89-GOST89` +`GOST2001-GOST89-GOST89` +`GOST94-NULL-GOST94` +`GOST2001-NULL-GOST94` + +### Elliptic curve cipher suites + +`ECDHE-RSA-NULL-SHA` +`ECDHE-RSA-RC4-SHA` +`ECDHE-RSA-DES-CBC3-SHA` +`ECDHE-RSA-AES128-SHA` +`ECDHE-RSA-AES256-SHA` +`ECDHE-ECDSA-NULL-SHA` +`ECDHE-ECDSA-RC4-SHA` +`ECDHE-ECDSA-DES-CBC3-SHA` +`ECDHE-ECDSA-AES128-SHA` +`ECDHE-ECDSA-AES256-SHA` +`AECDH-NULL-SHA` +`AECDH-RC4-SHA` +`AECDH-DES-CBC3-SHA` +`AECDH-AES128-SHA` +`AECDH-AES256-SHA` + +### TLS v1.2 cipher suites + +`NULL-SHA256` +`AES128-SHA256` +`AES256-SHA256` +`AES128-GCM-SHA256` +`AES256-GCM-SHA384` +`DH-RSA-AES128-SHA256` +`DH-RSA-AES256-SHA256` +`DH-RSA-AES128-GCM-SHA256` +`DH-RSA-AES256-GCM-SHA384` +`DH-DSS-AES128-SHA256` +`DH-DSS-AES256-SHA256` +`DH-DSS-AES128-GCM-SHA256` +`DH-DSS-AES256-GCM-SHA384` +`DHE-RSA-AES128-SHA256` +`DHE-RSA-AES256-SHA256` +`DHE-RSA-AES128-GCM-SHA256` +`DHE-RSA-AES256-GCM-SHA384` +`DHE-DSS-AES128-SHA256` +`DHE-DSS-AES256-SHA256` +`DHE-DSS-AES128-GCM-SHA256` +`DHE-DSS-AES256-GCM-SHA384` +`ECDHE-RSA-AES128-SHA256` +`ECDHE-RSA-AES256-SHA384` +`ECDHE-RSA-AES128-GCM-SHA256` +`ECDHE-RSA-AES256-GCM-SHA384` +`ECDHE-ECDSA-AES128-SHA256` +`ECDHE-ECDSA-AES256-SHA384` +`ECDHE-ECDSA-AES128-GCM-SHA256` +`ECDHE-ECDSA-AES256-GCM-SHA384` +`ADH-AES128-SHA256` +`ADH-AES256-SHA256` +`ADH-AES128-GCM-SHA256` +`ADH-AES256-GCM-SHA384` +`AES128-CCM` +`AES256-CCM` +`DHE-RSA-AES128-CCM` +`DHE-RSA-AES256-CCM` +`AES128-CCM8` +`AES256-CCM8` +`DHE-RSA-AES128-CCM8` +`DHE-RSA-AES256-CCM8` +`ECDHE-ECDSA-AES128-CCM` +`ECDHE-ECDSA-AES256-CCM` +`ECDHE-ECDSA-AES128-CCM8` +`ECDHE-ECDSA-AES256-CCM8` + +### Camellia HMAC-Based cipher suites from RFC 6367, extending TLS v1.2 + +`ECDHE-ECDSA-CAMELLIA128-SHA256` +`ECDHE-ECDSA-CAMELLIA256-SHA384` +`ECDHE-RSA-CAMELLIA128-SHA256` +`ECDHE-RSA-CAMELLIA256-SHA384` + +### TLS 1.3 cipher suites + +(Note these ciphers are set with `CURLOPT_TLS13_CIPHERS` and `--tls13-ciphers`) + +`TLS_AES_256_GCM_SHA384` +`TLS_CHACHA20_POLY1305_SHA256` +`TLS_AES_128_GCM_SHA256` +`TLS_AES_128_CCM_8_SHA256` +`TLS_AES_128_CCM_SHA256` + +## WolfSSL + +`RC4-SHA`, +`RC4-MD5`, +`DES-CBC3-SHA`, +`AES128-SHA`, +`AES256-SHA`, +`NULL-SHA`, +`NULL-SHA256`, +`DHE-RSA-AES128-SHA`, +`DHE-RSA-AES256-SHA`, +`DHE-PSK-AES256-GCM-SHA384`, +`DHE-PSK-AES128-GCM-SHA256`, +`PSK-AES256-GCM-SHA384`, +`PSK-AES128-GCM-SHA256`, +`DHE-PSK-AES256-CBC-SHA384`, +`DHE-PSK-AES128-CBC-SHA256`, +`PSK-AES256-CBC-SHA384`, +`PSK-AES128-CBC-SHA256`, +`PSK-AES128-CBC-SHA`, +`PSK-AES256-CBC-SHA`, +`DHE-PSK-AES128-CCM`, +`DHE-PSK-AES256-CCM`, +`PSK-AES128-CCM`, +`PSK-AES256-CCM`, +`PSK-AES128-CCM-8`, +`PSK-AES256-CCM-8`, +`DHE-PSK-NULL-SHA384`, +`DHE-PSK-NULL-SHA256`, +`PSK-NULL-SHA384`, +`PSK-NULL-SHA256`, +`PSK-NULL-SHA`, +`HC128-MD5`, +`HC128-SHA`, +`HC128-B2B256`, +`AES128-B2B256`, +`AES256-B2B256`, +`RABBIT-SHA`, +`NTRU-RC4-SHA`, +`NTRU-DES-CBC3-SHA`, +`NTRU-AES128-SHA`, +`NTRU-AES256-SHA`, +`AES128-CCM-8`, +`AES256-CCM-8`, +`ECDHE-ECDSA-AES128-CCM`, +`ECDHE-ECDSA-AES128-CCM-8`, +`ECDHE-ECDSA-AES256-CCM-8`, +`ECDHE-RSA-AES128-SHA`, +`ECDHE-RSA-AES256-SHA`, +`ECDHE-ECDSA-AES128-SHA`, +`ECDHE-ECDSA-AES256-SHA`, +`ECDHE-RSA-RC4-SHA`, +`ECDHE-RSA-DES-CBC3-SHA`, +`ECDHE-ECDSA-RC4-SHA`, +`ECDHE-ECDSA-DES-CBC3-SHA`, +`AES128-SHA256`, +`AES256-SHA256`, +`DHE-RSA-AES128-SHA256`, +`DHE-RSA-AES256-SHA256`, +`ECDH-RSA-AES128-SHA`, +`ECDH-RSA-AES256-SHA`, +`ECDH-ECDSA-AES128-SHA`, +`ECDH-ECDSA-AES256-SHA`, +`ECDH-RSA-RC4-SHA`, +`ECDH-RSA-DES-CBC3-SHA`, +`ECDH-ECDSA-RC4-SHA`, +`ECDH-ECDSA-DES-CBC3-SHA`, +`AES128-GCM-SHA256`, +`AES256-GCM-SHA384`, +`DHE-RSA-AES128-GCM-SHA256`, +`DHE-RSA-AES256-GCM-SHA384`, +`ECDHE-RSA-AES128-GCM-SHA256`, +`ECDHE-RSA-AES256-GCM-SHA384`, +`ECDHE-ECDSA-AES128-GCM-SHA256`, +`ECDHE-ECDSA-AES256-GCM-SHA384`, +`ECDH-RSA-AES128-GCM-SHA256`, +`ECDH-RSA-AES256-GCM-SHA384`, +`ECDH-ECDSA-AES128-GCM-SHA256`, +`ECDH-ECDSA-AES256-GCM-SHA384`, +`CAMELLIA128-SHA`, +`DHE-RSA-CAMELLIA128-SHA`, +`CAMELLIA256-SHA`, +`DHE-RSA-CAMELLIA256-SHA`, +`CAMELLIA128-SHA256`, +`DHE-RSA-CAMELLIA128-SHA256`, +`CAMELLIA256-SHA256`, +`DHE-RSA-CAMELLIA256-SHA256`, +`ECDHE-RSA-AES128-SHA256`, +`ECDHE-ECDSA-AES128-SHA256`, +`ECDH-RSA-AES128-SHA256`, +`ECDH-ECDSA-AES128-SHA256`, +`ECDHE-RSA-AES256-SHA384`, +`ECDHE-ECDSA-AES256-SHA384`, +`ECDH-RSA-AES256-SHA384`, +`ECDH-ECDSA-AES256-SHA384`, +`ECDHE-RSA-CHACHA20-POLY1305`, +`ECDHE-ECDSA-CHACHA20-POLY1305`, +`DHE-RSA-CHACHA20-POLY1305`, +`ECDHE-RSA-CHACHA20-POLY1305-OLD`, +`ECDHE-ECDSA-CHACHA20-POLY1305-OLD`, +`DHE-RSA-CHACHA20-POLY1305-OLD`, +`ADH-AES128-SHA`, +`QSH`, +`RENEGOTIATION-INFO`, +`IDEA-CBC-SHA`, +`ECDHE-ECDSA-NULL-SHA`, +`ECDHE-PSK-NULL-SHA256`, +`ECDHE-PSK-AES128-CBC-SHA256`, +`PSK-CHACHA20-POLY1305`, +`ECDHE-PSK-CHACHA20-POLY1305`, +`DHE-PSK-CHACHA20-POLY1305`, +`EDH-RSA-DES-CBC3-SHA`, + +## Schannel + +Schannel allows the enabling and disabling of encryption algorithms, but not +specific cipher suites, prior to TLS 1.3. The algorithms are +[defined](https://docs.microsoft.com/windows/desktop/SecCrypto/alg-id) by +Microsoft. + +The algorithms below are for TLS 1.2 and earlier. TLS 1.3 is covered in the +next section. + +There is also the case that the selected algorithm is not supported by the +protocol or does not match the ciphers offered by the server during the SSL +negotiation. In this case curl will return error +`CURLE_SSL_CONNECT_ERROR (35) SEC_E_ALGORITHM_MISMATCH` +and the request will fail. + +`CALG_MD2`, +`CALG_MD4`, +`CALG_MD5`, +`CALG_SHA`, +`CALG_SHA1`, +`CALG_MAC`, +`CALG_RSA_SIGN`, +`CALG_DSS_SIGN`, +`CALG_NO_SIGN`, +`CALG_RSA_KEYX`, +`CALG_DES`, +`CALG_3DES_112`, +`CALG_3DES`, +`CALG_DESX`, +`CALG_RC2`, +`CALG_RC4`, +`CALG_SEAL`, +`CALG_DH_SF`, +`CALG_DH_EPHEM`, +`CALG_AGREEDKEY_ANY`, +`CALG_HUGHES_MD5`, +`CALG_SKIPJACK`, +`CALG_TEK`, +`CALG_CYLINK_MEK`, +`CALG_SSL3_SHAMD5`, +`CALG_SSL3_MASTER`, +`CALG_SCHANNEL_MASTER_HASH`, +`CALG_SCHANNEL_MAC_KEY`, +`CALG_SCHANNEL_ENC_KEY`, +`CALG_PCT1_MASTER`, +`CALG_SSL2_MASTER`, +`CALG_TLS1_MASTER`, +`CALG_RC5`, +`CALG_HMAC`, +`CALG_TLS1PRF`, +`CALG_HASH_REPLACE_OWF`, +`CALG_AES_128`, +`CALG_AES_192`, +`CALG_AES_256`, +`CALG_AES`, +`CALG_SHA_256`, +`CALG_SHA_384`, +`CALG_SHA_512`, +`CALG_ECDH`, +`CALG_ECMQV`, +`CALG_ECDSA`, +`CALG_ECDH_EPHEM`, + +As of curl 7.77.0, you can also pass `SCH_USE_STRONG_CRYPTO` as a cipher name +to [constrain the set of available ciphers as specified in the Schannel +documentation](https://docs.microsoft.com/en-us/windows/win32/secauthn/tls-cipher-suites-in-windows-server-2022). +Note that the supported ciphers in this case follow the OS version, so if you +are running an outdated OS you might still be supporting weak ciphers. + +### TLS 1.3 cipher suites + +You can set TLS 1.3 ciphers for Schannel by using `CURLOPT_TLS13_CIPHERS` or +`--tls13-ciphers` with the names below. + +If TLS 1.3 cipher suites are set then libcurl will add or restrict Schannel TLS +1.3 algorithms automatically. Essentially, libcurl is emulating support for +individual TLS 1.3 cipher suites since Schannel does not support it directly. + +`TLS_AES_256_GCM_SHA384` +`TLS_AES_128_GCM_SHA256` +`TLS_CHACHA20_POLY1305_SHA256` +`TLS_AES_128_CCM_8_SHA256` +`TLS_AES_128_CCM_SHA256` + +Note if you set TLS 1.3 ciphers without also setting the minimum TLS version to +1.3 then it's possible Schannel may negotiate an earlier TLS version and cipher +suite if your libcurl and OS settings allow it. You can set the minimum TLS +version by using `CURLOPT_SSLVERSION` or `--tlsv1.3`. + +## BearSSL + +BearSSL ciphers can be specified by either the OpenSSL name (`ECDHE-RSA-AES128-GCM-SHA256`) or the IANA name (`TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256`). + +Since BearSSL 0.1: + +`DES-CBC3-SHA` +`AES128-SHA` +`AES256-SHA` +`AES128-SHA256` +`AES256-SHA256` +`AES128-GCM-SHA256` +`AES256-GCM-SHA384` +`ECDH-ECDSA-DES-CBC3-SHA` +`ECDH-ECDSA-AES128-SHA` +`ECDH-ECDSA-AES256-SHA` +`ECDHE-ECDSA-DES-CBC3-SHA` +`ECDHE-ECDSA-AES128-SHA` +`ECDHE-ECDSA-AES256-SHA` +`ECDH-RSA-DES-CBC3-SHA` +`ECDH-RSA-AES128-SHA` +`ECDH-RSA-AES256-SHA` +`ECDHE-RSA-DES-CBC3-SHA` +`ECDHE-RSA-AES128-SHA` +`ECDHE-RSA-AES256-SHA` +`ECDHE-ECDSA-AES128-SHA256` +`ECDHE-ECDSA-AES256-SHA384` +`ECDH-ECDSA-AES128-SHA256` +`ECDH-ECDSA-AES256-SHA384` +`ECDHE-RSA-AES128-SHA256` +`ECDHE-RSA-AES256-SHA384` +`ECDH-RSA-AES128-SHA256` +`ECDH-RSA-AES256-SHA384` +`ECDHE-ECDSA-AES128-GCM-SHA256` +`ECDHE-ECDSA-AES256-GCM-SHA384` +`ECDH-ECDSA-AES128-GCM-SHA256` +`ECDH-ECDSA-AES256-GCM-SHA384` +`ECDHE-RSA-AES128-GCM-SHA256` +`ECDHE-RSA-AES256-GCM-SHA384` +`ECDH-RSA-AES128-GCM-SHA256` +`ECDH-RSA-AES256-GCM-SHA384` + +Since BearSSL 0.2: + +`ECDHE-RSA-CHACHA20-POLY1305` +`ECDHE-ECDSA-CHACHA20-POLY1305` + +Since BearSSL 0.6: + +`AES128-CCM` +`AES256-CCM` +`AES128-CCM8` +`AES256-CCM8` +`ECDHE-ECDSA-AES128-CCM` +`ECDHE-ECDSA-AES256-CCM` +`ECDHE-ECDSA-AES128-CCM8` +`ECDHE-ECDSA-AES256-CCM8` diff --git a/deps/curl/docs/CMakeLists.txt b/deps/curl/docs/CMakeLists.txt new file mode 100644 index 0000000..dd2c6dc --- /dev/null +++ b/deps/curl/docs/CMakeLists.txt @@ -0,0 +1,26 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +#add_subdirectory(examples) +add_subdirectory(libcurl) +add_subdirectory(cmdline-opts) diff --git a/deps/curl/docs/CODE_OF_CONDUCT.md b/deps/curl/docs/CODE_OF_CONDUCT.md new file mode 100644 index 0000000..1f71c38 --- /dev/null +++ b/deps/curl/docs/CODE_OF_CONDUCT.md @@ -0,0 +1,32 @@ +Contributor Code of Conduct +=========================== + +As contributors and maintainers of this project, we pledge to respect all +people who contribute through reporting issues, posting feature requests, +updating documentation, submitting pull requests or patches, and other +activities. + +We are committed to making participation in this project a harassment-free +experience for everyone, regardless of level of experience, gender, gender +identity and expression, sexual orientation, disability, personal appearance, +body size, race, ethnicity, age, or religion. + +Examples of unacceptable behavior by participants include the use of sexual +language or imagery, derogatory comments or personal attacks, trolling, public +or private harassment, insults, or other unprofessional conduct. + +Project maintainers have the right and responsibility to remove, edit, or +reject comments, commits, code, wiki edits, issues, and other contributions +that are not aligned to this Code of Conduct. Project maintainers who do not +follow the Code of Conduct may be removed from the project team. + +This code of conduct applies both within project spaces and in public spaces +when an individual is representing the project or its community. + +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported by opening an issue or contacting one or more of the project +maintainers. + +This Code of Conduct is adapted from the [Contributor +Covenant](https://contributor-covenant.org/), version 1.1.0, available at +[https://contributor-covenant.org/version/1/1/0/](https://contributor-covenant.org/version/1/1/0/) diff --git a/deps/curl/docs/CODE_REVIEW.md b/deps/curl/docs/CODE_REVIEW.md new file mode 100644 index 0000000..0776d30 --- /dev/null +++ b/deps/curl/docs/CODE_REVIEW.md @@ -0,0 +1,168 @@ +# How to do code reviews for curl + +Anyone and everyone is encouraged and welcome to review code submissions in +curl. This is a guide on what to check for and how to perform a successful +code review. + +## All submissions should get reviewed + +All pull requests and patches submitted to the project should be reviewed by +at least one experienced curl maintainer before that code is accepted and +merged. + +## Let the tools and tests take the first rounds + +On initial pull requests, let the tools and tests do their job first and then +start out by helping the submitter understand the test failures and tool +alerts. + +## How to provide feedback to author + +Be nice. Ask questions. Provide examples or suggestions of improvements. +Assume the best intentions. Remember language barriers. + +All first-time contributors can become regulars. Let's help them go there. + +## Is this a change we want? + +If this is not a change that seems to be aligned with the project's path +forward and as such cannot be accepted, inform the author about this sooner +rather than later. Do it gently and explain why and possibly what could be +done to make it more acceptable. + +## API/ABI stability or changed behavior + +Changing the API and the ABI may be fine in a change but it needs to be done +deliberately and carefully. If not, a reviewer must help the author to realize +the mistake. + +curl and libcurl are similarly strict on not modifying existing behavior. API +and ABI stability is not enough, the behavior should also remain intact as far +as possible. + +## Code style + +Most code style nits are detected by checksrc but not all. Only leave remarks +on style deviation once checksrc does not find anymore. + +Minor nits from fresh submitters can also be handled by the maintainer when +merging, in case it seems like the submitter is not clear on what to do. We +want to make the process fun and exciting for new contributors. + +## Encourage consistency + +Make sure new code is written in a similar style as existing code. Naming, +logic, conditions, etc. + +## Are pointers always non-NULL? + +If a function or code rely on pointers being non-NULL, take an extra look if +that seems to be a fair assessment. + +## Asserts + +Conditions that should never be false can be verified with `DEBUGASSERT()` +calls to get caught in tests and debugging easier, while not having an impact +on final or release builds. + +## Memory allocation + +Can the mallocs be avoided? Do not introduce mallocs in any hot paths. If +there are (new) mallocs, can they be combined into fewer calls? + +Are all allocations handled in error paths to avoid leaks and crashes? + +## Thread-safety + +We do not like static variables as they break thread-safety and prevent +functions from being reentrant. + +## Should features be `#ifdef`ed? + +Features and functionality may not be present everywhere and should therefore +be `#ifdef`ed. Additionally, some features should be possible to switch on/off +in the build. + +Write `#ifdef`s to be as little of a "maze" as possible. + +## Does it look portable enough? + +curl runs "everywhere". Does the code take a reasonable stance and enough +precautions to be possible to build and run on most platforms? + +Remember that we live by C89 restrictions. + +## Tests and testability + +New features should be added in conjunction with one or more test cases. +Ideally, functions should also be written so that unit tests can be done to +test individual functions. + +## Documentation + +New features or changes to existing functionality **must** be accompanied by +updated documentation. Submitting that in a separate follow-up pull request is +not OK. A code review must also verify that the submitted documentation update +matches the code submission. + +English is not everyone's first language, be mindful of this and help the +submitter improve the text if it needs a rewrite to read better. + +## Code should not be hard to understand + +Source code should be written to maximize readability and be easy to +understand. + +## Functions should not be large + +A single function should never be large as that makes it hard to follow and +understand all the exit points and state changes. Some existing functions in +curl certainly violate this ground rule but when reviewing new code we should +propose splitting into smaller functions. + +## Duplication is evil + +Anything that looks like duplicated code is a red flag. Anything that seems to +introduce code that we *should* already have or provide needs a closer check. + +## Sensitive data + +When credentials are involved, take an extra look at what happens with this +data. Where it comes from and where it goes. + +## Variable types differ + +`size_t` is not a fixed size. `time_t` can be signed or unsigned and have +different sizes. Relying on variable sizes is a red flag. + +Also remember that endianness and >= 32 bit accesses to unaligned addresses +are problematic areas. + +## Integer overflows + +Be careful about integer overflows. Some variable types can be either 32 bit +or 64 bit. Integer overflows must be detected and acted on *before* they +happen. + +## Dangerous use of functions + +Maybe use of `realloc()` should rather use the dynbuf functions? + +Do not allow new code that grows buffers without using dynbuf. + +Use of C functions that rely on a terminating zero must only be used on data +that really do have a null-terminating zero. + +## Dangerous "data styles" + +Make extra precautions and verify that memory buffers that need a terminating +zero always have exactly that. Buffers *without* a null-terminator must not be +used as input to string functions. + +# Commit messages + +Tightly coupled with a code review is making sure that the commit message is +good. It is the responsibility of the person who merges the code to make sure +that the commit message follows our standard (detailed in the +[CONTRIBUTE](CONTRIBUTE.md) document). This includes making sure the PR +identifies related issues and giving credit to reporters and helpers. diff --git a/deps/curl/docs/CODE_STYLE.md b/deps/curl/docs/CODE_STYLE.md new file mode 100644 index 0000000..9cdf0d1 --- /dev/null +++ b/deps/curl/docs/CODE_STYLE.md @@ -0,0 +1,310 @@ +# curl C code style + +Source code that has a common style is easier to read than code that uses +different styles in different places. It helps making the code feel like one +single code base. Easy-to-read is an important property of code and helps +making it easier to review when new things are added and it helps debugging +code when developers are trying to figure out why things go wrong. A unified +style is more important than individual contributors having their own personal +tastes satisfied. + +Our C code has a few style rules. Most of them are verified and upheld by the +`scripts/checksrc.pl` script. Invoked with `make checksrc` or even by default +by the build system when built after `./configure --enable-debug` has been +used. + +It is normally not a problem for anyone to follow the guidelines, as you just +need to copy the style already used in the source code and there are no +particularly unusual rules in our set of rules. + +We also work hard on writing code that are warning-free on all the major +platforms and in general on as many platforms as possible. Code that obviously +will cause warnings will not be accepted as-is. + +## Naming + +Try using a non-confusing naming scheme for your new functions and variable +names. It does not necessarily have to mean that you should use the same as in +other places of the code, just that the names should be logical, +understandable and be named according to what they are used for. File-local +functions should be made static. We like lower case names. + +See the [INTERNALS](https://curl.se/dev/internals.html#symbols) document on +how we name non-exported library-global symbols. + +## Indenting + +We use only spaces for indentation, never TABs. We use two spaces for each new +open brace. + +```c +if(something_is_true) { + while(second_statement == fine) { + moo(); + } +} +``` + +## Comments + +Since we write C89 code, **//** comments are not allowed. They were not +introduced in the C standard until C99. We use only __/* comments */__. + +```c +/* this is a comment */ +``` + +## Long lines + +Source code in curl may never be wider than 79 columns and there are two +reasons for maintaining this even in the modern era of large and high +resolution screens: + +1. Narrower columns are easier to read than wide ones. There is a reason + newspapers have used columns for decades or centuries. + +2. Narrower columns allow developers to easier show multiple pieces of code + next to each other in different windows. It allows two or three source + code windows next to each other on the same screen - as well as multiple + terminal and debugging windows. + +## Braces + +In if/while/do/for expressions, we write the open brace on the same line as +the keyword and we then set the closing brace on the same indentation level as +the initial keyword. Like this: + +```c +if(age < 40) { + /* clearly a youngster */ +} +``` + +You may omit the braces if they would contain only a one-line statement: + +```c +if(!x) + continue; +``` + +For functions the opening brace should be on a separate line: + +```c +int main(int argc, char **argv) +{ + return 1; +} +``` + +## 'else' on the following line + +When adding an **else** clause to a conditional expression using braces, we +add it on a new line after the closing brace. Like this: + +```c +if(age < 40) { + /* clearly a youngster */ +} +else { + /* probably grumpy */ +} +``` + +## No space before parentheses + +When writing expressions using if/while/do/for, there shall be no space +between the keyword and the open parenthesis. Like this: + +```c +while(1) { + /* loop forever */ +} +``` + +## Use boolean conditions + +Rather than test a conditional value such as a bool against TRUE or FALSE, a +pointer against NULL or != NULL and an int against zero or not zero in +if/while conditions we prefer: + +```c +result = do_something(); +if(!result) { + /* something went wrong */ + return result; +} +``` + +## No assignments in conditions + +To increase readability and reduce complexity of conditionals, we avoid +assigning variables within if/while conditions. We frown upon this style: + +```c +if((ptr = malloc(100)) == NULL) + return NULL; +``` + +and instead we encourage the above version to be spelled out more clearly: + +```c +ptr = malloc(100); +if(!ptr) + return NULL; +``` + +## New block on a new line + +We never write multiple statements on the same source line, even for short +if() conditions. + +```c +if(a) + return TRUE; +else if(b) + return FALSE; +``` + +and NEVER: + +```c +if(a) return TRUE; +else if(b) return FALSE; +``` + +## Space around operators + +Please use spaces on both sides of operators in C expressions. Postfix **(), +[], ->, ., ++, --** and Unary **+, -, !, ~, &** operators excluded they should +have no space. + +Examples: + +```c +bla = func(); +who = name[0]; +age += 1; +true = !false; +size += -2 + 3 * (a + b); +ptr->member = a++; +struct.field = b--; +ptr = &address; +contents = *pointer; +complement = ~bits; +empty = (!*string) ? TRUE : FALSE; +``` + +## No parentheses for return values + +We use the 'return' statement without extra parentheses around the value: + +```c +int works(void) +{ + return TRUE; +} +``` + +## Parentheses for sizeof arguments + +When using the sizeof operator in code, we prefer it to be written with +parentheses around its argument: + +```c +int size = sizeof(int); +``` + +## Column alignment + +Some statements cannot be completed on a single line because the line would be +too long, the statement too hard to read, or due to other style guidelines +above. In such a case the statement will span multiple lines. + +If a continuation line is part of an expression or sub-expression then you +should align on the appropriate column so that it's easy to tell what part of +the statement it is. Operators should not start continuation lines. In other +cases follow the 2-space indent guideline. Here are some examples from +libcurl: + +```c +if(Curl_pipeline_wanted(handle->multi, CURLPIPE_HTTP1) && + (handle->set.httpversion != CURL_HTTP_VERSION_1_0) && + (handle->set.httpreq == HTTPREQ_GET || + handle->set.httpreq == HTTPREQ_HEAD)) + /* did not ask for HTTP/1.0 and a GET or HEAD */ + return TRUE; +``` + +If no parenthesis, use the default indent: + +```c +data->set.http_disable_hostname_check_before_authentication = + (0 != va_arg(param, long)) ? TRUE : FALSE; +``` + +Function invoke with an open parenthesis: + +```c +if(option) { + result = parse_login_details(option, strlen(option), + (userp ? &user : NULL), + (passwdp ? &passwd : NULL), + NULL); +} +``` + +Align with the "current open" parenthesis: + +```c +DEBUGF(infof(data, "Curl_pp_readresp_ %d bytes of trailing " + "server response left\n", + (int)clipamount)); +``` + +## Platform dependent code + +Use **#ifdef HAVE_FEATURE** to do conditional code. We avoid checking for +particular operating systems or hardware in the #ifdef lines. The HAVE_FEATURE +shall be generated by the configure script for unix-like systems and they are +hard-coded in the `config-[system].h` files for the others. + +We also encourage use of macros/functions that possibly are empty or defined +to constants when libcurl is built without that feature, to make the code +seamless. Like this example where the **magic()** function works differently +depending on a build-time conditional: + +```c +#ifdef HAVE_MAGIC +void magic(int a) +{ + return a + 2; +} +#else +#define magic(x) 1 +#endif + +int content = magic(3); +``` + +## No typedefed structs + +Use structs by all means, but do not typedef them. Use the `struct name` way +of identifying them: + +```c +struct something { + void *valid; + size_t way_to_write; +}; +struct something instance; +``` + +**Not okay**: + +```c +typedef struct { + void *wrong; + size_t way_to_write; +} something; +something instance; +``` diff --git a/deps/curl/docs/CONNECTION-FILTERS.md b/deps/curl/docs/CONNECTION-FILTERS.md new file mode 100644 index 0000000..c4b11db --- /dev/null +++ b/deps/curl/docs/CONNECTION-FILTERS.md @@ -0,0 +1,127 @@ +# curl connection filters + +Connection filters is a design in the internals of curl, not visible in its public API. They were added +in curl v7.xx.x. This document describes the concepts, its high level implementation and the motivations. + +## Filters + +A "connection filter" is a piece of code that is responsible for handling a range of operations +of curl's connections: reading, writing, waiting on external events, connecting and closing down - to name the most important ones. + +The most important feat of connection filters is that they can be stacked on top of each other (or "chained" if you prefer that metaphor). In the common scenario that you want to retrieve a `https:` url with curl, you need 2 basic things to send the request and get the response: a TCP connection, represented by a `socket` and a SSL instance en- and decrypt over that socket. You write your request to the SSL instance, which encrypts and writes that data to the socket, which then sends the bytes over the network. + +With connection filters, curl's internal setup will look something like this (cf for connection filter): + +``` +Curl_easy *data connectdata *conn cf-ssl cf-socket ++----------------+ +-----------------+ +-------+ +--------+ +|https://curl.se/|----> | properties |----> | keys |---> | socket |--> OS --> network ++----------------+ +-----------------+ +-------+ +--------+ + + Curl_write(data, buffer) + --> Curl_cfilter_write(data, data->conn, buffer) + ---> conn->filter->write(conn->filter, data, buffer) +``` + +While connection filters all do different things, they look the same from the "outside". The code in `data` and `conn` does not really know **which** filters are installed. `conn` just writes into the first filter, whatever that is. + +Same is true for filters. Each filter has a pointer to the `next` filter. When SSL has encrypted the data, it does not write to a socket, it writes to the next filter. If that is indeed a socket, or a file, or an HTTP/2 connection is of no concern to the SSL filter. + +And this allows the stacking, as in: + +``` +Direct: + http://localhost/ conn -> cf-socket + https://curl.se/ conn -> cf-ssl -> cf-socket +Via http proxy tunnel: + http://localhost/ conn -> cf-http-proxy -> cf-socket + https://curl.se/ conn -> cf-ssl -> cf-http-proxy -> cf-socket +Via https proxy tunnel: + http://localhost/ conn -> cf-http-proxy -> cf-ssl -> cf-socket + https://curl.se/ conn -> cf-ssl -> cf-http-proxy -> cf-ssl -> cf-socket +Via http proxy tunnel via SOCKS proxy: + http://localhost/ conn -> cf-http-proxy -> cf-socks -> cf-socket +``` + +### Connecting/Closing + +Before `Curl_easy` can send the request, the connection needs to be established. This means that all connection filters have done, whatever they need to do: waiting for the socket to be connected, doing the TLS handshake, performing the HTTP tunnel request, etc. This has to be done in reverse order: the last filter has to do its connect first, then the one above can start, etc. + +Each filter does in principle the following: + +``` +static CURLcode +myfilter_cf_connect(struct Curl_cfilter *cf, + struct Curl_easy *data, + bool *done) +{ + CURLcode result; + + if(cf->connected) { /* we and all below are done */ + *done = TRUE; + return CURLE_OK; + } + /* Let the filters below connect */ + result = cf->next->cft->connect(cf->next, data, blocking, done); + if(result || !*done) + return result; /* below errored/not finished yet */ + + /* MYFILTER CONNECT THINGS */ /* below connected, do out thing */ + *done = cf->connected = TRUE; /* done, remember, return */ + return CURLE_OK; +} +``` + +Closing a connection then works similar. The `conn` tells the first filter to close. Contrary to connecting, +the filter does its own things first, before telling the next filter to close. + +### Efficiency + +There are two things curl is concerned about: efficient memory use and fast transfers. + +The memory footprint of a filter is relatively small: + +``` +struct Curl_cfilter { + const struct Curl_cftype *cft; /* the type providing implementation */ + struct Curl_cfilter *next; /* next filter in chain */ + void *ctx; /* filter type specific settings */ + struct connectdata *conn; /* the connection this filter belongs to */ + int sockindex; /* TODO: like to get rid off this */ + BIT(connected); /* != 0 iff this filter is connected */ +}; +``` +The filter type `cft` is a singleton, one static struct for each type of filter. The `ctx` is where a filter will hold its specific data. That varies by filter type. An http-proxy filter will keep the ongoing state of the CONNECT here, but free it after its has been established. The SSL filter will keep the `SSL*` (if OpenSSL is used) here until the connection is closed. So, this varies. + +`conn` is a reference to the connection this filter belongs to, so nothing extra besides the pointer itself. + +Several things, that before were kept in `struct connectdata`, will now go into the `filter->ctx` *when needed*. So, the memory footprint for connections that do *not* use an http proxy, or socks, or https will be lower. + +As to transfer efficiency, writing and reading through a filter comes at near zero cost *if the filter does not transform the data*. An http proxy or socks filter, once it is connected, will just pass the calls through. Those filters implementations will look like this: + +``` +ssize_t Curl_cf_def_send(struct Curl_cfilter *cf, struct Curl_easy *data, + const void *buf, size_t len, CURLcode *err) +{ + return cf->next->cft->do_send(cf->next, data, buf, len, err); +} +``` +The `recv` implementation is equivalent. + +## Filter Types + +The (currently) existing filter types are: SOCKET, SOCKET-ACCEPT, SSL, HTTP-PROXY and SOCKS-PROXY. Vital to establishing and read/writing a connection. But filters are also a good way to implement tasks for *managing* a connection: + +* **Statistics**: a filter that counts the number of bytes sent/received. Place one in front of SOCKET and one higher up and get the number of raw and "easy" bytes transferred. They may track the speed as well, or number of partial writes, etc. +* **Timeout**: enforce timeouts, e.g. fail if a connection cannot be established in a certain amount of time. +* **Progress**: report progress on a connection. +* **Pacing**: limit read/write rates. +* **Testing**: simulate network condition or failures. + +As you see, filters are a good way to add functionality to curl's internal handling of transfers without impact on other code. + +## Easy Filters? + +Some things that curl needs to manage are not directly tied to a specific connection but the property of the `Curl_easy` handle, e.g. a particular transfer. When using HTTP/2 or HTTP/3, many transfers can use the same connection. If one wants to monitor of the transfer itself or restricting its speed alone, a connection filter is not the right place to do this. + +So we might add "easy filters" one day. Who knows? diff --git a/deps/curl/docs/CONTRIBUTE.md b/deps/curl/docs/CONTRIBUTE.md new file mode 100644 index 0000000..72d3190 --- /dev/null +++ b/deps/curl/docs/CONTRIBUTE.md @@ -0,0 +1,316 @@ +# Contributing to the curl project + +This document is intended to offer guidelines on how to best contribute to the +curl project. This concerns new features as well as corrections to existing +flaws or bugs. + +## Join the Community + +Skip over to [https://curl.se/mail/](https://curl.se/mail/) and join +the appropriate mailing list(s). Read up on details before you post +questions. Read this file before you start sending patches. We prefer +questions sent to and discussions being held on the mailing list(s), not sent +to individuals. + +Before posting to one of the curl mailing lists, please read up on the +[mailing list etiquette](https://curl.se/mail/etiquette.html). + +We also hang out on IRC in #curl on libera.chat + +If you are at all interested in the code side of things, consider clicking +'watch' on the [curl repo on GitHub](https://github.com/curl/curl) to be +notified of pull requests and new issues posted there. + +## License and copyright + +When contributing with code, you agree to put your changes and new code under +the same license curl and libcurl is already using unless stated and agreed +otherwise. + +If you add a larger piece of code, you can opt to make that file or set of +files to use a different license as long as they do not enforce any changes to +the rest of the package and they make sense. Such "separate parts" can not be +GPL licensed (as we do not want copyleft to affect users of libcurl) but they +must use "GPL compatible" licenses (as we want to allow users to use libcurl +properly in GPL licensed environments). + +When changing existing source code, you do not alter the copyright of the +original file(s). The copyright will still be owned by the original creator(s) +or those who have been assigned copyright by the original author(s). + +By submitting a patch to the curl project, you are assumed to have the right +to the code and to be allowed by your employer or whatever to hand over that +patch/code to us. We will credit you for your changes as far as possible, to +give credit but also to keep a trace back to who made what changes. Please +always provide us with your full real name when contributing, + +## What To Read + +Source code, the man pages, the [INTERNALS +document](https://curl.se/dev/internals.html), +[TODO](https://curl.se/docs/todo.html), +[KNOWN_BUGS](https://curl.se/docs/knownbugs.html) and the [most recent +changes](https://curl.se/dev/sourceactivity.html) in git. Just lurking on +the [curl-library mailing +list](https://curl.se/mail/list.cgi?list=curl-library) will give you a +lot of insights on what's going on right now. Asking there is a good idea too. + +## Write a good patch + +### Follow code style + +When writing C code, follow the +[CODE_STYLE](https://curl.se/dev/code-style.html) already established in +the project. Consistent style makes code easier to read and mistakes less +likely to happen. Run `make checksrc` before you submit anything, to make sure +you follow the basic style. That script does not verify everything, but if it +complains you know you have work to do. + +### Non-clobbering All Over + +When you write new functionality or fix bugs, it is important that you do not +fiddle all over the source files and functions. Remember that it is likely +that other people have done changes in the same source files as you have and +possibly even in the same functions. If you bring completely new +functionality, try writing it in a new source file. If you fix bugs, try to +fix one bug at a time and send them as separate patches. + +### Write Separate Changes + +It is annoying when you get a huge patch from someone that is said to fix 511 +odd problems, but discussions and opinions do not agree with 510 of them - or +509 of them were already fixed in a different way. Then the person merging +this change needs to extract the single interesting patch from somewhere +within the huge pile of source, and that creates a lot of extra work. + +Preferably, each fix that corrects a problem should be in its own patch/commit +with its own description/commit message stating exactly what they correct so +that all changes can be selectively applied by the maintainer or other +interested parties. + +Also, separate changes enable bisecting much better for tracking problems +and regression in the future. + +### Patch Against Recent Sources + +Please try to get the latest available sources to make your patches against. +It makes the lives of the developers so much easier. The best is if you get +the most up-to-date sources from the git repository, but the latest release +archive is quite OK as well. + +### Documentation + +Writing docs is dead boring and one of the big problems with many open source +projects. But someone's gotta do it. It makes things a lot easier if you +submit a small description of your fix or your new features with every +contribution so that it can be swiftly added to the package documentation. + +The documentation is always made in man pages (nroff formatted) or plain +ASCII files. All HTML files on the website and in the release archives are +generated from the nroff/ASCII versions. + +### Test Cases + +Since the introduction of the test suite, we can quickly verify that the main +features are working as they are supposed to. To maintain this situation and +improve it, all new features and functions that are added need to be tested +in the test suite. Every feature that is added should get at least one valid +test case that verifies that it works as documented. If every submitter also +posts a few test cases, it will not end up as a heavy burden on a single person! + +If you do not have test cases or perhaps you have done something that is hard +to write tests for, do explain exactly how you have otherwise tested and +verified your changes. + +## Submit Your Changes + +### How to get your changes into the main sources + +Ideally you file a [pull request on +GitHub](https://github.com/curl/curl/pulls), but you can also send your plain +patch to [the curl-library mailing +list](https://curl.se/mail/list.cgi?list=curl-library). + +If you opt to post a patch on the mailing list, chances are someone will +convert it into a pull request for you, to have the CI jobs verify it proper +before it can be merged. Be prepared that some feedback on the proposed change +might then come on GitHub. + +Your change will be reviewed and discussed and you will be expected to correct +flaws pointed out and update accordingly, or the change risks stalling and +eventually just getting deleted without action. As a submitter of a change, +you are the owner of that change until it has been merged. + +Respond on the list or on GitHub about the change and answer questions and/or +fix nits/flaws. This is important. We will take lack of replies as a sign that +you are not anxious to get your patch accepted and we tend to simply drop such +changes. + +### About pull requests + +With GitHub it is easy to send a [pull +request](https://github.com/curl/curl/pulls) to the curl project to have +changes merged. + +We strongly prefer pull requests to mailed patches, as it makes it a proper +git commit that is easy to merge and they are easy to track and not that easy +to lose in the flood of many emails, like they sometimes do on the mailing +lists. + +Every pull request submitted will automatically be tested in several different +ways. [See the CI document for more +information](https://github.com/curl/curl/blob/master/tests/CI.md). + +Sometimes the tests fail due to a dependency service temporarily being offline +or otherwise unavailable, e.g. package downloads. In this case you can just +try to update your pull requests to rerun the tests later as described below. + +You can update your pull requests by pushing new commits or force-pushing +changes to existing commits. Force-pushing an amended commit without any +actual content changed also allows you to retrigger the tests for that commit. + +When you adjust your pull requests after review, consider squashing the +commits so that we can review the full updated version more easily. + +A pull request sent to the project might get labeled `needs-votes` by a +project maintainer. This label means that in addition to meeting all other +checks and qualifications this pull request must also receive more "votes" of +user support. More signs that people want this to happen. It could be in the +form of messages saying so, or thumbs-up reactions on GitHub. + +### Making quality changes + +Make the patch against as recent source versions as possible. + +If you have followed the tips in this document and your patch still has not +been incorporated or responded to after some weeks, consider resubmitting it +to the list or better yet: change it to a pull request. + +### Commit messages + +A short guide to how to write git commit messages in the curl project. + + ---- start ---- + [area]: [short line describing the main effect] + -- empty line -- + [full description, no wider than 72 columns that describes as much as + possible as to why this change is made, and possibly what things + it fixes and everything else that is related, with unwieldy URLs replaced + with references like [0], [1], etc.] + -- empty line -- + [[0] URL - Reference to a URL in the description, almost like Markdown; + the last numbered reference is followed by an -- empty line -- ] + [Follow-up to {shorthash} - if this fixes or continues a previous commit; + add a Ref: that commit's PR or issue if it's not a small, obvious fix; + followed by an -- empty line -- ] + [Bug: URL to the source of the report or more related discussion; use Fixes + for GitHub issues instead when that is appropriate] + [Approved-by: John Doe - credit someone who approved the PR; if you are + committing this for someone else using --author=... you do not need this + as you are implicitly approving it by committing] + [Authored-by: John Doe - credit the original author of the code; only use + this if you cannot use "git commit --author=..."] + [Signed-off-by: John Doe - we do not use this, but do not bother removing it] + [whatever-else-by: credit all helpers, finders, doers; try to use one of + the following keywords if at all possible, for consistency: + Acked-by:, Assisted-by:, Co-authored-by:, Found-by:, Reported-by:, + Reviewed-by:, Suggested-by:, Tested-by:] + [Ref: #1234 - if this is related to a GitHub issue or PR, possibly one that + has already been closed] + [Ref: URL to more information about the commit; use Bug: instead for + a reference to a bug on another bug tracker] + [Fixes #1234 - if this closes a GitHub issue; GitHub will actually + close the issue once this commit is merged] + [Closes #1234 - if this closes a GitHub PR; GitHub will actually + close the PR once this commit is merged] + ---- stop ---- + +The first line is a succinct description of the change: + + - use the imperative, present tense: "change" not "changed" nor "changes" + - do not capitalize the first letter + - no period (.) at the end + +The `[area]` in the first line can be `http2`, `cookies`, `openssl` or +similar. There is no fixed list to select from but using the same "area" as +other related changes could make sense. + +Do not forget to use commit --author=... if you commit someone else's work, and +make sure that you have your own user and email setup correctly in git before +you commit. + +Add whichever header lines as appropriate, with one line per person if more +than one person was involved. There is no need to credit yourself unless you are +using --author=... which hides your identity. Do not include people's e-mail +addresses in headers to avoid spam, unless they are already public from a +previous commit; saying `{userid} on github` is OK. + +### Write Access to git Repository + +If you are a frequent contributor, you may be given push access to the git +repository and then you will be able to push your changes straight into the git +repo instead of sending changes as pull requests or by mail as patches. + +Just ask if this is what you would want. You will be required to have posted +several high quality patches first, before you can be granted push access. + +### How To Make a Patch with git + +You need to first checkout the repository: + + git clone https://github.com/curl/curl.git + +You then proceed and edit all the files you like and you commit them to your +local repository: + + git commit [file] + +As usual, group your commits so that you commit all changes at once that +constitute a logical change. + +Once you have done all your commits and you are happy with what you see, you +can make patches out of your changes that are suitable for mailing: + + git format-patch remotes/origin/master + +This creates files in your local directory named `NNNN-[name].patch` for each +commit. + +Now send those patches off to the curl-library list. You can of course opt to +do that with the 'git send-email' command. + +### How To Make a Patch without git + +Keep a copy of the unmodified curl sources. Make your changes in a separate +source tree. When you think you have something that you want to offer the +curl community, use GNU diff to generate patches. + +If you have modified a single file, try something like: + + diff -u unmodified-file.c my-changed-one.c > my-fixes.diff + +If you have modified several files, possibly in different directories, you +can use diff recursively: + + diff -ur curl-original-dir curl-modified-sources-dir > my-fixes.diff + +The GNU diff and GNU patch tools exist for virtually all platforms, including +all kinds of Unixes and Windows. + +### Useful resources + - [Webinar on getting code into cURL](https://www.youtube.com/watch?v=QmZ3W1d6LQI) + +## Update copyright and license information + +There is a CI job called **REUSE compliance / check** that will run on every +pull request and commit to verify that the *REUSE state* of all files are +still fine. + +This means that all files need to have their license and copyright information +clearly stated. Ideally by having the standard curl source code header, with +the SPDX-License-Identifier included. If the header does not work, you can use a +smaller header or add the information for a specific file to the `.reuse/dep5` +file. + +You can manually verify the copyright and compliance status by running the +`./scripts/copyright.pl` script in the root of the git repository. diff --git a/deps/curl/docs/CURL-DISABLE.md b/deps/curl/docs/CURL-DISABLE.md new file mode 100644 index 0000000..7978ed2 --- /dev/null +++ b/deps/curl/docs/CURL-DISABLE.md @@ -0,0 +1,168 @@ +# Code defines to disable features and protocols + +## `CURL_DISABLE_ALTSVC` + +Disable support for Alt-Svc: HTTP headers. + +## `CURL_DISABLE_BINDLOCAL` + +Disable support for binding the local end of connections. + +## `CURL_DISABLE_COOKIES` + +Disable support for HTTP cookies. + +## `CURL_DISABLE_BASIC_AUTH` + +Disable support for the Basic authentication methods. + +## `CURL_DISABLE_BEARER_AUTH` + +Disable support for the Bearer authentication methods. + +## `CURL_DISABLE_DIGEST_AUTH` + +Disable support for the Digest authentication methods. + +## `CURL_DISABLE_KERBEROS_AUTH` + +Disable support for the Kerberos authentication methods. + +## `CURL_DISABLE_NEGOTIATE_AUTH` + +Disable support for the negotiate authentication methods. + +## `CURL_DISABLE_AWS` + +Disable **AWS-SIG4** support. + +## `CURL_DISABLE_DICT` + +Disable the DICT protocol + +## `CURL_DISABLE_DOH` + +Disable DNS-over-HTTPS + +## `CURL_DISABLE_FILE` + +Disable the FILE protocol + +## `CURL_DISABLE_FORM_API` + +Disable the form API + +## `CURL_DISABLE_FTP` + +Disable the FTP (and FTPS) protocol + +## `CURL_DISABLE_GETOPTIONS` + +Disable the `curl_easy_options` API calls that lets users get information +about existing options to `curl_easy_setopt`. + +## `CURL_DISABLE_GOPHER` + +Disable the GOPHER protocol. + +## `CURL_DISABLE_HEADERS_API` + +Disable the HTTP header API. + +## `CURL_DISABLE_HSTS` + +Disable the HTTP Strict Transport Security support. + +## `CURL_DISABLE_HTTP` + +Disable the HTTP(S) protocols. Note that this then also disable HTTP proxy +support. + +## `CURL_DISABLE_HTTP_AUTH` + +Disable support for all HTTP authentication methods. + +## `CURL_DISABLE_IMAP` + +Disable the IMAP(S) protocols. + +## `CURL_DISABLE_LDAP` + +Disable the LDAP(S) protocols. + +## `CURL_DISABLE_LDAPS` + +Disable the LDAPS protocol. + +## `CURL_DISABLE_LIBCURL_OPTION` + +Disable the --libcurl option from the curl tool. + +## `CURL_DISABLE_MIME` + +Disable MIME support. + +## `CURL_DISABLE_MQTT` + +Disable MQTT support. + +## `CURL_DISABLE_NETRC` + +Disable the netrc parser. + +## `CURL_DISABLE_NTLM` + +Disable support for NTLM. + +## `CURL_DISABLE_OPENSSL_AUTO_LOAD_CONFIG` + +Disable the auto load config support in the OpenSSL backend. + +## `CURL_DISABLE_PARSEDATE` + +Disable date parsing + +## `CURL_DISABLE_POP3` + +Disable the POP3 protocol + +## `CURL_DISABLE_PROGRESS_METER` + +Disable the built-in progress meter + +## `CURL_DISABLE_PROXY` + +Disable support for proxies + +## `CURL_DISABLE_RTSP` + +Disable the RTSP protocol. + +## `CURL_DISABLE_SHUFFLE_DNS` + +Disable the shuffle DNS feature + +## `CURL_DISABLE_SMB` + +Disable the SMB(S) protocols + +## `CURL_DISABLE_SMTP` + +Disable the SMTP(S) protocols + +## `CURL_DISABLE_SOCKETPAIR` + +Disable the use of `socketpair()` internally to allow waking up and canceling +`curl_multi_poll()`. + +## `CURL_DISABLE_TELNET` + +Disable the TELNET protocol + +## `CURL_DISABLE_TFTP` + +Disable the TFTP protocol + +## `CURL_DISABLE_VERBOSE_STRINGS` + +Disable verbose strings and error messages. diff --git a/deps/curl/docs/DEPRECATE.md b/deps/curl/docs/DEPRECATE.md new file mode 100644 index 0000000..4cd5a22 --- /dev/null +++ b/deps/curl/docs/DEPRECATE.md @@ -0,0 +1,48 @@ +# Items to be removed from future curl releases + +If any of these deprecated features is a cause for concern for you, please +email the +[curl-library mailing list](https://lists.haxx.se/listinfo/curl-library) +as soon as possible and explain to us why this is a problem for you and +how your use case cannot be satisfied properly using a workaround. + +## NTLM_WB auth + +This NTLM authentication method is powered by a separate tool, +`ntlm_auth`. Barely anyone uses this method. It was always a quirky +implementation (including fork + exec), it has limited portability and we +don't test it in the test suite and CI. + +We keep the native NTLM implementation. + +curl will remove the support for NTLM_WB auth in June 2024. + +## space-separated `NOPROXY` patterns + +When specifying patterns/domain names for curl that should *not* go through a +proxy, the curl tool features the `--noproxy` command line option and the +library supports the `NO_PROXY` environment variable and the `CURLOPT_NOPROXY` +libcurl option. + +They all set the same list of patterns. This list is documented to be a set of +**comma-separated** names, but can also be provided separated with just +space. The ability to just use spaces for this has never been documented but +some users may still have come to rely on this. + +Several other tools and utilities also parse the `NO_PROXY` environment +variable but do not consider a space to be a valid separator. Using spaces for +separator is probably less portable and might cause more friction than commas +do. Users should use commas for this for greater portability. + +curl will remove the support for space-separated names in July 2024. + +## past removals + + - Pipelining + - axTLS + - PolarSSL + - NPN + - Support for systems without 64 bit data types + - NSS + - gskit + - mingw v1 diff --git a/deps/curl/docs/DYNBUF.md b/deps/curl/docs/DYNBUF.md new file mode 100644 index 0000000..c3a4b76 --- /dev/null +++ b/deps/curl/docs/DYNBUF.md @@ -0,0 +1,128 @@ +# dynbuf + +This is the internal module for creating and handling "dynamic buffers". This +means buffers that can be appended to, dynamically and grow to adapt. + +There will always be a terminating zero put at the end of the dynamic buffer. + +The `struct dynbuf` is used to hold data for each instance of a dynamic +buffer. The members of that struct **MUST NOT** be accessed or modified +without using the dedicated dynbuf API. + +## `Curl_dyn_init` + +```c +void Curl_dyn_init(struct dynbuf *s, size_t toobig); +``` + +This initializes a struct to use for dynbuf and it cannot fail. The `toobig` +value **must** be set to the maximum size we allow this buffer instance to +grow to. The functions below will return `CURLE_OUT_OF_MEMORY` when hitting +this limit. + +## `Curl_dyn_free` + +```c +void Curl_dyn_free(struct dynbuf *s); +``` + +Free the associated memory and clean up. After a free, the `dynbuf` struct can +be reused to start appending new data to. + +## `Curl_dyn_addn` + +```c +CURLcode Curl_dyn_addn(struct dynbuf *s, const void *mem, size_t len); +``` + +Append arbitrary data of a given length to the end of the buffer. + +If this function fails it calls `Curl_dyn_free` on `dynbuf`. + +## `Curl_dyn_add` + +```c +CURLcode Curl_dyn_add(struct dynbuf *s, const char *str); +``` + +Append a C string to the end of the buffer. + +If this function fails it calls `Curl_dyn_free` on `dynbuf`. + +## `Curl_dyn_addf` + +```c +CURLcode Curl_dyn_addf(struct dynbuf *s, const char *fmt, ...); +``` + +Append a `printf()`-style string to the end of the buffer. + +If this function fails it calls `Curl_dyn_free` on `dynbuf`. + +## `Curl_dyn_vaddf` + +```c +CURLcode Curl_dyn_vaddf(struct dynbuf *s, const char *fmt, va_list ap); +``` + +Append a `vprintf()`-style string to the end of the buffer. + +If this function fails it calls `Curl_dyn_free` on `dynbuf`. + +## `Curl_dyn_reset` + +```c +void Curl_dyn_reset(struct dynbuf *s); +``` + +Reset the buffer length, but leave the allocation. + +## `Curl_dyn_tail` + +```c +CURLcode Curl_dyn_tail(struct dynbuf *s, size_t length); +``` + +Keep `length` bytes of the buffer tail (the last `length` bytes of the +buffer). The rest of the buffer is dropped. The specified `length` must not be +larger than the buffer length. To instead keep the leading part, see +`Curl_dyn_setlen()`. + +## `Curl_dyn_ptr` + +```c +char *Curl_dyn_ptr(const struct dynbuf *s); +``` + +Returns a `char *` to the buffer if it has a length, otherwise may return +NULL. Since the buffer may be reallocated, this pointer should not be trusted +or used anymore after the next buffer manipulation call. + +## `Curl_dyn_uptr` + +```c +unsigned char *Curl_dyn_uptr(const struct dynbuf *s); +``` + +Returns an `unsigned char *` to the buffer if it has a length, otherwise may +return NULL. Since the buffer may be reallocated, this pointer should not be +trusted or used anymore after the next buffer manipulation call. + +## `Curl_dyn_len` + +```c +size_t Curl_dyn_len(const struct dynbuf *s); +``` + +Returns the length of the buffer in bytes. Does not include the terminating +zero byte. + +## `Curl_dyn_setlen` + +```c +CURLcode Curl_dyn_setlen(struct dynbuf *s, size_t len); +``` + +Sets the new shorter length of the buffer in number of bytes. Keeps the +leftmost set number of bytes, discards the rest. To instead keep the tail part +of the buffer, see `Curl_dyn_tail()`. diff --git a/deps/curl/docs/EARLY-RELEASE.md b/deps/curl/docs/EARLY-RELEASE.md new file mode 100644 index 0000000..6d5a5e2 --- /dev/null +++ b/deps/curl/docs/EARLY-RELEASE.md @@ -0,0 +1,67 @@ +# How to determine if an early patch release is warranted + +In the curl project we do releases every 8 weeks. Unless we break the cycle +and do an early patch release. + +We do frequent releases partly to always have the next release "not too far +away". + +## Bugfix + +During the release cycle, and especially in the beginning of a new cycle (the +so-called "cool down" period), there are times when a bug is reported and +after it has been subsequently fixed correctly, the question might be asked: +is this bug and associated fix important enough for an early patch release? + +The question can only be properly asked when a fix has been created and landed +in the git master branch. + +## Early release + +An early patch release means that we ship a new, complete and full release +called `major.minor.patch` where the `patch` part is increased by one since +the previous release. A curl release is a curl release. There is no small or +big and we never release just a patch. There is only "release". + +## Questions to ask + + - Is there a security advisory rated high or critical? + - Is there a data corruption bug? + - Did the bug cause an API/ABI breakage? + - Will the problem annoy a significant share of the user population? + +If the answer is yes to one or more of the above, an early release might be +warranted. + +More questions to ask ourselves when doing the assessment if the answers to +the three ones above are all 'no'. + + - Does the bug cause curl to prematurely terminate? + - How common is the affected buggy option/feature/protocol/platform to get + used? + - How large is the estimated impacted user base? + - Does the bug block something crucial for applications or other adoption of + curl "out there" ? + - Does the bug cause problems for curl developers or others on "the curl + team" ? + - Is the bug limited to the curl tool only? That might have a smaller impact + than a bug also present in libcurl. + - Is there a (decent) workaround? + - Is it a regression? Is the bug introduced in this release? + - Can the bug be fixed "easily" by applying a patch? + - Does the bug break the build? Most users do not build curl themselves. + - How long is it until the already scheduled next release? + - Can affected users safely rather revert to a former release until the next + scheduled release? + - Is it a performance regression with no functionality side-effects? If so it + has to be substantial. + +## If an early release is deemed necessary + +Unless done for security or similarly important reasons, an early release +should not be done within a week of the previous release. + +This, to enable us to collect and bundle more fixes into the same release to +make the release more worthwhile for everyone and to allow more time for fixes +to settle and things to get tested. Getting a release in shape and done in +style is work that should not be rushed. diff --git a/deps/curl/docs/EXPERIMENTAL.md b/deps/curl/docs/EXPERIMENTAL.md new file mode 100644 index 0000000..de69401 --- /dev/null +++ b/deps/curl/docs/EXPERIMENTAL.md @@ -0,0 +1,24 @@ +# Experimental + +Some features and functionality in curl and libcurl are considered +**EXPERIMENTAL**. + +Experimental support in curl means: + +1. Experimental features are provided to allow users to try them out and + provide feedback on functionality and API etc before they ship and get + "carved in stone". +2. You must enable the feature when invoking configure as otherwise curl will + not be built with the feature present. +3. We strongly advise against using this feature in production. +4. **We reserve the right to change behavior** of the feature without sticking + to our API/ABI rules as we do for regular features, as long as it is marked + experimental. +5. Experimental features are clearly marked so in documentation. Beware. + +## Experimental features right now + + - The Hyper HTTP backend + - HTTP/3 support (using the quiche or msh3 backends) + - The rustls backend + - WebSocket diff --git a/deps/curl/docs/FAQ b/deps/curl/docs/FAQ new file mode 100644 index 0000000..1450a1e --- /dev/null +++ b/deps/curl/docs/FAQ @@ -0,0 +1,1561 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + +FAQ + + 1. Philosophy + 1.1 What is cURL? + 1.2 What is libcurl? + 1.3 What is curl not? + 1.4 When will you make curl do XXXX ? + 1.5 Who makes curl? + 1.6 What do you get for making curl? + 1.7 What about CURL from curl.com? + 1.8 I have a problem, who do I mail? + 1.9 Where do I buy commercial support for curl? + 1.10 How many are using curl? + 1.11 Why do you not update ca-bundle.crt + 1.12 I have a problem, who can I chat with? + 1.13 curl's ECCN number? + 1.14 How do I submit my patch? + 1.15 How do I port libcurl to my OS? + + 2. Install Related Problems + 2.1 configure fails when using static libraries + 2.2 Does curl work/build with other SSL libraries? + 2.3 How do I upgrade curl.exe in Windows? + 2.4 Does curl support SOCKS (RFC 1928) ? + + 3. Usage Problems + 3.1 curl: (1) SSL is disabled, https: not supported + 3.2 How do I tell curl to resume a transfer? + 3.3 Why does my posting using -F not work? + 3.4 How do I tell curl to run custom FTP commands? + 3.5 How can I disable the Accept: */* header? + 3.6 Does curl support ASP, XML, XHTML or HTML version Y? + 3.7 Can I use curl to delete/rename a file through FTP? + 3.8 How do I tell curl to follow HTTP redirects? + 3.9 How do I use curl in my favorite programming language? + 3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP? + 3.11 How do I POST with a different Content-Type? + 3.12 Why do FTP-specific features over HTTP proxy fail? + 3.13 Why do my single/double quotes fail? + 3.14 Does curl support JavaScript or PAC (automated proxy config)? + 3.15 Can I do recursive fetches with curl? + 3.16 What certificates do I need when I use SSL? + 3.17 How do I list the root directory of an FTP server? + 3.18 Can I use curl to send a POST/PUT and not wait for a response? + 3.19 How do I get HTTP from a host using a specific IP address? + 3.20 How to SFTP from my user's home directory? + 3.21 Protocol xxx not supported or disabled in libcurl + 3.22 curl -X gives me HTTP problems + + 4. Running Problems + 4.2 Why do I get problems when I use & or % in the URL? + 4.3 How can I use {, }, [ or ] to specify multiple URLs? + 4.4 Why do I get downloaded data even though the web page does not exist? + 4.5 Why do I get return code XXX from an HTTP server? + 4.5.1 "400 Bad Request" + 4.5.2 "401 Unauthorized" + 4.5.3 "403 Forbidden" + 4.5.4 "404 Not Found" + 4.5.5 "405 Method Not Allowed" + 4.5.6 "301 Moved Permanently" + 4.6 Can you tell me what error code 142 means? + 4.7 How do I keep user names and passwords secret in curl command lines? + 4.8 I found a bug + 4.9 curl cannot authenticate to a server that requires NTLM? + 4.10 My HTTP request using HEAD, PUT or DELETE does not work + 4.11 Why do my HTTP range requests return the full document? + 4.12 Why do I get "certificate verify failed" ? + 4.13 Why is curl -R on Windows one hour off? + 4.14 Redirects work in browser but not with curl + 4.15 FTPS does not work + 4.16 My HTTP POST or PUT requests are slow + 4.17 Non-functional connect timeouts on Windows + 4.18 file:// URLs containing drive letters (Windows, NetWare) + 4.19 Why does not curl return an error when the network cable is unplugged? + 4.20 curl does not return error for HTTP non-200 responses + + 5. libcurl Issues + 5.1 Is libcurl thread-safe? + 5.2 How can I receive all data into a large memory chunk? + 5.3 How do I fetch multiple files with libcurl? + 5.4 Does libcurl do Winsock initialization on win32 systems? + 5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ? + 5.6 What about Keep-Alive or persistent connections? + 5.7 Link errors when building libcurl on Windows + 5.8 libcurl.so.X: open failed: No such file or directory + 5.9 How does libcurl resolve host names? + 5.10 How do I prevent libcurl from writing the response to stdout? + 5.11 How do I make libcurl not receive the whole HTTP response? + 5.12 Can I make libcurl fake or hide my real IP address? + 5.13 How do I stop an ongoing transfer? + 5.14 Using C++ non-static functions for callbacks? + 5.15 How do I get an FTP directory listing? + 5.16 I want a different time-out + 5.17 Can I write a server with libcurl? + 5.18 Does libcurl use threads? + + 6. License Issues + 6.1 I have a GPL program, can I use the libcurl library? + 6.2 I have a closed-source program, can I use the libcurl library? + 6.3 I have a BSD licensed program, can I use the libcurl library? + 6.4 I have a program that uses LGPL libraries, can I use libcurl? + 6.5 Can I modify curl/libcurl for my program and keep the changes secret? + 6.6 Can you please change the curl/libcurl license to XXXX? + 6.7 What are my obligations when using libcurl in my commercial apps? + + 7. PHP/CURL Issues + 7.1 What is PHP/CURL? + 7.2 Who wrote PHP/CURL? + 7.3 Can I perform multiple requests using the same handle? + 7.4 Does PHP/CURL have dependencies? + + 8. Development + 8.1 Why does curl use C89? + 8.2 Will curl be rewritten? + +============================================================================== + +1. Philosophy + + 1.1 What is cURL? + + cURL is the name of the project. The name is a play on 'Client for URLs', + originally with URL spelled in uppercase to make it obvious it deals with + URLs. The fact it can also be read as 'see URL' also helped, it works as + an abbreviation for "Client URL Request Library" or why not the recursive + version: "curl URL Request Library". + + The cURL project produces two products: + + libcurl + + A client-side URL transfer library, supporting DICT, FILE, FTP, FTPS, + GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, + RTMP, RTMPS, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS + and WSS. + + libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, + Kerberos, SPNEGO, HTTP form based upload, proxies, cookies, user+password + authentication, file transfer resume, http proxy tunneling and more. + + libcurl is highly portable, it builds and works identically on numerous + platforms, including Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HP-UX, + IRIX, AIX, Tru64, Linux, UnixWare, HURD, Windows, Amiga, OS/2, macOS, + Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS, Symbian, OSF, Android, + Minix, IBM TPF and more... + + libcurl is free, thread-safe, IPv6 compatible, feature rich, well + supported and fast. + + curl + + A command line tool for getting or sending data using URL syntax. + + Since curl uses libcurl, curl supports the same wide range of common + Internet protocols that libcurl does. + + We pronounce curl with an initial k sound. It rhymes with words like girl + and earl. This is a short WAV file to help you: + + https://media.merriam-webster.com/soundc11/c/curl0001.wav + + There are numerous sub-projects and related projects that also use the word + curl in the project names in various combinations, but you should take + notice that this FAQ is directed at the command-line tool named curl (and + libcurl the library), and may therefore not be valid for other curl-related + projects. (There is however a small section for the PHP/CURL in this FAQ.) + + 1.2 What is libcurl? + + libcurl is a reliable and portable library for doing Internet data transfers + using one or more of its supported Internet protocols. + + You can use libcurl freely in your application, be it open source, + commercial or closed-source. + + libcurl is most probably the most portable, most powerful and most often + used C-based multi-platform file transfer library on this planet - be it + open source or commercial. + + 1.3 What is curl not? + + curl is not a wget clone. That is a common misconception. Never, during + curl's development, have we intended curl to replace wget or compete on its + market. curl is targeted at single-shot file transfers. + + curl is not a website mirroring program. If you want to use curl to mirror + something: fine, go ahead and write a script that wraps around curl or use + libcurl to make it reality. + + curl is not an FTP site mirroring program. Sure, get and send FTP with curl + but if you want systematic and sequential behavior you should write a + script (or write a new program that interfaces libcurl) and do it. + + curl is not a PHP tool, even though it works perfectly well when used from + or with PHP (when using the PHP/CURL module). + + curl is not a program for a single operating system. curl exists, compiles, + builds and runs under a wide range of operating systems, including all + modern Unixes (and a bunch of older ones too), Windows, Amiga, OS/2, macOS, + QNX etc. + + 1.4 When will you make curl do XXXX ? + + We love suggestions of what to change in order to make curl and libcurl + better. We do however believe in a few rules when it comes to the future of + curl: + + curl -- the command line tool -- is to remain a non-graphical command line + tool. If you want GUIs or fancy scripting capabilities, you should look for + another tool that uses libcurl. + + We do not add things to curl that other small and available tools already do + well at the side. curl's output can be piped into another program or + redirected to another file for the next program to interpret. + + We focus on protocol related issues and improvements. If you want to do more + magic with the supported protocols than curl currently does, chances are + good we will agree. If you want to add more protocols, we may agree. + + If you want someone else to do all the work while you wait for us to + implement it for you, that is not a friendly attitude. We spend a + considerable time already on maintaining and developing curl. In order to + get more out of us, you should consider trading in some of your time and + effort in return. Simply go to the GitHub repository which resides at + https://github.com/curl/curl, fork the project, and create pull requests + with your proposed changes. + + If you write the code, chances are better that it will get into curl faster. + + 1.5 Who makes curl? + + curl and libcurl are not made by any single individual. Daniel Stenberg is + project leader and main developer, but other persons' submissions are + important and crucial. Anyone can contribute and post their changes and + improvements and have them inserted in the main sources (of course on the + condition that developers agree that the fixes are good). + + The full list of all contributors is found in the docs/THANKS file. + + curl is developed by a community, with Daniel at the wheel. + + 1.6 What do you get for making curl? + + Project cURL is entirely free and open. We do this voluntarily, mostly in + our spare time. Companies may pay individual developers to work on curl. + This is not controlled by nor supervised in any way by the curl project. + + We get help from companies. Haxx provides website, bandwidth, mailing lists + etc, GitHub hosts the primary git repository and other services like the bug + tracker at https://github.com/curl/curl. Also again, some companies have + sponsored certain parts of the development in the past and I hope some will + continue to do so in the future. + + If you want to support our project, consider a donation or a banner-program + or even better: by helping us with coding, documenting or testing etc. + + See also: https://curl.se/sponsors.html + + 1.7 What about CURL from curl.com? + + During the summer of 2001, curl.com was busy advertising their client-side + programming language for the web, named CURL. + + We are in no way associated with curl.com or their CURL programming + language. + + Our project name curl has been in effective use since 1998. We were not the + first computer related project to use the name "curl" and do not claim any + rights to the name. + + We recognize that we will be living in parallel with curl.com and wish them + every success. + + 1.8 I have a problem, who do I mail? + + Please do not mail any single individual unless you really need to. Keep + curl-related questions on a suitable mailing list. All available mailing + lists are listed in the MANUAL document and online at + https://curl.se/mail/ + + Keeping curl-related questions and discussions on mailing lists allows + others to join in and help, to share their ideas, to contribute their + suggestions and to spread their wisdom. Keeping discussions on public mailing + lists also allows for others to learn from this (both current and future + users thanks to the web based archives of the mailing lists), thus saving us + from having to repeat ourselves even more. Thanks for respecting this. + + If you have found or simply suspect a security problem in curl or libcurl, + submit all the details at https://hackerone.one/curl. On there we keep the + issue private while we investigate, confirm it, work and validate a fix and + agree on a time schedule for publication etc. That way we produce a fix in a + timely manner before the flaw is announced to the world, reducing the impact + the problem risks having on existing users. + + Security issues can also be taking to the curl security team by emailing + security at curl.se (closed list of receivers, mails are not disclosed). + + 1.9 Where do I buy commercial support for curl? + + curl is fully open source. It means you can hire any skilled engineer to fix + your curl-related problems. + + We list available alternatives on the curl website: + https://curl.se/support.html + + 1.10 How many are using curl? + + It is impossible to tell. + + We do not know how many users that knowingly have installed and use curl. + + We do not know how many users that use curl without knowing that they are in + fact using it. + + We do not know how many users that downloaded or installed curl and then + never use it. + + In 2020, we estimate that curl runs in roughly ten billion installations + world wide. + + 1.11 Why do you not update ca-bundle.crt + + In the cURL project we have decided not to attempt to keep this file updated + (or even present) since deciding what to add to a ca cert bundle is an + undertaking we have not been ready to accept, and the one we can get from + Mozilla is perfectly fine so there is no need to duplicate that work. + + Today, with many services performed over HTTPS, every operating system + should come with a default ca cert bundle that can be deemed somewhat + trustworthy and that collection (if reasonably updated) should be deemed to + be a lot better than a private curl version. + + If you want the most recent collection of ca certs that Mozilla Firefox + uses, we recommend that you extract the collection yourself from Mozilla + Firefox (by running 'make ca-bundle), or by using our online service setup + for this purpose: https://curl.se/docs/caextract.html + + 1.12 I have a problem who, can I chat with? + + There is a bunch of friendly people hanging out in the #curl channel on the + IRC network libera.chat. If you are polite and nice, chances are good that + you can get -- or provide -- help instantly. + + 1.13 curl's ECCN number? + + The US government restricts exports of software that contains or uses + cryptography. When doing so, the Export Control Classification Number (ECCN) + is used to identify the level of export control etc. + + Apache Software Foundation gives a good explanation of ECCNs at + https://www.apache.org/dev/crypto.html + + We believe curl's number might be ECCN 5D002, another possibility is + 5D992. It seems necessary to write them (the authority that administers ECCN + numbers), asking to confirm. + + Comprehensible explanations of the meaning of such numbers and how to obtain + them (resp.) are here + + https://www.bis.doc.gov/licensing/exportingbasics.htm + https://www.bis.doc.gov/licensing/do_i_needaneccn.html + + An incomprehensible description of the two numbers above is here + https://www.bis.doc.gov/index.php/documents/new-encryption/1653-ccl5-pt2-3 + + 1.14 How do I submit my patch? + + We strongly encourage you to submit changes and improvements directly as + "pull requests" on GitHub: https://github.com/curl/curl/pulls + + If you for any reason cannot or will not deal with GitHub, send your patch to + the curl-library mailing list. We are many subscribers there and there are + lots of people who can review patches, comment on them and "receive" them + properly. + + Lots of more details are found in the CONTRIBUTE.md and INTERNALS.md + documents. + + 1.15 How do I port libcurl to my OS? + + Here's a rough step-by-step: + + 1. copy a suitable lib/config-*.h file as a start to lib/config-[youros].h + + 2. edit lib/config-[youros].h to match your OS and setup + + 3. edit lib/curl_setup.h to include config-[youros].h when your OS is + detected by the preprocessor, in the style others already exist + + 4. compile lib/*.c and make them into a library + + +2. Install Related Problems + + 2.1 configure fails when using static libraries + + You may find that configure fails to properly detect the entire dependency + chain of libraries when you provide static versions of the libraries that + configure checks for. + + The reason why static libraries is much harder to deal with is that for them + we do not get any help but the script itself must know or check what more + libraries that are needed (with shared libraries, that dependency "chain" is + handled automatically). This is a error-prone process and one that also + tends to vary over time depending on the release versions of the involved + components and may also differ between operating systems. + + For that reason, configure does few attempts to actually figure this out and + you are instead encouraged to set LIBS and LDFLAGS accordingly when you + invoke configure, and point out the needed libraries and set the necessary + flags yourself. + + 2.2 Does curl work with other SSL libraries? + + curl has been written to use a generic SSL function layer internally, and + that SSL functionality can then be provided by one out of many different SSL + backends. + + curl can be built to use one of the following SSL alternatives: OpenSSL, + libressl, BoringSSL, AWS-LC, GnuTLS, wolfSSL, mbedTLS, Secure Transport + (native iOS/OS X), Schannel (native Windows), BearSSL or Rustls. They all + have their pros and cons, and we try to maintain a comparison of them here: + https://curl.se/docs/ssl-compared.html + + 2.3 How do I upgrade curl.exe in Windows? + + The curl tool that is shipped as an integrated component of Windows 10 and + Windows 11 is managed by Microsoft. If you were to delete the file or + replace it with a newer version downloaded from https://curl.se/windows, + then Windows Update will cease to work on your system. + + There is no way to independently force an upgrade of the curl.exe that is + part of Windows other than through the regular Windows update process. There + is also nothing the curl project itself can do about this, since this is + managed and controlled entirely by Microsoft as owners of the operating + system. + + You can always download and install the latest version of curl for Windows + from https://curl.se/windows into a separate location. + + 2.4 Does curl support SOCKS (RFC 1928) ? + + Yes, SOCKS 4 and 5 are supported. + +3. Usage problems + + 3.1 curl: (1) SSL is disabled, https: not supported + + If you get this output when trying to get anything from an HTTPS server, it + means that the instance of curl/libcurl that you are using was built without + support for this protocol. + + This could have happened if the configure script that was run at build time + could not find all libs and include files curl requires for SSL to work. If + the configure script fails to find them, curl is simply built without SSL + support. + + To get HTTPS support into a curl that was previously built but that reports + that HTTPS is not supported, you should dig through the document and logs + and check out why the configure script does not find the SSL libs and/or + include files. + + Also, check out the other paragraph in this FAQ labeled "configure does not + find OpenSSL even when it is installed". + + 3.2 How do I tell curl to resume a transfer? + + curl supports resumed transfers both ways on both FTP and HTTP. + Try the -C option. + + 3.3 Why does my posting using -F not work? + + You cannot arbitrarily use -F or -d, the choice between -F or -d depends on + the HTTP operation you need curl to do and what the web server that will + receive your post expects. + + If the form you are trying to submit uses the type 'multipart/form-data', + then and only then you must use the -F type. In all the most common cases, + you should use -d which then causes a posting with the type + 'application/x-www-form-urlencoded'. + + This is described in some detail in the MANUAL and TheArtOfHttpScripting + documents, and if you do not understand it the first time, read it again + before you post questions about this to the mailing list. Also, try reading + through the mailing list archives for old postings and questions regarding + this. + + 3.4 How do I tell curl to run custom FTP commands? + + You can tell curl to perform optional commands both before and/or after a + file transfer. Study the -Q/--quote option. + + Since curl is used for file transfers, you do not normally use curl to + perform FTP commands without transferring anything. Therefore you must + always specify a URL to transfer to/from even when doing custom FTP + commands, or use -I which implies the "no body" option sent to libcurl. + + 3.5 How can I disable the Accept: */* header? + + You can change all internally generated headers by adding a replacement with + the -H/--header option. By adding a header with empty contents you safely + disable that one. Use -H "Accept:" to disable that specific header. + + 3.6 Does curl support ASP, XML, XHTML or HTML version Y? + + To curl, all contents are alike. It does not matter how the page was + generated. It may be ASP, PHP, Perl, shell-script, SSI or plain HTML + files. There is no difference to curl and it does not even know what kind of + language that generated the page. + + See also item 3.14 regarding JavaScript. + + 3.7 Can I use curl to delete/rename a file through FTP? + + Yes. You specify custom FTP commands with -Q/--quote. + + One example would be to delete a file after you have downloaded it: + + curl -O ftp://example.com/coolfile -Q '-DELE coolfile' + + or rename a file after upload: + + curl -T infile ftp://example.com/dir/ -Q "-RNFR infile" -Q "-RNTO newname" + + 3.8 How do I tell curl to follow HTTP redirects? + + curl does not follow so-called redirects by default. The Location: header + that informs the client about this is only interpreted if you are using the + -L/--location option. As in: + + curl -L http://example.com + + Not all redirects are HTTP ones, see 4.14 + + 3.9 How do I use curl in my favorite programming language? + + Many programming languages have interfaces/bindings that allow you to use + curl without having to use the command line tool. If you are fluent in such + a language, you may prefer to use one of these interfaces instead. + + Find out more about which languages that support curl directly, and how to + install and use them, in the libcurl section of the curl website: + https://curl.se/libcurl/ + + All the various bindings to libcurl are made by other projects and people, + outside of the cURL project. The cURL project itself only produces libcurl + with its plain C API. If you do not find anywhere else to ask you can ask + about bindings on the curl-library list too, but be prepared that people on + that list may not know anything about bindings. + + In December 2021, there were interfaces available for the following + languages: Ada95, Basic, C, C++, Ch, Cocoa, D, Delphi, Dylan, Eiffel, + Euphoria, Falcon, Ferite, Gambas, glib/GTK+, Go, Guile, Harbour, Haskell, + Java, Julia, Lisp, Lua, Mono, .NET, node.js, Object-Pascal, OCaml, Pascal, + Perl, PHP, PostgreSQL, Python, R, Rexx, Ring, RPG, Ruby, Rust, Scheme, + Scilab, S-Lang, Smalltalk, SP-Forth, SPL, Tcl, Visual Basic, Visual FoxPro, + Q, wxwidgets, XBLite and Xoho. By the time you read this, additional ones + may have appeared. + + 3.10 What about SOAP, WebDAV, XML-RPC or similar protocols over HTTP? + + curl adheres to the HTTP spec, which basically means you can play with *any* + protocol that is built on top of HTTP. Protocols such as SOAP, WEBDAV and + XML-RPC are all such ones. You can use -X to set custom requests and -H to + set custom headers (or replace internally generated ones). + + Using libcurl is of course just as good and you would just use the proper + library options to do the same. + + 3.11 How do I POST with a different Content-Type? + + You can always replace the internally generated headers with -H/--header. + To make a simple HTTP POST with text/xml as content-type, do something like: + + curl -d "datatopost" -H "Content-Type: text/xml" [URL] + + 3.12 Why do FTP-specific features over HTTP proxy fail? + + Because when you use an HTTP proxy, the protocol spoken on the network will + be HTTP, even if you specify an FTP URL. This effectively means that you + normally cannot use FTP-specific features such as FTP upload and FTP quote + etc. + + There is one exception to this rule, and that is if you can "tunnel through" + the given HTTP proxy. Proxy tunneling is enabled with a special option (-p) + and is generally not available as proxy admins usually disable tunneling to + ports other than 443 (which is used for HTTPS access through proxies). + + 3.13 Why do my single/double quotes fail? + + To specify a command line option that includes spaces, you might need to + put the entire option within quotes. Like in: + + curl -d " with spaces " example.com + + or perhaps + + curl -d ' with spaces ' example.com + + Exactly what kind of quotes and how to do this is entirely up to the shell + or command line interpreter that you are using. For most unix shells, you + can more or less pick either single (') or double (") quotes. For + Windows/DOS command prompts you must use double (") quotes, and if the + option string contains inner double quotes you can escape them with a + backslash. + + For Windows powershell the arguments are not always passed on as expected + because curl is not a powershell script. You may or may not be able to use + single quotes. To escape inner double quotes seems to require a + backslash-backtick escape sequence and the outer quotes as double quotes. + + Please study the documentation for your particular environment. Examples in + the curl docs will use a mix of both of these as shown above. You must + adjust them to work in your environment. + + Remember that curl works and runs on more operating systems than most single + individuals have ever tried. + + 3.14 Does curl support JavaScript or PAC (automated proxy config)? + + Many web pages do magic stuff using embedded JavaScript. curl and libcurl + have no built-in support for that, so it will be treated just like any other + contents. + + .pac files are a Netscape invention and are sometimes used by organizations + to allow them to differentiate which proxies to use. The .pac contents is + just a JavaScript program that gets invoked by the browser and that returns + the name of the proxy to connect to. Since curl does not support JavaScript, + it cannot support .pac proxy configuration either. + + Some workarounds usually suggested to overcome this JavaScript dependency: + + Depending on the JavaScript complexity, write up a script that translates it + to another language and execute that. + + Read the JavaScript code and rewrite the same logic in another language. + + Implement a JavaScript interpreter, people have successfully used the + Mozilla JavaScript engine in the past. + + Ask your admins to stop this, for a static proxy setup or similar. + + 3.15 Can I do recursive fetches with curl? + + No. curl itself has no code that performs recursive operations, such as + those performed by wget and similar tools. + + There exists wrapper scripts with that functionality (for example the + curlmirror perl script), and you can write programs based on libcurl to do + it, but the command line tool curl itself cannot. + + 3.16 What certificates do I need when I use SSL? + + There are three different kinds of "certificates" to keep track of when we + talk about using SSL-based protocols (HTTPS or FTPS) using curl or libcurl. + + CLIENT CERTIFICATE + + The server you communicate with may require that you can provide this in + order to prove that you actually are who you claim to be. If the server + does not require this, you do not need a client certificate. + + A client certificate is always used together with a private key, and the + private key has a pass phrase that protects it. + + SERVER CERTIFICATE + + The server you communicate with has a server certificate. You can and should + verify this certificate to make sure that you are truly talking to the real + server and not a server impersonating it. + + CERTIFICATE AUTHORITY CERTIFICATE ("CA cert") + + You often have several CA certs in a CA cert bundle that can be used to + verify a server certificate that was signed by one of the authorities in the + bundle. curl does not come with a CA cert bundle but most curl installs + provide one. You can also override the default. + + The server certificate verification process is made by using a Certificate + Authority certificate ("CA cert") that was used to sign the server + certificate. Server certificate verification is enabled by default in curl + and libcurl and is often the reason for problems as explained in FAQ entry + 4.12 and the SSLCERTS document + (https://curl.se/docs/sslcerts.html). Server certificates that are + "self-signed" or otherwise signed by a CA that you do not have a CA cert + for, cannot be verified. If the verification during a connect fails, you are + refused access. You then need to explicitly disable the verification to + connect to the server. + + 3.17 How do I list the root directory of an FTP server? + + There are two ways. The way defined in the RFC is to use an encoded slash + in the first path part. List the "/tmp" directory like this: + + curl ftp://ftp.example.com/%2ftmp/ + + or the not-quite-kosher-but-more-readable way, by simply starting the path + section of the URL with a slash: + + curl ftp://ftp.example.com//tmp/ + + 3.18 Can I use curl to send a POST/PUT and not wait for a response? + + No. + + You can easily write your own program using libcurl to do such stunts. + + 3.19 How do I get HTTP from a host using a specific IP address? + + For example, you may be trying out a website installation that is not yet in + the DNS. Or you have a site using multiple IP addresses for a given host + name and you want to address a specific one out of the set. + + Set a custom Host: header that identifies the server name you want to reach + but use the target IP address in the URL: + + curl --header "Host: www.example.com" http://127.0.0.1/ + + You can also opt to add faked host name entries to curl with the --resolve + option. That has the added benefit that things like redirects will also work + properly. The above operation would instead be done as: + + curl --resolve www.example.com:80:127.0.0.1 http://www.example.com/ + + 3.20 How to SFTP from my user's home directory? + + Contrary to how FTP works, SFTP and SCP URLs specify the exact directory to + work with. It means that if you do not specify that you want the user's home + directory, you get the actual root directory. + + To specify a file in your user's home directory, you need to use the correct + URL syntax which for SFTP might look similar to: + + curl -O -u user:password sftp://example.com/~/file.txt + + and for SCP it is just a different protocol prefix: + + curl -O -u user:password scp://example.com/~/file.txt + + 3.21 Protocol xxx not supported or disabled in libcurl + + When passing on a URL to curl to use, it may respond that the particular + protocol is not supported or disabled. The particular way this error message + is phrased is because curl does not make a distinction internally of whether + a particular protocol is not supported (i.e. never got any code added that + knows how to speak that protocol) or if it was explicitly disabled. curl can + be built to only support a given set of protocols, and the rest would then + be disabled or not supported. + + Note that this error will also occur if you pass a wrongly spelled protocol + part as in "htpt://example.com" or as in the less evident case if you prefix + the protocol part with a space as in " http://example.com/". + + 3.22 curl -X gives me HTTP problems + + In normal circumstances, -X should hardly ever be used. + + By default you use curl without explicitly saying which request method to + use when the URL identifies an HTTP transfer. If you just pass in a URL like + "curl http://example.com" it will use GET. If you use -d or -F curl will use + POST, -I will cause a HEAD and -T will make it a PUT. + + If for whatever reason you are not happy with these default choices that curl + does for you, you can override those request methods by specifying -X + [WHATEVER]. This way you can for example send a DELETE by doing "curl -X + DELETE [URL]". + + It is thus pointless to do "curl -XGET [URL]" as GET would be used + anyway. In the same vein it is pointless to do "curl -X POST -d data + [URL]"... But you can make a fun and somewhat rare request that sends a + request-body in a GET request with something like "curl -X GET -d data + [URL]" + + Note that -X does not actually change curl's behavior as it only modifies the + actual string sent in the request, but that may of course trigger a + different set of events. + + Accordingly, by using -XPOST on a command line that for example would follow + a 303 redirect, you will effectively prevent curl from behaving + correctly. Be aware. + + +4. Running Problems + + 4.2 Why do I get problems when I use & or % in the URL? + + In general Unix shells, the & symbol is treated specially and when used, it + runs the specified command in the background. To safely send the & as a part + of a URL, you should quote the entire URL by using single (') or double (") + quotes around it. Similar problems can also occur on some shells with other + characters, including ?*!$~(){}<>\|;`. When in doubt, quote the URL. + + An example that would invoke a remote CGI that uses &-symbols could be: + + curl 'http://www.example.com/cgi-bin/query?text=yes&q=curl' + + In Windows, the standard DOS shell treats the percent sign specially and you + need to use TWO percent signs for each single one you want to use in the + URL. + + If you want a literal percent sign to be part of the data you pass in a POST + using -d/--data you must encode it as '%25' (which then also needs the + percent sign doubled on Windows machines). + + 4.3 How can I use {, }, [ or ] to specify multiple URLs? + + Because those letters have a special meaning to the shell, to be used in + a URL specified to curl you must quote them. + + An example that downloads two URLs (sequentially) would be: + + curl '{curl,www}.haxx.se' + + To be able to use those characters as actual parts of the URL (without using + them for the curl URL "globbing" system), use the -g/--globoff option: + + curl -g 'www.example.com/weirdname[].html' + + 4.4 Why do I get downloaded data even though the web page does not exist? + + curl asks remote servers for the page you specify. If the page does not exist + at the server, the HTTP protocol defines how the server should respond and + that means that headers and a "page" will be returned. That is simply how + HTTP works. + + By using the --fail option you can tell curl explicitly to not get any data + if the HTTP return code does not say success. + + 4.5 Why do I get return code XXX from an HTTP server? + + RFC 2616 clearly explains the return codes. This is a short transcript. Go + read the RFC for exact details: + + 4.5.1 "400 Bad Request" + + The request could not be understood by the server due to malformed + syntax. The client SHOULD NOT repeat the request without modifications. + + 4.5.2 "401 Unauthorized" + + The request requires user authentication. + + 4.5.3 "403 Forbidden" + + The server understood the request, but is refusing to fulfill it. + Authorization will not help and the request SHOULD NOT be repeated. + + 4.5.4 "404 Not Found" + + The server has not found anything matching the Request-URI. No indication + is given as to whether the condition is temporary or permanent. + + 4.5.5 "405 Method Not Allowed" + + The method specified in the Request-Line is not allowed for the resource + identified by the Request-URI. The response MUST include an Allow header + containing a list of valid methods for the requested resource. + + 4.5.6 "301 Moved Permanently" + + If you get this return code and an HTML output similar to this: + +

Moved Permanently

The document has moved
here. + + it might be because you requested a directory URL but without the trailing + slash. Try the same operation again _with_ the trailing URL, or use the + -L/--location option to follow the redirection. + + 4.6 Can you tell me what error code 142 means? + + All curl error codes are described at the end of the man page, in the + section called "EXIT CODES". + + Error codes that are larger than the highest documented error code means + that curl has exited due to a crash. This is a serious error, and we + appreciate a detailed bug report from you that describes how we could go + ahead and repeat this. + + 4.7 How do I keep user names and passwords secret in curl command lines? + + This problem has two sides: + + The first part is to avoid having clear-text passwords in the command line + so that they do not appear in 'ps' outputs and similar. That is easily + avoided by using the "-K" option to tell curl to read parameters from a file + or stdin to which you can pass the secret info. curl itself will also + attempt to "hide" the given password by blanking out the option - this + does not work on all platforms. + + To keep the passwords in your account secret from the rest of the world is + not a task that curl addresses. You could of course encrypt them somehow to + at least hide them from being read by human eyes, but that is not what + anyone would call security. + + Also note that regular HTTP (using Basic authentication) and FTP passwords + are sent as cleartext across the network. All it takes for anyone to fetch + them is to listen on the network. Eavesdropping is easy. Use more secure + authentication methods (like Digest, Negotiate or even NTLM) or consider the + SSL-based alternatives HTTPS and FTPS. + + 4.8 I found a bug + + It is not a bug if the behavior is documented. Read the docs first. + Especially check out the KNOWN_BUGS file, it may be a documented bug. + + If it is a problem with a binary you have downloaded or a package for your + particular platform, try contacting the person who built the package/archive + you have. + + If there is a bug, read the BUGS document first. Then report it as described + in there. + + 4.9 curl cannot authenticate to a server that requires NTLM? + + NTLM support requires OpenSSL, GnuTLS, mbedTLS, Secure Transport, or + Microsoft Windows libraries at build-time to provide this functionality. + + 4.10 My HTTP request using HEAD, PUT or DELETE does not work + + Many web servers allow or demand that the administrator configures the + server properly for these requests to work on the web server. + + Some servers seem to support HEAD only on certain kinds of URLs. + + To fully grasp this, try the documentation for the particular server + software you are trying to interact with. This is not anything curl can do + anything about. + + 4.11 Why do my HTTP range requests return the full document? + + Because the range may not be supported by the server, or the server may + choose to ignore it and return the full document anyway. + + 4.12 Why do I get "certificate verify failed" ? + + When you invoke curl and get an error 60 error back it means that curl + could not verify that the server's certificate was good. curl verifies the + certificate using the CA cert bundle and verifying for which names the + certificate has been granted. + + To completely disable the certificate verification, use -k. This does + however enable man-in-the-middle attacks and makes the transfer INSECURE. + We strongly advise against doing this for more than experiments. + + If you get this failure with a CA cert bundle installed and used, the + server's certificate might not be signed by one of the CA's in your CA + store. It might for example be self-signed. You then correct this problem by + obtaining a valid CA cert for the server. Or again, decrease the security by + disabling this check. + + At times, you find that the verification works in your favorite browser but + fails in curl. When this happens, the reason is usually that the server + sends an incomplete cert chain. The server is mandated to send all + "intermediate certificates" but does not. This typically works with browsers + anyway since they A) cache such certs and B) supports AIA which downloads + such missing certificates on demand. This is a server misconfiguration. A + good way to figure out if this is the case it to use the SSL Labs server + test and check the certificate chain: https://www.ssllabs.com/ssltest/ + + Details are also in the SSLCERTS.md document, found online here: + https://curl.se/docs/sslcerts.html + + 4.13 Why is curl -R on Windows one hour off? + + Since curl 7.53.0 this issue should be fixed as long as curl was built with + any modern compiler that allows for a 64-bit curl_off_t type. For older + compilers or prior curl versions it may set a time that appears one hour off. + This happens due to a flaw in how Windows stores and uses file modification + times and it is not easily worked around. For more details read this: + https://www.codeproject.com/Articles/1144/Beating-the-Daylight-Savings-Time-bug-and-getting + + 4.14 Redirects work in browser but not with curl + + curl supports HTTP redirects well (see item 3.8). Browsers generally support + at least two other ways to perform redirects that curl does not: + + Meta tags. You can write an HTML tag that will cause the browser to redirect + to another given URL after a certain time. + + JavaScript. You can write a JavaScript program embedded in an HTML page that + redirects the browser to another given URL. + + There is no way to make curl follow these redirects. You must either + manually figure out what the page is set to do, or write a script that parses + the results and fetches the new URL. + + 4.15 FTPS does not work + + curl supports FTPS (sometimes known as FTP-SSL) both implicit and explicit + mode. + + When a URL is used that starts with FTPS://, curl assumes implicit SSL on + the control connection and will therefore immediately connect and try to + speak SSL. FTPS:// connections default to port 990. + + To use explicit FTPS, you use an FTP:// URL and the --ftp-ssl option (or one + of its related flavors). This is the most common method, and the one + mandated by RFC 4217. This kind of connection will then of course use the + standard FTP port 21 by default. + + 4.16 My HTTP POST or PUT requests are slow + + libcurl makes all POST and PUT requests (except for requests with a small + request body) use the "Expect: 100-continue" header. This header allows the + server to deny the operation early so that libcurl can bail out before having + to send any data. This is useful in authentication cases and others. + + However, many servers do not implement the Expect: stuff properly and if the + server does not respond (positively) within 1 second libcurl will continue + and send off the data anyway. + + You can disable libcurl's use of the Expect: header the same way you disable + any header, using -H / CURLOPT_HTTPHEADER, or by forcing it to use HTTP 1.0. + + 4.17 Non-functional connect timeouts + + In most Windows setups having a timeout longer than 21 seconds make no + difference, as it will only send 3 TCP SYN packets and no more. The second + packet sent three seconds after the first and the third six seconds after + the second. No more than three packets are sent, no matter how long the + timeout is set. + + See option TcpMaxConnectRetransmissions on this page: + https://support.microsoft.com/en-us/kb/175523/en-us + + Also, even on non-Windows systems there may run a firewall or anti-virus + software or similar that accepts the connection but does not actually do + anything else. This will make (lib)curl to consider the connection connected + and thus the connect timeout will not trigger. + + 4.18 file:// URLs containing drive letters (Windows, NetWare) + + When using curl to try to download a local file, one might use a URL + in this format: + + file://D:/blah.txt + + you will find that even if D:\blah.txt does exist, curl returns a 'file + not found' error. + + According to RFC 1738 (https://www.ietf.org/rfc/rfc1738.txt), + file:// URLs must contain a host component, but it is ignored by + most implementations. In the above example, 'D:' is treated as the + host component, and is taken away. Thus, curl tries to open '/blah.txt'. + If your system is installed to drive C:, that will resolve to 'C:\blah.txt', + and if that does not exist you will get the not found error. + + To fix this problem, use file:// URLs with *three* leading slashes: + + file:///D:/blah.txt + + Alternatively, if it makes more sense, specify 'localhost' as the host + component: + + file://localhost/D:/blah.txt + + In either case, curl should now be looking for the correct file. + + 4.19 Why does not curl return an error when the network cable is unplugged? + + Unplugging a cable is not an error situation. The TCP/IP protocol stack + was designed to be fault tolerant, so even though there may be a physical + break somewhere the connection should not be affected, just possibly + delayed. Eventually, the physical break will be fixed or the data will be + re-routed around the physical problem through another path. + + In such cases, the TCP/IP stack is responsible for detecting when the + network connection is irrevocably lost. Since with some protocols it is + perfectly legal for the client to wait indefinitely for data, the stack may + never report a problem, and even when it does, it can take up to 20 minutes + for it to detect an issue. The curl option --keepalive-time enables + keep-alive support in the TCP/IP stack which makes it periodically probe the + connection to make sure it is still available to send data. That should + reliably detect any TCP/IP network failure. + + TCP keep alive will not detect the network going down before the TCP/IP + connection is established (e.g. during a DNS lookup) or using protocols that + do not use TCP. To handle those situations, curl offers a number of timeouts + on its own. --speed-limit/--speed-time will abort if the data transfer rate + falls too low, and --connect-timeout and --max-time can be used to put an + overall timeout on the connection phase or the entire transfer. + + A libcurl-using application running in a known physical environment (e.g. + an embedded device with only a single network connection) may want to act + immediately if its lone network connection goes down. That can be achieved + by having the application monitor the network connection on its own using an + OS-specific mechanism, then signaling libcurl to abort (see also item 5.13). + + 4.20 curl does not return error for HTTP non-200 responses + + Correct. Unless you use -f (--fail). + + When doing HTTP transfers, curl will perform exactly what you are asking it + to do and if successful it will not return an error. You can use curl to + test your web server's "file not found" page (that gets 404 back), you can + use it to check your authentication protected web pages (that gets a 401 + back) and so on. + + The specific HTTP response code does not constitute a problem or error for + curl. It simply sends and delivers HTTP as you asked and if that worked, + everything is fine and dandy. The response code is generally providing more + higher level error information that curl does not care about. The error was + not in the HTTP transfer. + + If you want your command line to treat error codes in the 400 and up range + as errors and thus return a non-zero value and possibly show an error + message, curl has a dedicated option for that: -f (CURLOPT_FAILONERROR in + libcurl speak). + + You can also use the -w option and the variable %{response_code} to extract + the exact response code that was returned in the response. + +5. libcurl Issues + + 5.1 Is libcurl thread-safe? + + Yes. + + We have written the libcurl code specifically adjusted for multi-threaded + programs. libcurl will use thread-safe functions instead of non-safe ones if + your system has such. Note that you must never share the same handle in + multiple threads. + + There may be some exceptions to thread safety depending on how libcurl was + built. Please review the guidelines for thread safety to learn more: + https://curl.se/libcurl/c/threadsafe.html + + 5.2 How can I receive all data into a large memory chunk? + + [ See also the examples/getinmemory.c source ] + + You are in full control of the callback function that gets called every time + there is data received from the remote server. You can make that callback do + whatever you want. You do not have to write the received data to a file. + + One solution to this problem could be to have a pointer to a struct that you + pass to the callback function. You set the pointer using the + CURLOPT_WRITEDATA option. Then that pointer will be passed to the callback + instead of a FILE * to a file: + + /* imaginary struct */ + struct MemoryStruct { + char *memory; + size_t size; + }; + + /* imaginary callback function */ + size_t + WriteMemoryCallback(void *ptr, size_t size, size_t nmemb, void *data) + { + size_t realsize = size * nmemb; + struct MemoryStruct *mem = (struct MemoryStruct *)data; + + mem->memory = (char *)realloc(mem->memory, mem->size + realsize + 1); + if (mem->memory) { + memcpy(&(mem->memory[mem->size]), ptr, realsize); + mem->size += realsize; + mem->memory[mem->size] = 0; + } + return realsize; + } + + 5.3 How do I fetch multiple files with libcurl? + + libcurl has excellent support for transferring multiple files. You should + just repeatedly set new URLs with curl_easy_setopt() and then transfer it + with curl_easy_perform(). The handle you get from curl_easy_init() is not + only reusable, but you are even encouraged to reuse it if you can, as that + will enable libcurl to use persistent connections. + + 5.4 Does libcurl do Winsock initialization on win32 systems? + + Yes, if told to in the curl_global_init() call. + + 5.5 Does CURLOPT_WRITEDATA and CURLOPT_READDATA work on win32 ? + + Yes, but you cannot open a FILE * and pass the pointer to a DLL and have + that DLL use the FILE * (as the DLL and the client application cannot access + each others' variable memory areas). If you set CURLOPT_WRITEDATA you must + also use CURLOPT_WRITEFUNCTION as well to set a function that writes the + file, even if that simply writes the data to the specified FILE *. + Similarly, if you use CURLOPT_READDATA you must also specify + CURLOPT_READFUNCTION. + + 5.6 What about Keep-Alive or persistent connections? + + curl and libcurl have excellent support for persistent connections when + transferring several files from the same server. curl will attempt to reuse + connections for all URLs specified on the same command line/config file, and + libcurl will reuse connections for all transfers that are made using the + same libcurl handle. + + When you use the easy interface the connection cache is kept within the easy + handle. If you instead use the multi interface, the connection cache will be + kept within the multi handle and will be shared among all the easy handles + that are used within the same multi handle. + + 5.7 Link errors when building libcurl on Windows + + You need to make sure that your project, and all the libraries (both static + and dynamic) that it links against, are compiled/linked against the same run + time library. + + This is determined by the /MD, /ML, /MT (and their corresponding /M?d) + options to the command line compiler. /MD (linking against MSVCRT dll) seems + to be the most commonly used option. + + When building an application that uses the static libcurl library, you must + add -DCURL_STATICLIB to your CFLAGS. Otherwise the linker will look for + dynamic import symbols. If you are using Visual Studio, you need to instead + add CURL_STATICLIB in the "Preprocessor Definitions" section. + + If you get a linker error like "unknown symbol __imp__curl_easy_init ..." you + have linked against the wrong (static) library. If you want to use the + libcurl.dll and import lib, you do not need any extra CFLAGS, but use one of + the import libraries below. These are the libraries produced by the various + lib/Makefile.* files: + + Target: static lib. import lib for libcurl*.dll. + ----------------------------------------------------------- + MinGW: libcurl.a libcurldll.a + MSVC (release): libcurl.lib libcurl_imp.lib + MSVC (debug): libcurld.lib libcurld_imp.lib + Borland: libcurl.lib libcurl_imp.lib + + 5.8 libcurl.so.X: open failed: No such file or directory + + This is an error message you might get when you try to run a program linked + with a shared version of libcurl and your runtime linker (ld.so) could not + find the shared library named libcurl.so.X. (Where X is the number of the + current libcurl ABI, typically 3 or 4). + + You need to make sure that ld.so finds libcurl.so.X. You can do that + multiple ways, and it differs somewhat between different operating systems. + They are usually: + + * Add an option to the linker command line that specify the hard-coded path + the runtime linker should check for the lib (usually -R) + + * Set an environment variable (LD_LIBRARY_PATH for example) where ld.so + should check for libs + + * Adjust the system's config to check for libs in the directory where you have + put the library (like Linux's /etc/ld.so.conf) + + 'man ld.so' and 'man ld' will tell you more details + + 5.9 How does libcurl resolve host names? + + libcurl supports a large number of name resolve functions. One of them is + picked at build-time and will be used unconditionally. Thus, if you want to + change name resolver function you must rebuild libcurl and tell it to use a + different function. + + - The non-IPv6 resolver that can use one of four different host name resolve + calls (depending on what your system supports): + + A - gethostbyname() + B - gethostbyname_r() with 3 arguments + C - gethostbyname_r() with 5 arguments + D - gethostbyname_r() with 6 arguments + + - The IPv6-resolver that uses getaddrinfo() + + - The c-ares based name resolver that uses the c-ares library for resolves. + Using this offers asynchronous name resolves. + + - The threaded resolver (default option on Windows). It uses: + + A - gethostbyname() on plain IPv4 hosts + B - getaddrinfo() on IPv6 enabled hosts + + Also note that libcurl never resolves or reverse-lookups addresses given as + pure numbers, such as 127.0.0.1 or ::1. + + 5.10 How do I prevent libcurl from writing the response to stdout? + + libcurl provides a default built-in write function that writes received data + to stdout. Set the CURLOPT_WRITEFUNCTION to receive the data, or possibly + set CURLOPT_WRITEDATA to a different FILE * handle. + + 5.11 How do I make libcurl not receive the whole HTTP response? + + You make the write callback (or progress callback) return an error and + libcurl will then abort the transfer. + + 5.12 Can I make libcurl fake or hide my real IP address? + + No. libcurl operates on a higher level. Besides, faking IP address would + imply sending IP packets with a made-up source address, and then you normally + get a problem with receiving the packet sent back as they would then not be + routed to you. + + If you use a proxy to access remote sites, the sites will not see your local + IP address but instead the address of the proxy. + + Also note that on many networks NATs or other IP-munging techniques are used + that makes you see and use a different IP address locally than what the + remote server will see you coming from. You may also consider using + https://www.torproject.org/ . + + 5.13 How do I stop an ongoing transfer? + + With the easy interface you make sure to return the correct error code from + one of the callbacks, but none of them are instant. There is no function you + can call from another thread or similar that will stop it immediately. + Instead, you need to make sure that one of the callbacks you use returns an + appropriate value that will stop the transfer. Suitable callbacks that you + can do this with include the progress callback, the read callback and the + write callback. + + If you are using the multi interface, you can also stop a transfer by + removing the particular easy handle from the multi stack at any moment you + think the transfer is done or when you wish to abort the transfer. + + 5.14 Using C++ non-static functions for callbacks? + + libcurl is a C library, it does not know anything about C++ member functions. + + You can overcome this "limitation" with relative ease using a static + member function that is passed a pointer to the class: + + // f is the pointer to your object. + static size_t YourClass::func(void *buffer, size_t sz, size_t n, void *f) + { + // Call non-static member function. + static_cast(f)->nonStaticFunction(); + } + + // This is how you pass pointer to the static function: + curl_easy_setopt(hcurl, CURLOPT_WRITEFUNCTION, YourClass::func); + curl_easy_setopt(hcurl, CURLOPT_WRITEDATA, this); + + 5.15 How do I get an FTP directory listing? + + If you end the FTP URL you request with a slash, libcurl will provide you + with a directory listing of that given directory. You can also set + CURLOPT_CUSTOMREQUEST to alter what exact listing command libcurl would use + to list the files. + + The follow-up question tends to be how is a program supposed to parse the + directory listing. How does it know what's a file and what's a directory and + what's a symlink etc. If the FTP server supports the MLSD command then it + will return data in a machine-readable format that can be parsed for type. + The types are specified by RFC 3659 section 7.5.1. If MLSD is not supported + then you have to work with what you are given. The LIST output format is + entirely at the server's own liking and the NLST output does not reveal any + types and in many cases does not even include all the directory entries. + Also, both LIST and NLST tend to hide unix-style hidden files (those that + start with a dot) by default so you need to do "LIST -a" or similar to see + them. + + Example - List only directories. + ftp.funet.fi supports MLSD and ftp.kernel.org does not: + + curl -s ftp.funet.fi/pub/ -X MLSD | \ + perl -lne 'print if s/(?:^|;)type=dir;[^ ]+ (.+)$/$1/' + + curl -s ftp.kernel.org/pub/linux/kernel/ | \ + perl -lne 'print if s/^d[-rwx]{9}(?: +[^ ]+){7} (.+)$/$1/' + + If you need to parse LIST output in libcurl one such existing + list parser is available at https://cr.yp.to/ftpparse.html Versions of + libcurl since 7.21.0 also provide the ability to specify a wildcard to + download multiple files from one FTP directory. + + 5.16 I want a different time-out + + Sometimes users realize that CURLOPT_TIMEOUT and CURLOPT_CONNECTIMEOUT are + not sufficiently advanced or flexible to cover all the various use cases and + scenarios applications end up with. + + libcurl offers many more ways to time-out operations. A common alternative + is to use the CURLOPT_LOW_SPEED_LIMIT and CURLOPT_LOW_SPEED_TIME options to + specify the lowest possible speed to accept before to consider the transfer + timed out. + + The most flexible way is by writing your own time-out logic and using + CURLOPT_XFERINFOFUNCTION (perhaps in combination with other callbacks) and + use that to figure out exactly when the right condition is met when the + transfer should get stopped. + + 5.17 Can I write a server with libcurl? + + No. libcurl offers no functions or building blocks to build any kind of + Internet protocol server. libcurl is only a client-side library. For server + libraries, you need to continue your search elsewhere but there exist many + good open source ones out there for most protocols you could want a server + for. There are also really good stand-alone servers that have been tested + and proven for many years. There is no need for you to reinvent them. + + 5.18 Does libcurl use threads? + + Put simply: no, libcurl will execute in the same thread you call it in. All + callbacks will be called in the same thread as the one you call libcurl in. + + If you want to avoid your thread to be blocked by the libcurl call, you make + sure you use the non-blocking multi API which will do transfers + asynchronously - still in the same single thread. + + libcurl will potentially internally use threads for name resolving, if it + was built to work like that, but in those cases it will create the child + threads by itself and they will only be used and then killed internally by + libcurl and never exposed to the outside. + +6. License Issues + + curl and libcurl are released under a MIT/X derivative license. The license + is liberal and should not impose a problem for your project. This section is + just a brief summary for the cases we get the most questions. (Parts of this + section was much enhanced by Bjorn Reese.) + + We are not lawyers and this is not legal advice. You should probably consult + one if you want true and accurate legal insights without our prejudice. Note + especially that this section concerns the libcurl license only; compiling in + features of libcurl that depend on other libraries (e.g. OpenSSL) may affect + the licensing obligations of your application. + + 6.1 I have a GPL program, can I use the libcurl library? + + Yes + + Since libcurl may be distributed under the MIT/X derivative license, it can + be used together with GPL in any software. + + 6.2 I have a closed-source program, can I use the libcurl library? + + Yes + + libcurl does not put any restrictions on the program that uses the library. + + 6.3 I have a BSD licensed program, can I use the libcurl library? + + Yes + + libcurl does not put any restrictions on the program that uses the library. + + 6.4 I have a program that uses LGPL libraries, can I use libcurl? + + Yes + + The LGPL license does not clash with other licenses. + + 6.5 Can I modify curl/libcurl for my program and keep the changes secret? + + Yes + + The MIT/X derivative license practically allows you to do almost anything + with the sources, on the condition that the copyright texts in the sources + are left intact. + + 6.6 Can you please change the curl/libcurl license to XXXX? + + No. + + We have carefully picked this license after years of development and + discussions and a large amount of people have contributed with source code + knowing that this is the license we use. This license puts the restrictions + we want on curl/libcurl and it does not spread to other programs or + libraries that use it. It should be possible for everyone to use libcurl or + curl in their projects, no matter what license they already have in use. + + 6.7 What are my obligations when using libcurl in my commercial apps? + + Next to none. All you need to adhere to is the MIT-style license (stated in + the COPYING file) which basically says you have to include the copyright + notice in "all copies" and that you may not use the copyright holder's name + when promoting your software. + + You do not have to release any of your source code. + + You do not have to reveal or make public any changes to the libcurl source + code. + + You do not have to broadcast to the world that you are using libcurl within + your app. + + All we ask is that you disclose "the copyright notice and this permission + notice" somewhere. Most probably like in the documentation or in the section + where other third party dependencies already are mentioned and acknowledged. + + As can be seen here: https://curl.se/docs/companies.html and elsewhere, + more and more companies are discovering the power of libcurl and take + advantage of it even in commercial environments. + + +7. PHP/CURL Issues + + 7.1 What is PHP/CURL? + + The module for PHP that makes it possible for PHP programs to access curl- + functions from within PHP. + + In the cURL project we call this module PHP/CURL to differentiate it from + curl the command line tool and libcurl the library. The PHP team however + does not refer to it like this (for unknown reasons). They call it plain + CURL (often using all caps) or sometimes ext/curl, but both cause much + confusion to users which in turn gives us a higher question load. + + 7.2 Who wrote PHP/CURL? + + PHP/CURL was initially written by Sterling Hughes. + + 7.3 Can I perform multiple requests using the same handle? + + Yes - at least in PHP version 4.3.8 and later (this has been known to not + work in earlier versions, but the exact version when it started to work is + unknown to me). + + After a transfer, you just set new options in the handle and make another + transfer. This will make libcurl reuse the same connection if it can. + + 7.4 Does PHP/CURL have dependencies? + + PHP/CURL is a module that comes with the regular PHP package. It depends on + and uses libcurl, so you need to have libcurl installed properly before + PHP/CURL can be used. + +8. Development + + 8.1 Why does curl use C89? + + As with everything in curl, there is a history and we keep using what we have + used before until someone brings up the subject and argues for and works on + changing it. + + We started out using C89 in the 1990s because that was the only way to write + a truly portable C program and have it run as widely as possible. C89 was for + a long time even necessary to make things work on otherwise considered modern + platforms such as Windows. Today, we do not really know how many users that + still require the use of a C89 compiler. + + We will continue to use C89 for as long as nobody brings up a strong enough + reason for us to change our minds. The core developers of the project do not + feel restricted by this and we are not convinced that going C99 will offer us + enough of a benefit to warrant the risk of cutting off a share of users. + + 8.2 Will curl be rewritten? + + In one go: no. Little by little over time? Maybe. + + Over the years, new languages and clever operating environments come and go. + Every now and then the urge apparently arises to request that we rewrite curl + in another language. + + Some the most important properties in curl are maintaining the API and ABI + for libcurl and keeping the behavior for the command line tool. As long as we + can do that, everything else is up for discussion. To maintain the ABI, we + probably have to maintain a certain amount of code in C, and to remain rock + stable, we will never risk anything by rewriting a lot of things in one go. + That said, we can certainly offer more and more optional backends written in + other languages, as long as those backends can be plugged in at build-time. + Backends can be written in any language, but should probably provide APIs + usable from C to ease integration and transition. diff --git a/deps/curl/docs/FEATURES.md b/deps/curl/docs/FEATURES.md new file mode 100644 index 0000000..05364aa --- /dev/null +++ b/deps/curl/docs/FEATURES.md @@ -0,0 +1,219 @@ +# Features -- what curl can do + +## curl tool + + - config file support + - multiple URLs in a single command line + - range "globbing" support: [0-13], {one,two,three} + - multiple file upload on a single command line + - custom maximum transfer rate + - redirect stderr + - parallel transfers + +## libcurl + + - URL RFC 3986 syntax + - custom maximum download time + - custom least download speed acceptable + - custom output result after completion + - guesses protocol from host name unless specified + - uses .netrc + - progress bar with time statistics while downloading + - "standard" proxy environment variables support + - compiles on win32 (reported builds on 70+ operating systems) + - selectable network interface for outgoing traffic + - IPv6 support on Unix and Windows + - happy eyeballs dual-stack connects + - persistent connections + - SOCKS 4 + 5 support, with or without local name resolving + - supports user name and password in proxy environment variables + - operations through HTTP proxy "tunnel" (using CONNECT) + - replaceable memory functions (malloc, free, realloc, etc) + - asynchronous name resolving (6) + - both a push and a pull style interface + - international domain names (10) + +## HTTP + + - HTTP/0.9 responses are optionally accepted + - HTTP/1.0 + - HTTP/1.1 + - HTTP/2, including multiplexing and server push (5) + - GET + - PUT + - HEAD + - POST + - multipart formpost (RFC 1867-style) + - authentication: Basic, Digest, NTLM (9) and Negotiate (SPNEGO) (3) + to server and proxy + - resume (both GET and PUT) + - follow redirects + - maximum amount of redirects to follow + - custom HTTP request + - cookie get/send fully parsed + - reads/writes the Netscape cookie file format + - custom headers (replace/remove internally generated headers) + - custom user-agent string + - custom referrer string + - range + - proxy authentication + - time conditions + - via HTTP proxy, HTTPS proxy or SOCKS proxy + - retrieve file modification date + - Content-Encoding support for deflate and gzip + - "Transfer-Encoding: chunked" support in uploads + - automatic data compression (11) + +## HTTPS (1) + + - (all the HTTP features) + - HTTP/3 experimental support + - using client certificates + - verify server certificate + - via HTTP proxy, HTTPS proxy or SOCKS proxy + - select desired encryption + - select usage of a specific SSL version + +## FTP + + - download + - authentication + - Kerberos 5 (12) + - active/passive using PORT, EPRT, PASV or EPSV + - single file size information (compare to HTTP HEAD) + - 'type=' URL support + - dir listing + - dir listing names-only + - upload + - upload append + - upload via http-proxy as HTTP PUT + - download resume + - upload resume + - custom ftp commands (before and/or after the transfer) + - simple "range" support + - via HTTP proxy, HTTPS proxy or SOCKS proxy + - all operations can be tunneled through proxy + - customizable to retrieve file modification date + - no dir depth limit + +## FTPS (1) + + - implicit `ftps://` support that use SSL on both connections + - explicit "AUTH TLS" and "AUTH SSL" usage to "upgrade" plain `ftp://` + connection to use SSL for both or one of the connections + +## SCP (8) + + - both password and public key auth + +## SFTP (7) + + - both password and public key auth + - with custom commands sent before/after the transfer + +## TFTP + + - download + - upload + +## TELNET + + - connection negotiation + - custom telnet options + - stdin/stdout I/O + +## LDAP (2) + + - full LDAP URL support + +## DICT + + - extended DICT URL support + +## FILE + + - URL support + - upload + - resume + +## SMB + + - SMBv1 over TCP and SSL + - download + - upload + - authentication with NTLMv1 + +## SMTP + + - authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (9), Kerberos 5 + (4) and External. + - send emails + - mail from support + - mail size support + - mail auth support for trusted server-to-server relaying + - multiple recipients + - via http-proxy + +## SMTPS (1) + + - implicit `smtps://` support + - explicit "STARTTLS" usage to "upgrade" plain `smtp://` connections to use SSL + - via http-proxy + +## POP3 + + - authentication: Clear Text, APOP and SASL + - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (9), + Kerberos 5 (4) and External. + - list emails + - retrieve emails + - enhanced command support for: CAPA, DELE, TOP, STAT, UIDL and NOOP via + custom requests + - via http-proxy + +## POP3S (1) + + - implicit `pop3s://` support + - explicit `STLS` usage to "upgrade" plain `pop3://` connections to use SSL + - via http-proxy + +## IMAP + + - authentication: Clear Text and SASL + - SASL based authentication: Plain, Login, CRAM-MD5, Digest-MD5, NTLM (9), + Kerberos 5 (4) and External. + - list the folders of a mailbox + - select a mailbox with support for verifying the `UIDVALIDITY` + - fetch emails with support for specifying the UID and SECTION + - upload emails via the append command + - enhanced command support for: EXAMINE, CREATE, DELETE, RENAME, STATUS, + STORE, COPY and UID via custom requests + - via http-proxy + +## IMAPS (1) + + - implicit `imaps://` support + - explicit "STARTTLS" usage to "upgrade" plain `imap://` connections to use SSL + - via http-proxy + +## MQTT + + - Subscribe to and publish topics using URL scheme `mqtt://broker/topic` + +## Footnotes + + 1. requires a TLS library + 2. requires OpenLDAP or WinLDAP + 3. requires a GSS-API implementation (such as Heimdal or MIT Kerberos) or + SSPI (native Windows) + 4. requires a GSS-API implementation, however, only Windows SSPI is + currently supported + 5. requires nghttp2 + 6. requires c-ares + 7. requires libssh2, libssh or wolfSSH + 8. requires libssh2 or libssh + 9. requires OpenSSL, GnuTLS, mbedTLS, Secure Transport or SSPI + (native Windows) + 10. requires libidn2 or Windows + 11. requires libz, brotli and/or zstd + 12. requires a GSS-API implementation (such as Heimdal or MIT Kerberos) diff --git a/deps/curl/docs/GOVERNANCE.md b/deps/curl/docs/GOVERNANCE.md new file mode 100644 index 0000000..dd09de4 --- /dev/null +++ b/deps/curl/docs/GOVERNANCE.md @@ -0,0 +1,182 @@ +# Decision making in the curl project + +A rough guide to how we make decisions and who does what. + +## BDFL + +This project was started by and has to some extent been pushed forward over +the years with Daniel Stenberg as the driving force. It matches a standard +BDFL (Benevolent Dictator For Life) style project. + +This setup has been used due to convenience and the fact that it has worked +fine this far. It is not because someone thinks of it as a superior project +leadership model. It will also only continue working as long as Daniel manages +to listen in to what the project and the general user population wants and +expects from us. + +## Legal entity + +There is no legal entity. The curl project is just a bunch of people scattered +around the globe with the common goal to produce source code that creates +great products. We are not part of any umbrella organization and we are not +located in any specific country. We are totally independent. + +The copyrights in the project are owned by the individuals and organizations +that wrote those parts of the code. + +## Decisions + +The curl project is not a democracy, but everyone is entitled to state their +opinion and may argue for their sake within the community. + +All and any changes that have been done or will be done are eligible to bring +up for discussion, to object to or to praise. Ideally, we find consensus for +the appropriate way forward in any given situation or challenge. + +If there is no obvious consensus, a maintainer who's knowledgeable in the +specific area will take an "executive" decision that they think is the right +for the project. + +## Donations + +Donating plain money to curl is best done to curl's [Open Collective +fund](https://opencollective.com/curl). Open Collective is a US based +non-profit organization that holds on to funds for us. This fund is then used +for paying the curl security bug bounties, to reimburse project related +expenses etc. + +Donations to the project can also come in the form of server hosting, providing +services and paying for people to work on curl related code etc. Usually, such +donations are services paid for directly by the sponsors. + +We grade sponsors in a few different levels and if they meet the criteria, +they can be mentioned on the Sponsors page on the curl website. + +## Commercial Support + +The curl project does not do or offer commercial support. It only hosts +mailing lists, runs bug trackers etc to facilitate communication and work. + +However, Daniel works for wolfSSL and we offer commercial curl support there. + +# Key roles + +## User + +Someone who uses or has used curl or libcurl. + +## Contributor + +Someone who has helped the curl project, who has contributed to bring it +forward. Contributing could be to provide advice, debug a problem, file a bug +report, run test infrastructure or writing code etc. + +## Commit author + +Sometimes also called 'committer'. Someone who has authored a commit in the +curl source code repository. Committers are recorded as `Author` in git. + +## Maintainers + +A maintainer in the curl project is an individual who has been given +permissions to push commits to one of the git repositories. + +Maintainers are free to push commits to the repositories at their own will. +Maintainers are however expected to listen to feedback from users and any +change that is non-trivial in size or nature *should* be brought to the +project as a Pull-Request (PR) to allow others to comment/object before merge. + +## Former maintainers + +A maintainer who stops being active in the project will at some point get +their push permissions removed. We do this for security reasons but also to +make sure that we always have the list of maintainers as "the team that push +stuff to curl". + +Getting push permissions removed is not a punishment. Everyone who ever worked +on maintaining curl is considered a hero, for all time hereafter. + +## Security team members + +We have a security team. That is the team of people who are subscribed to the +curl-security mailing list; the receivers of security reports from users and +developers. This list of people will vary over time but should be skilled +developers familiar with the curl project. + +The security team works best when it consists of a small set of active +persons. We invite new members when the team seems to need it, and we also +expect to retire security team members as they "drift off" from the project or +just find themselves unable to perform their duties there. + +## Server admins + +We run a web server, a mailing list and more on the curl project's primary +server. That physical machine is owned and run by Haxx. Daniel is the primary +admin of all things curl related server stuff, but Björn Stenberg and Linus +Feltzing serve as backup admins for when Daniel is gone or unable. + +The primary server is paid for by Haxx. The machine is physically located in a +server bunker in Stockholm Sweden, operated by the company Glesys. + +The website contents are served to the web via Fastly and Daniel is the +primary curl contact with Fastly. + +## BDFL + +That is Daniel. + +# Maintainers + +A curl maintainer is a project volunteer who has the authority and rights to +merge changes into a git repository in the curl project. + +Anyone can aspire to become a curl maintainer. + +### Duties + +There are no mandatory duties. We hope and wish that maintainers consider +reviewing patches and help merging them, especially when the changes are +within the area of personal expertise and experience. + +### Requirements + +- only merge code that meets our quality and style guide requirements. +- *never* merge code without doing a PR first, unless the change is "trivial" +- if in doubt, ask for input/feedback from others + +### Recommendations + +- we require two-factor authentication enabled on your GitHub account to + reduce risk of malicious source code tampering +- consider enabling signed git commits for additional verification of changes + +### Merge advice + +When you are merging patches/pull requests... + +- make sure the commit messages follow our template +- squash patch sets into a few logical commits even if the PR did not, if + necessary +- avoid the "merge" button on GitHub, do it "manually" instead to get full + control and full audit trail (GitHub leaves out you as "Committer:") +- remember to credit the reporter and the helpers. + +## Who are maintainers? + +The [list of maintainers](https://github.com/orgs/curl/people). Be aware that +the level of presence and activity in the project vary greatly between +different individuals and over time. + +### Become a maintainer? + +If you think you can help making the project better by shouldering some +maintaining responsibilities, then please get in touch. + +You will be expected to be familiar with the curl project and its ways of +working. You need to have gotten a few quality patches merged as a proof of +this. + +### Stop being a maintainer + +If you (appear to) not be active in the project anymore, you may be removed as +a maintainer. Thank you for your service! diff --git a/deps/curl/docs/HELP-US.md b/deps/curl/docs/HELP-US.md new file mode 100644 index 0000000..90c9724 --- /dev/null +++ b/deps/curl/docs/HELP-US.md @@ -0,0 +1,89 @@ +# How to get started helping out in the curl project + +We are always in need of more help. If you are new to the project and are +looking for ways to contribute and help out, this document aims to give a few +good starting points. + +You may subscribe to the [curl-library mailing +list](https://lists.haxx.se/listinfo/curl-library) to keep track of the +current discussion topics; or if you are registered on GitHub, you can use the +[Discussions section](https://github.com/curl/curl/discussions) on the main +curl repository. + +## Scratch your own itch + +One of the best ways is to start working on any problems or issues you have +found yourself or perhaps got annoyed at in the past. It can be a spelling +error in an error text or a weirdly phrased section in a man page. Hunt it +down and report the bug. Or make your first pull request with a fix for that. + +## Smaller tasks + +Some projects mark small issues as "beginner friendly", "bite-sized" or +similar. We do not do that in curl since such issues never linger around long +enough. Simple issues get handled fast. + +If you are looking for a smaller or simpler task in the project to help out +with as an entry-point into the project, perhaps because you are a newcomer or +even maybe not a terribly experienced developer, here's our advice: + + - Read through this document to get a grasp on a general approach to use + - Consider adding a test case for something not currently tested (correctly) + - Consider updating or adding documentation + - One way to get started gently in the project, is to participate in an + existing issue/PR and help out by reproducing the issue, review the code in + the PR etc. + +## Help wanted + +In the issue tracker we occasionally mark bugs with [help +wanted](https://github.com/curl/curl/labels/help%20wanted), as a sign that the +bug is acknowledged to exist and that there is nobody known to work on this +issue for the moment. Those are bugs that are fine to "grab" and provide a +pull request for. The complexity level of these will of course vary, so pick +one that piques your interest. + +## Work on known bugs + +Some bugs are known and have not yet received attention and work enough to get +fixed. We collect such known existing flaws in the +[KNOWN_BUGS](https://curl.se/docs/knownbugs.html) page. Many of them link +to the original bug report with some additional details, but some may also +have aged a bit and may require some verification that the bug still exists in +the same way and that what was said about it in the past is still valid. + +## Fix autobuild problems + +On the [autobuilds page](https://curl.se/dev/builds.html) we show a +collection of test results from the automatic curl build and tests that are +performed by volunteers. Fixing compiler warnings and errors shown there is +something we value greatly. Also, if you own or run systems or architectures +that are not already tested in the autobuilds, we also appreciate more +volunteers running builds automatically to help us keep curl portable. + +## TODO items + +Ideas for features and functions that we have considered worthwhile to +implement and provide are kept in the +[TODO](https://curl.se/docs/todo.html) file. Some of the ideas are +rough. Some are well thought out. Some probably are not really suitable +anymore. + +Before you invest a lot of time on a TODO item, do bring it up for discussion +on the mailing list. For discussion on applicability but also for ideas and +brainstorming on specific ways to do the implementation etc. + +## You decide + +You can also come up with a completely new thing you think we should do. Or +not do. Or fix. Or add to the project. You then either bring it to the mailing +list first to see if people will shoot down the idea at once, or you bring a +first draft of the idea as a pull request and take the discussion there around +the specific implementation. Either way is fine. + +## CONTRIBUTE + +We offer [guidelines](https://curl.se/dev/contribute.html) that are +suitable to be familiar with before you decide to contribute to curl. If +you are used to open source development, you will probably not find many +surprises there. diff --git a/deps/curl/docs/HISTORY.md b/deps/curl/docs/HISTORY.md new file mode 100644 index 0000000..f39c45e --- /dev/null +++ b/deps/curl/docs/HISTORY.md @@ -0,0 +1,437 @@ +How curl Became Like This +========================= + +Towards the end of 1996, Daniel Stenberg was spending time writing an IRC bot +for an Amiga related channel on EFnet. He then came up with the idea to make +currency-exchange calculations available to Internet Relay Chat (IRC) +users. All the necessary data were published on the Web; he just needed to +automate their retrieval. + +1996 +---- + +On November 11, 1996 the Brazilian developer Rafael Sagula wrote and released +HttpGet version 0.1. + +Daniel extended this existing command-line open-source tool. After a few minor +adjustments, it did just what he needed. The first release with Daniel's +additions was 0.2, released on December 17, 1996. Daniel quickly became the +new maintainer of the project. + +1997 +---- + +HttpGet 0.3 was released in January 1997 and now it accepted HTTP URLs on the +command line. + +HttpGet 1.0 was released on April 8 1997 with brand new HTTP proxy support. + +We soon found and fixed support for getting currencies over GOPHER. Once FTP +download support was added, the name of the project was changed and urlget 2.0 +was released in August 1997. The http-only days were already passed. + +Version 2.2 was released on August 14 1997 and introduced support to build for +and run on Windows and Solaris. + +November 24 1997: Version 3.1 added FTP upload support. + +Version 3.5 added support for HTTP POST. + +1998 +---- + +February 4: urlget 3.10 + +February 9: urlget 3.11 + +March 14: urlget 3.12 added proxy authentication. + +The project slowly grew bigger. With upload capabilities, the name was once +again misleading and a second name change was made. On March 20, 1998 curl 4 +was released. (The version numbering from the previous names was kept.) + +(Unrelated to this project a company called Curl Corporation registered a US +trademark on the name "CURL" on May 18 1998. That company had then already +registered the curl.com domain back in November of the previous year. All this +was revealed to us much later.) + +SSL support was added, powered by the SSLeay library. + +August: first announcement of curl on freshmeat.net. + +October: with the curl 4.9 release and the introduction of cookie support, +curl was no longer released under the GPL license. Now we are at 4000 lines of +code, we switched over to the MPL license to restrict the effects of +"copyleft". + +November: configure script and reported successful compiles on several +major operating systems. The never-quite-understood -F option was added and +curl could now simulate quite a lot of a browser. TELNET support was added. + +Curl 5 was released in December 1998 and introduced the first ever curl man +page. People started making Linux RPM packages out of it. + +1999 +---- + +January: DICT support added. + +OpenSSL took over and SSLeay was abandoned. + +May: first Debian package. + +August: LDAP:// and FILE:// support added. The curl website gets 1300 visits +weekly. Moved site to curl.haxx.nu. + +September: Released curl 6.0. 15000 lines of code. + +December 28: added the project on Sourceforge and started using its services +for managing the project. + +2000 +---- + +Spring: major internal overhaul to provide a suitable library interface. +The first non-beta release was named 7.1 and arrived in August. This offered +the easy interface and turned out to be the beginning of actually getting +other software and programs to be based on and powered by libcurl. Almost +20000 lines of code. + +June: the curl site moves to "curl.haxx.se" + +August, the curl website gets 4000 visits weekly. + +The PHP guys adopted libcurl already the same month, when the first ever third +party libcurl binding showed up. CURL has been a supported module in PHP since +the release of PHP 4.0.2. This would soon get followers. More than 16 +different bindings exist at the time of this writing. + +September: kerberos4 support was added. + +November: started the work on a test suite for curl. It was later re-written +from scratch again. The libcurl major SONAME number was set to 1. + +2001 +---- + +January: Daniel released curl 7.5.2 under a new license again: MIT (or +MPL). The MIT license is extremely liberal and can be combined with GPL +in other projects. This would finally put an end to the "complaints" from +people involved in GPLed projects that previously were prohibited from using +libcurl while it was released under MPL only. (Due to the fact that MPL is +deemed "GPL incompatible".) + +March 22: curl supports HTTP 1.1 starting with the release of 7.7. This +also introduced libcurl's ability to do persistent connections. 24000 lines of +code. The libcurl major SONAME number was bumped to 2 due to this overhaul. +The first experimental ftps:// support was added. + +August: The curl website gets 8000 visits weekly. Curl Corporation contacted +Daniel to discuss "the name issue". After Daniel's reply, they have never +since got back in touch again. + +September: libcurl 7.9 introduces cookie jar and `curl_formadd()`. During the +forthcoming 7.9.x releases, we introduced the multi interface slowly and +without many whistles. + +September 25: curl (7.7.2) is bundled in Mac OS X (10.1) for the first time. It was +already becoming more and more of a standard utility of Linux distributions +and a regular in the BSD ports collections. + +2002 +---- + +June: the curl website gets 13000 visits weekly. curl and libcurl is +35000 lines of code. Reported successful compiles on more than 40 combinations +of CPUs and operating systems. + +To estimate the number of users of the curl tool or libcurl library is next to +impossible. Around 5000 downloaded packages each week from the main site gives +a hint, but the packages are mirrored extensively, bundled with numerous OS +distributions and otherwise retrieved as part of other software. + +October 1: with the release of curl 7.10 it is released under the MIT license +only. + +Starting with 7.10, curl verifies SSL server certificates by default. + +2003 +---- + +January: Started working on the distributed curl tests. The autobuilds. + +February: the curl site averages at 20000 visits weekly. At any given moment, +there is an average of 3 people browsing the website. + +Multiple new authentication schemes are supported: Digest (May), NTLM (June) +and Negotiate (June). + +November: curl 7.10.8 is released. 45000 lines of code. ~55000 unique visitors +to the website. Five official web mirrors. + +December: full-fledged SSL for FTP is supported. + +2004 +---- + +January: curl 7.11.0 introduced large file support. + +June: curl 7.12.0 introduced IDN support. 10 official web mirrors. + +This release bumped the major SONAME to 3 due to the removal of the +`curl_formparse()` function + +August: Curl and libcurl 7.12.1 + + Public curl release number: 82 + Releases counted from the beginning: 109 + Available command line options: 96 + Available curl_easy_setopt() options: 120 + Number of public functions in libcurl: 36 + Amount of public website mirrors: 12 + Number of known libcurl bindings: 26 + +2005 +---- + +April: GnuTLS can now optionally be used for the secure layer when curl is +built. + +April: Added the multi_socket() API + +September: TFTP support was added. + +More than 100,000 unique visitors of the curl website. 25 mirrors. + +December: security vulnerability: libcurl URL Buffer Overflow + +2006 +---- + +January: We dropped support for Gopher. We found bugs in the implementation +that turned out to have been introduced years ago, so with the conclusion that +nobody had found out in all this time we removed it instead of fixing it. + +March: security vulnerability: libcurl TFTP Packet Buffer Overflow + +September: The major SONAME number for libcurl was bumped to 4 due to the +removal of ftp third party transfer support. + +November: Added SCP and SFTP support + +2007 +---- + +February: Added support for the Mozilla NSS library to do the SSL/TLS stuff + +July: security vulnerability: libcurl GnuTLS insufficient cert verification + +2008 +---- + +November: + + Command line options: 128 + curl_easy_setopt() options: 158 + Public functions in libcurl: 58 + Known libcurl bindings: 37 + Contributors: 683 + + 145,000 unique visitors. >100 GB downloaded. + +2009 +---- + +March: security vulnerability: libcurl Arbitrary File Access + +April: added CMake support + +August: security vulnerability: libcurl embedded zero in cert name + +December: Added support for IMAP, POP3 and SMTP + +2010 +---- + +January: Added support for RTSP + +February: security vulnerability: libcurl data callback excessive length + +March: The project switched over to use git (hosted by GitHub) instead of CVS +for source code control + +May: Added support for RTMP + +Added support for PolarSSL to do the SSL/TLS stuff + +August: + + Public curl releases: 117 + Command line options: 138 + curl_easy_setopt() options: 180 + Public functions in libcurl: 58 + Known libcurl bindings: 39 + Contributors: 808 + + Gopher support added (re-added actually, see January 2006) + +2011 +---- + +February: added support for the axTLS backend + +April: added the cyassl backend (later renamed to WolfSSL) + +2012 +---- + + July: Added support for Schannel (native Windows TLS backend) and Darwin SSL + (Native Mac OS X and iOS TLS backend). + + Supports Metalink + + October: SSH-agent support. + +2013 +---- + + February: Cleaned up internals to always uses the "multi" non-blocking + approach internally and only expose the blocking API with a wrapper. + + September: First small steps on supporting HTTP/2 with nghttp2. + + October: Removed krb4 support. + + December: Happy eyeballs. + +2014 +---- + + March: first real release supporting HTTP/2 + + September: Website had 245,000 unique visitors and served 236GB data + + SMB and SMBS support + +2015 +---- + + June: support for multiplexing with HTTP/2 + + August: support for HTTP/2 server push + + December: Public Suffix List + +2016 +---- + + January: the curl tool defaults to HTTP/2 for HTTPS URLs + + December: curl 7.52.0 introduced support for HTTPS-proxy! + + First TLS 1.3 support + +2017 +---- + + July: OSS-Fuzz started fuzzing libcurl + + September: Added Multi-SSL support + + The website serves 3100 GB/month + + Public curl releases: 169 + Command line options: 211 + curl_easy_setopt() options: 249 + Public functions in libcurl: 74 + Contributors: 1609 + + October: SSLKEYLOGFILE support, new MIME API + + October: Daniel received the Polhem Prize for his work on curl + + November: brotli + +2018 +---- + + January: new SSH backend powered by libssh + + March: starting with the 1803 release of Windows 10, curl is shipped bundled + with Microsoft's operating system. + + July: curl shows headers using bold type face + + October: added DNS-over-HTTPS (DoH) and the URL API + + MesaLink is a new supported TLS backend + + libcurl now does HTTP/2 (and multiplexing) by default on HTTPS URLs + + curl and libcurl are installed in an estimated 5 *billion* instances + world-wide. + + October 31: Curl and libcurl 7.62.0 + + Public curl releases: 177 + Command line options: 219 + curl_easy_setopt() options: 261 + Public functions in libcurl: 80 + Contributors: 1808 + + December: removed axTLS support + +2019 +---- + + March: added experimental alt-svc support + + August: the first HTTP/3 requests with curl. + + September: 7.66.0 is released and the tool offers parallel downloads + +2020 +---- + + curl and libcurl are installed in an estimated 10 *billion* instances + world-wide. + + January: added BearSSL support + + March: removed support for PolarSSL, added wolfSSH support + + April: experimental MQTT support + + August: zstd support + + November: the website moves to curl.se. The website serves 10TB data monthly. + + December: alt-svc support + +2021 +---- + + February 3: curl 7.75.0 ships with support for Hyper as an HTTP backend + + March 31: curl 7.76.0 ships with support for rustls + + July: HSTS is supported + +2022 +---- + + March: added --json, removed mesalink support + + Public curl releases: 206 + Command line options: 245 + curl_easy_setopt() options: 295 + Public functions in libcurl: 86 + Contributors: 2601 + + The curl.se website serves 16,500 GB/month over 462M requests, the + official docker image has been pulled 4,098,015,431 times. + +2023 +---- + +August: Dropped support for the NSS library diff --git a/deps/curl/docs/HSTS.md b/deps/curl/docs/HSTS.md new file mode 100644 index 0000000..e541024 --- /dev/null +++ b/deps/curl/docs/HSTS.md @@ -0,0 +1,42 @@ +# HSTS support + +HTTP Strict-Transport-Security. Added as experimental in curl +7.74.0. Supported "for real" since 7.77.0. + +## Standard + +[HTTP Strict Transport Security](https://datatracker.ietf.org/doc/html/rfc6797) + +## Behavior + +libcurl features an in-memory cache for HSTS hosts, so that subsequent +HTTP-only requests to a host name present in the cache will get internally +"redirected" to the HTTPS version. + +## `curl_easy_setopt()` options: + + - `CURLOPT_HSTS_CTRL` - enable HSTS for this easy handle + - `CURLOPT_HSTS` - specify file name where to store the HSTS cache on close + (and possibly read from at startup) + +## curl command line options + + - `--hsts [filename]` - enable HSTS, use the file as HSTS cache. If filename + is `""` (no length) then no file will be used, only in-memory cache. + +## HSTS cache file format + +Lines starting with `#` are ignored. + +For each hsts entry: + + [host name] "YYYYMMDD HH:MM:SS" + +The `[host name]` is dot-prefixed if it includes subdomains. + +The time stamp is when the entry expires. + +## Possible future additions + + - `CURLOPT_HSTS_PRELOAD` - provide a set of HSTS host names to load first + - ability to save to something else than a file diff --git a/deps/curl/docs/HTTP-COOKIES.md b/deps/curl/docs/HTTP-COOKIES.md new file mode 100644 index 0000000..d6fd87d --- /dev/null +++ b/deps/curl/docs/HTTP-COOKIES.md @@ -0,0 +1,147 @@ +# HTTP Cookies + +## Cookie overview + + Cookies are `name=contents` pairs that an HTTP server tells the client to + hold and then the client sends back those to the server on subsequent + requests to the same domains and paths for which the cookies were set. + + Cookies are either "session cookies" which typically are forgotten when the + session is over which is often translated to equal when browser quits, or + the cookies are not session cookies they have expiration dates after which + the client will throw them away. + + Cookies are set to the client with the Set-Cookie: header and are sent to + servers with the Cookie: header. + + For a long time, the only spec explaining how to use cookies was the + original [Netscape spec from 1994](https://curl.se/rfc/cookie_spec.html). + + In 2011, [RFC 6265](https://www.ietf.org/rfc/rfc6265.txt) was finally + published and details how cookies work within HTTP. In 2016, an update which + added support for prefixes was + [proposed](https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-prefixes-00), + and in 2017, another update was + [drafted](https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-cookie-alone-01) + to deprecate modification of 'secure' cookies from non-secure origins. Both + of these drafts have been incorporated into a proposal to + [replace](https://datatracker.ietf.org/doc/html/draft-ietf-httpbis-rfc6265bis-11) + RFC 6265. Cookie prefixes and secure cookie modification protection has been + implemented by curl. + + curl considers `http://localhost` to be a *secure context*, meaning that it + will allow and use cookies marked with the `secure` keyword even when done + over plain HTTP for this host. curl does this to match how popular browsers + work with secure cookies. + +## Cookies saved to disk + + Netscape once created a file format for storing cookies on disk so that they + would survive browser restarts. curl adopted that file format to allow + sharing the cookies with browsers, only to see browsers move away from that + format. Modern browsers no longer use it, while curl still does. + + The Netscape cookie file format stores one cookie per physical line in the + file with a bunch of associated meta data, each field separated with + TAB. That file is called the cookie jar in curl terminology. + + When libcurl saves a cookie jar, it creates a file header of its own in + which there is a URL mention that will link to the web version of this + document. + +## Cookie file format + + The cookie file format is text based and stores one cookie per line. Lines + that start with `#` are treated as comments. An exception is lines that + start with `#HttpOnly_`, which is a prefix for cookies that have the + `HttpOnly` attribute set. + + Each line that specifies a single cookie consists of seven text fields + separated with TAB characters. A valid line must end with a newline + character. + +### Fields in the file + + Field number, what type and example data and the meaning of it: + + 0. string `example.com` - the domain name + 1. boolean `FALSE` - include subdomains + 2. string `/foobar/` - path + 3. boolean `TRUE` - send/receive over HTTPS only + 4. number `1462299217` - expires at - seconds since Jan 1st 1970, or 0 + 5. string `person` - name of the cookie + 6. string `daniel` - value of the cookie + +## Cookies with curl the command line tool + + curl has a full cookie "engine" built in. If you just activate it, you can + have curl receive and send cookies exactly as mandated in the specs. + + Command line options: + + `-b, --cookie` + + tell curl a file to read cookies from and start the cookie engine, or if it + is not a file it will pass on the given string. `-b name=var` works and so + does `-b cookiefile`. + + `-j, --junk-session-cookies` + + when used in combination with -b, it will skip all "session cookies" on load + so as to appear to start a new cookie session. + + `-c, --cookie-jar` + + tell curl to start the cookie engine and write cookies to the given file + after the request(s) + +## Cookies with libcurl + + libcurl offers several ways to enable and interface the cookie engine. These + options are the ones provided by the native API. libcurl bindings may offer + access to them using other means. + + `CURLOPT_COOKIE` + + Is used when you want to specify the exact contents of a cookie header to + send to the server. + + `CURLOPT_COOKIEFILE` + + Tell libcurl to activate the cookie engine, and to read the initial set of + cookies from the given file. Read-only. + + `CURLOPT_COOKIEJAR` + + Tell libcurl to activate the cookie engine, and when the easy handle is + closed save all known cookies to the given cookie jar file. Write-only. + + `CURLOPT_COOKIELIST` + + Provide detailed information about a single cookie to add to the internal + storage of cookies. Pass in the cookie as an HTTP header with all the + details set, or pass in a line from a Netscape cookie file. This option can + also be used to flush the cookies etc. + + `CURLOPT_COOKIESESSION` + + Tell libcurl to ignore all cookies it is about to load that are session + cookies. + + `CURLINFO_COOKIELIST` + + Extract cookie information from the internal cookie storage as a linked + list. + +## Cookies with JavaScript + + These days a lot of the web is built up by JavaScript. The web browser loads + complete programs that render the page you see. These JavaScript programs + can also set and access cookies. + + Since curl and libcurl are plain HTTP clients without any knowledge of or + capability to handle JavaScript, such cookies will not be detected or used. + + Often, if you want to mimic what a browser does on such websites, you can + record web browser HTTP traffic when using such a site and then repeat the + cookie operations using curl or libcurl. diff --git a/deps/curl/docs/HTTP2.md b/deps/curl/docs/HTTP2.md new file mode 100644 index 0000000..5b40283 --- /dev/null +++ b/deps/curl/docs/HTTP2.md @@ -0,0 +1,102 @@ +HTTP/2 with curl +================ + +[HTTP/2 Spec](https://www.rfc-editor.org/rfc/rfc7540.txt) +[http2 explained](https://daniel.haxx.se/http2/) + +Build prerequisites +------------------- + - nghttp2 + - OpenSSL, libressl, BoringSSL, GnuTLS, mbedTLS, wolfSSL or Schannel + with a new enough version. + +[nghttp2](https://nghttp2.org/) +------------------------------- + +libcurl uses this 3rd party library for the low level protocol handling +parts. The reason for this is that HTTP/2 is much more complex at that layer +than HTTP/1.1 (which we implement on our own) and that nghttp2 is an already +existing and well functional library. + +We require at least version 1.12.0. + +Over an http:// URL +------------------- + +If `CURLOPT_HTTP_VERSION` is set to `CURL_HTTP_VERSION_2_0`, libcurl will +include an upgrade header in the initial request to the host to allow +upgrading to HTTP/2. + +Possibly we can later introduce an option that will cause libcurl to fail if +not possible to upgrade. Possibly we introduce an option that makes libcurl +use HTTP/2 at once over http:// + +Over an https:// URL +-------------------- + +If `CURLOPT_HTTP_VERSION` is set to `CURL_HTTP_VERSION_2_0`, libcurl will use +ALPN to negotiate which protocol to continue with. Possibly introduce an +option that will cause libcurl to fail if not possible to use HTTP/2. + +`CURL_HTTP_VERSION_2TLS` was added in 7.47.0 as a way to ask libcurl to prefer +HTTP/2 for HTTPS but stick to 1.1 by default for plain old HTTP connections. + +ALPN is the TLS extension that HTTP/2 is expected to use. + +`CURLOPT_SSL_ENABLE_ALPN` is offered to allow applications to explicitly +disable ALPN. + +Multiplexing +------------ + +Starting in 7.43.0, libcurl fully supports HTTP/2 multiplexing, which is the +term for doing multiple independent transfers over the same physical TCP +connection. + +To take advantage of multiplexing, you need to use the multi interface and set +`CURLMOPT_PIPELINING` to `CURLPIPE_MULTIPLEX`. With that bit set, libcurl will +attempt to reuse existing HTTP/2 connections and just add a new stream over +that when doing subsequent parallel requests. + +While libcurl sets up a connection to an HTTP server there is a period during +which it does not know if it can pipeline or do multiplexing and if you add +new transfers in that period, libcurl will default to start new connections +for those transfers. With the new option `CURLOPT_PIPEWAIT` (added in 7.43.0), +you can ask that a transfer should rather wait and see in case there is a +connection for the same host in progress that might end up being possible to +multiplex on. It favors keeping the number of connections low to the cost of +slightly longer time to first byte transferred. + +Applications +------------ + +We hide HTTP/2's binary nature and convert received HTTP/2 traffic to headers +in HTTP 1.1 style. This allows applications to work unmodified. + +curl tool +--------- + +curl offers the `--http2` command line option to enable use of HTTP/2. + +curl offers the `--http2-prior-knowledge` command line option to enable use of +HTTP/2 without HTTP/1.1 Upgrade. + +Since 7.47.0, the curl tool enables HTTP/2 by default for HTTPS connections. + +curl tool limitations +--------------------- + +The command line tool does not support HTTP/2 server push. It supports +multiplexing when the parallel transfer option is used. + +HTTP Alternative Services +------------------------- + +Alt-Svc is an extension with a corresponding frame (ALTSVC) in HTTP/2 that +tells the client about an alternative "route" to the same content for the same +origin server that you get the response from. A browser or long-living client +can use that hint to create a new connection asynchronously. For libcurl, we +may introduce a way to bring such clues to the application and/or let a +subsequent request use the alternate route automatically. + +[Detailed in RFC 7838](https://datatracker.ietf.org/doc/html/rfc7838) diff --git a/deps/curl/docs/HTTP3.md b/deps/curl/docs/HTTP3.md new file mode 100644 index 0000000..7f2f08a --- /dev/null +++ b/deps/curl/docs/HTTP3.md @@ -0,0 +1,379 @@ +# HTTP3 (and QUIC) + +## Resources + +[HTTP/3 Explained](https://http3-explained.haxx.se/en/) - the online free +book describing the protocols involved. + +[quicwg.org](https://quicwg.org/) - home of the official protocol drafts + +## QUIC libraries + +QUIC libraries we are using: + +[ngtcp2](https://github.com/ngtcp2/ngtcp2) + +[quiche](https://github.com/cloudflare/quiche) - **EXPERIMENTAL** + +[msh3](https://github.com/nibanks/msh3) (with [msquic](https://github.com/microsoft/msquic)) - **EXPERIMENTAL** + +## Experimental + +HTTP/3 support in curl is considered **EXPERIMENTAL** until further notice +when built to use *quiche* or *msh3*. Only the *ngtcp2* backend is not +experimental. + +Further development and tweaking of the HTTP/3 support in curl will happen in +the master branch using pull-requests, just like ordinary changes. + +To fix before we remove the experimental label: + + - the used QUIC library needs to consider itself non-beta + - it's fine to "leave" individual backends as experimental if necessary + +# ngtcp2 version + +Building curl with ngtcp2 involves 3 components: `ngtcp2` itself, `nghttp3` and a QUIC supporting TLS library. The supported TLS libraries are covered below. + + * `ngtcp2`: v1.1.0 + * `nghttp3`: v1.1.0 + +## Build with quictls + +OpenSSL does not offer the required APIs for building a QUIC client. You need +to use a TLS library that has such APIs and that works with *ngtcp2*. + +Build quictls + + % git clone --depth 1 -b openssl-3.1.4+quic https://github.com/quictls/openssl + % cd openssl + % ./config enable-tls1_3 --prefix= + % make + % make install + +Build nghttp3 + + % cd .. + % git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3 + % cd nghttp3 + % autoreconf -fi + % ./configure --prefix= --enable-lib-only + % make + % make install + +Build ngtcp2 + + % cd .. + % git clone -b v1.1.0 https://github.com/ngtcp2/ngtcp2 + % cd ngtcp2 + % autoreconf -fi + % ./configure PKG_CONFIG_PATH=/lib/pkgconfig:/lib/pkgconfig LDFLAGS="-Wl,-rpath,/lib" --prefix= --enable-lib-only + % make + % make install + +Build curl + + % cd .. + % git clone https://github.com/curl/curl + % cd curl + % autoreconf -fi + % LDFLAGS="-Wl,-rpath,/lib" ./configure --with-openssl= --with-nghttp3= --with-ngtcp2= + % make + % make install + +For OpenSSL 3.0.0 or later builds on Linux for x86_64 architecture, substitute all occurrences of "/lib" with "/lib64" + +## Build with GnuTLS + +Build GnuTLS + + % git clone --depth 1 https://gitlab.com/gnutls/gnutls.git + % cd gnutls + % ./bootstrap + % ./configure --prefix= + % make + % make install + +Build nghttp3 + + % cd .. + % git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3 + % cd nghttp3 + % autoreconf -fi + % ./configure --prefix= --enable-lib-only + % make + % make install + +Build ngtcp2 + + % cd .. + % git clone -b v1.1.0 https://github.com/ngtcp2/ngtcp2 + % cd ngtcp2 + % autoreconf -fi + % ./configure PKG_CONFIG_PATH=/lib/pkgconfig:/lib/pkgconfig LDFLAGS="-Wl,-rpath,/lib" --prefix= --enable-lib-only --with-gnutls + % make + % make install + +Build curl + + % cd .. + % git clone https://github.com/curl/curl + % cd curl + % autoreconf -fi + % ./configure --with-gnutls= --with-nghttp3= --with-ngtcp2= + % make + % make install + +## Build with wolfSSL + +Build wolfSSL + + % git clone https://github.com/wolfSSL/wolfssl.git + % cd wolfssl + % autoreconf -fi + % ./configure --prefix= --enable-quic --enable-session-ticket --enable-earlydata --enable-psk --enable-harden --enable-altcertchains + % make + % make install + +Build nghttp3 + + % cd .. + % git clone -b v1.1.0 https://github.com/ngtcp2/nghttp3 + % cd nghttp3 + % autoreconf -fi + % ./configure --prefix= --enable-lib-only + % make + % make install + +Build ngtcp2 + + % cd .. + % git clone -b v1.1.0 https://github.com/ngtcp2/ngtcp2 + % cd ngtcp2 + % autoreconf -fi + % ./configure PKG_CONFIG_PATH=/lib/pkgconfig:/lib/pkgconfig LDFLAGS="-Wl,-rpath,/lib" --prefix= --enable-lib-only --with-wolfssl + % make + % make install + +Build curl + + % cd .. + % git clone https://github.com/curl/curl + % cd curl + % autoreconf -fi + % ./configure --with-wolfssl= --with-nghttp3= --with-ngtcp2= + % make + % make install + +# quiche version + +quiche support is **EXPERIMENTAL** + +Since the quiche build manages its dependencies, curl can be built against the latest version. You are *probably* able to build against their main branch, but in case of problems, we recommend their latest release tag. + +## build + +Build quiche and BoringSSL: + + % git clone --recursive https://github.com/cloudflare/quiche + % cd quiche + % cargo build --package quiche --release --features ffi,pkg-config-meta,qlog + % mkdir quiche/deps/boringssl/src/lib + % ln -vnf $(find target/release -name libcrypto.a -o -name libssl.a) quiche/deps/boringssl/src/lib/ + +Build curl: + + % cd .. + % git clone https://github.com/curl/curl + % cd curl + % autoreconf -fi + % ./configure LDFLAGS="-Wl,-rpath,$PWD/../quiche/target/release" --with-openssl=$PWD/../quiche/quiche/deps/boringssl/src --with-quiche=$PWD/../quiche/target/release + % make + % make install + + If `make install` results in `Permission denied` error, you will need to prepend it with `sudo`. + +# msh3 (msquic) version + +**Note**: The msquic HTTP/3 backend is immature and is not properly functional +one as of September 2023. Feel free to help us test it and improve it, but +there is no point in filing bugs about it just yet. + +msh3 support is **EXPERIMENTAL** + +## Build Linux (with quictls fork of OpenSSL) + +Build msh3: + + % git clone -b v0.6.0 --depth 1 --recursive https://github.com/nibanks/msh3 + % cd msh3 && mkdir build && cd build + % cmake -G 'Unix Makefiles' -DCMAKE_BUILD_TYPE=RelWithDebInfo .. + % cmake --build . + % cmake --install . + +Build curl: + + % git clone https://github.com/curl/curl + % cd curl + % autoreconf -fi + % ./configure LDFLAGS="-Wl,-rpath,/usr/local/lib" --with-msh3=/usr/local --with-openssl + % make + % make install + +Run from `/usr/local/bin/curl`. + +## Build Windows + +Build msh3: + + % git clone -b v0.6.0 --depth 1 --recursive https://github.com/nibanks/msh3 + % cd msh3 && mkdir build && cd build + % cmake -G 'Visual Studio 17 2022' -DCMAKE_BUILD_TYPE=RelWithDebInfo .. + % cmake --build . --config Release + % cmake --install . --config Release + +**Note** - On Windows, Schannel will be used for TLS support by default. If +you with to use (the quictls fork of) OpenSSL, specify the +`-DQUIC_TLS=openssl` option to the generate command above. Also note that +OpenSSL brings with it an additional set of build dependencies not specified +here. + +Build curl (in [Visual Studio Command +prompt](../winbuild/README.md#open-a-command-prompt)): + + % git clone https://github.com/curl/curl + % cd curl/winbuild + % nmake /f Makefile.vc mode=dll WITH_MSH3=dll MSH3_PATH="C:/Program Files/msh3" MACHINE=x64 + +**Note** - If you encounter a build error with `tool_hugehelp.c` being +missing, rename `tool_hugehelp.c.cvs` in the same directory to +`tool_hugehelp.c` and then run `nmake` again. + +Run in the `C:/Program Files/msh3/lib` directory, copy `curl.exe` to that +directory, or copy `msquic.dll` and `msh3.dll` from that directory to the +`curl.exe` directory. For example: + + % C:\Program Files\msh3\lib> F:\curl\builds\libcurl-vc-x64-release-dll-ipv6-sspi-schannel-msh3\bin\curl.exe --http3 https://curl.se/ + +# `--http3` + +Use only HTTP/3: + + curl --http3-only https://example.org:4433/ + +Use HTTP/3 with fallback to HTTP/2 or HTTP/1.1 (see "HTTPS eyeballing" below): + + curl --http3 https://example.org:4433/ + +Upgrade via Alt-Svc: + + curl --alt-svc altsvc.cache https://curl.se/ + +See this [list of public HTTP/3 servers](https://bagder.github.io/HTTP3-test/) + +### HTTPS eyeballing + +With option `--http3` curl will attempt earlier HTTP versions as well should +the connect attempt via HTTP/3 not succeed "fast enough". This strategy is +similar to IPv4/6 happy eyeballing where the alternate address family is used +in parallel after a short delay. + +The IPv4/6 eyeballing has a default of 200ms and you may override that via +`--happy-eyeballs-timeout-ms value`. Since HTTP/3 is still relatively new, we +decided to use this timeout also for the HTTP eyeballing - with a slight +twist. + +The `happy-eyeballs-timeout-ms` value is the **hard** timeout, meaning after +that time expired, a TLS connection is opened in addition to negotiate HTTP/2 +or HTTP/1.1. At half of that value - currently - is the **soft** timeout. The +soft timeout fires, when there has been **no data at all** seen from the +server on the HTTP/3 connection. + +So, without you specifying anything, the hard timeout is 200ms and the soft is 100ms: + + * Ideally, the whole QUIC handshake happens and curl has an HTTP/3 connection + in less than 100ms. + * When QUIC is not supported (or UDP does not work for this network path), no + reply is seen and the HTTP/2 TLS+TCP connection starts 100ms later. + * In the worst case, UDP replies start before 100ms, but drag on. This will + start the TLS+TCP connection after 200ms. + * When the QUIC handshake fails, the TLS+TCP connection is attempted right + away. For example, when the QUIC server presents the wrong certificate. + +The whole transfer only fails, when **both** QUIC and TLS+TCP fail to +handshake or time out. + +Note that all this happens in addition to IP version happy eyeballing. If the +name resolution for the server gives more than one IP address, curl will try +all those until one succeeds - just as with all other protocols. And if those +IP addresses contain both IPv6 and IPv4, those attempts will happen, delayed, +in parallel (the actual eyeballing). + +## Known Bugs + +Check out the [list of known HTTP3 bugs](https://curl.se/docs/knownbugs.html#HTTP3). + +# HTTP/3 Test server + +This is not advice on how to run anything in production. This is for +development and experimenting. + +## Prerequisite(s) + +An existing local HTTP/1.1 server that hosts files. Preferably also a few huge +ones. You can easily create huge local files like `truncate -s=8G 8GB` - they +are huge but do not occupy that much space on disk since they are just big +holes. + +In a Debian setup you can install **apache2**. It runs on port 80 and has a +document root in `/var/www/html`. Download the 8GB file from apache with `curl +localhost/8GB -o dev/null` + +In this description we setup and run an HTTP/3 reverse-proxy in front of the +HTTP/1 server. + +## Setup + +You can select either or both of these server solutions. + +### nghttpx + +Get, build and install **quictls**, **nghttp3** and **ngtcp2** as described +above. + +Get, build and install **nghttp2**: + + git clone https://github.com/nghttp2/nghttp2.git + cd nghttp2 + autoreconf -fi + PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/home/daniel/build-quictls/lib/pkgconfig:/home/daniel/build-nghttp3/lib/pkgconfig:/home/daniel/build-ngtcp2/lib/pkgconfig LDFLAGS=-L/home/daniel/build-quictls/lib CFLAGS=-I/home/daniel/build-quictls/include ./configure --enable-maintainer-mode --prefix=/home/daniel/build-nghttp2 --disable-shared --enable-app --enable-http3 --without-jemalloc --without-libxml2 --without-systemd + make && make install + +Run the local h3 server on port 9443, make it proxy all traffic through to +HTTP/1 on localhost port 80. For local toying, we can just use the test cert +that exists in curl's test dir. + + CERT=$CURLSRC/tests/stunnel.pem + $HOME/bin/nghttpx $CERT $CERT --backend=localhost,80 \ + --frontend="localhost,9443;quic" + +### Caddy + +[Install Caddy](https://caddyserver.com/docs/install). For easiest use, the binary +should be either in your PATH or your current directory. + +Create a `Caddyfile` with the following content: +~~~ +localhost:7443 { + respond "Hello, world! you are using {http.request.proto}" +} +~~~ + +Then run Caddy: + + ./caddy start + +Making requests to `https://localhost:7443` should tell you which protocol is being used. + +You can change the hard-coded response to something more useful by replacing `respond` +with `reverse_proxy` or `file_server`, for example: `reverse_proxy localhost:80` diff --git a/deps/curl/docs/HYPER.md b/deps/curl/docs/HYPER.md new file mode 100644 index 0000000..9932c1b --- /dev/null +++ b/deps/curl/docs/HYPER.md @@ -0,0 +1,73 @@ +# Hyper + +Hyper is a separate HTTP library written in Rust. curl can be told to use this +library as a backend to deal with HTTP. + +## Experimental! + +Hyper support in curl is considered **EXPERIMENTAL** until further notice. It +needs to be explicitly enabled at build-time. + +Further development and tweaking of the Hyper backend support in curl will +happen in the master branch using pull-requests, just like ordinary +changes. + +## Hyper version + +The C API for Hyper is brand new and is still under development. + +## build curl with hyper + +Using Rust 1.64.0 or later, build hyper and enable its C API like this: + + % git clone https://github.com/hyperium/hyper + % cd hyper + % RUSTFLAGS="--cfg hyper_unstable_ffi" cargo rustc --features client,http1,http2,ffi --crate-type cdylib + +Also, `--release` can be added for a release (optimized) build. + +Build curl to use hyper's C API: + + % git clone https://github.com/curl/curl + % cd curl + % autoreconf -fi + % ./configure LDFLAGS="-Wl,-rpath,/target/debug -Wl,-rpath,/target/release" --with-openssl --with-hyper= + % make + +# using Hyper internally + +Hyper is a low level HTTP transport library. curl itself provides all HTTP +headers and Hyper provides all received headers back to curl. + +Therefore, most of the "header logic" in curl as in responding to and acting +on specific input and output headers are done the same way in curl code. + +The API in Hyper delivers received HTTP headers as (cleaned up) name=value +pairs, making it impossible for curl to know the exact byte representation +over the wire with Hyper. + +## Limitations + +The hyper backend does not support + +- `CURLOPT_IGNORE_CONTENT_LENGTH` +- `--raw` and disabling `CURLOPT_HTTP_TRANSFER_DECODING` +- RTSP +- hyper is much stricter about what HTTP header contents it allows +- leading whitespace in first HTTP/1 response header +- HTTP/0.9 +- HTTP/2 upgrade using HTTP:// URLs. Aka 'h2c' +- HTTP/2 in general. Hyper has support for HTTP/2 but the curl side + needs changes so that a `hyper_clientconn` can last for the duration + of a connection. Probably this means turning the Hyper HTTP/2 backend + into a connection filter. + +## Remaining issues + +This backend is still not feature complete with the native backend. Areas that +still need attention and verification include: + +- multiplexed HTTP/2 +- h2 Upgrade: +- receiving HTTP/1 trailers +- sending HTTP/1 trailers diff --git a/deps/curl/docs/INSTALL.cmake b/deps/curl/docs/INSTALL.cmake new file mode 100644 index 0000000..4e7f706 --- /dev/null +++ b/deps/curl/docs/INSTALL.cmake @@ -0,0 +1,89 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + + How To Compile with CMake + +Building with CMake +========================== + This document describes how to compile, build and install curl and libcurl + from source code using the CMake build tool. To build with CMake, you will + of course have to first install CMake. The minimum required version of + CMake is specified in the file CMakeLists.txt found in the top of the curl + source tree. Once the correct version of CMake is installed you can follow + the instructions below for the platform you are building on. + + CMake builds can be configured either from the command line, or from one + of CMake's GUI's. + +Current flaws in the curl CMake build +===================================== + + Missing features in the cmake build: + + - Builds libcurl without large file support + - Does not support all SSL libraries (only OpenSSL, Schannel, + Secure Transport, and mbedTLS, WolfSSL) + - Does not allow different resolver backends (no c-ares build support) + - No RTMP support built + - Does not allow build curl and libcurl debug enabled + - Does not allow a custom CA bundle path + - Does not allow you to disable specific protocols from the build + - Does not find or use krb4 or GSS + - Rebuilds test files too eagerly, but still cannot run the tests + - Does not detect the correct strerror_r flavor when cross-compiling (issue #1123) + + +Command Line CMake +================== + A CMake build of curl is similar to the autotools build of curl. It + consists of the following steps after you have unpacked the source. + + 1. Create an out of source build tree parallel to the curl source + tree and change into that directory + + $ mkdir curl-build + $ cd curl-build + + 2. Run CMake from the build tree, giving it the path to the top of + the curl source tree. CMake will pick a compiler for you. If you + want to specify the compile, you can set the CC environment + variable prior to running CMake. + + $ cmake ../curl + $ make + + 3. Install to default location: + + $ make install + + (The test suite does not work with the cmake build) + +ccmake +========= + CMake comes with a curses based interface called ccmake. To run ccmake on + a curl use the instructions for the command line cmake, but substitute + ccmake ../curl for cmake ../curl. This will bring up a curses interface + with instructions on the bottom of the screen. You can press the "c" key + to configure the project, and the "g" key to generate the project. After + the project is generated, you can run make. + +cmake-gui +========= + CMake also comes with a Qt based GUI called cmake-gui. To configure with + cmake-gui, you run cmake-gui and follow these steps: + 1. Fill in the "Where is the source code" combo box with the path to + the curl source tree. + 2. Fill in the "Where to build the binaries" combo box with the path + to the directory for your build tree, ideally this should not be the + same as the source tree, but a parallel directory called curl-build or + something similar. + 3. Once the source and binary directories are specified, press the + "Configure" button. + 4. Select the native build tool that you want to use. + 5. At this point you can change any of the options presented in the + GUI. Once you have selected all the options you want, click the + "Generate" button. + 6. Run the native build tool that you used CMake to generate. diff --git a/deps/curl/docs/INSTALL.md b/deps/curl/docs/INSTALL.md new file mode 100644 index 0000000..a6780b4 --- /dev/null +++ b/deps/curl/docs/INSTALL.md @@ -0,0 +1,624 @@ +# how to install curl and libcurl + +## Installing Binary Packages + +Lots of people download binary distributions of curl and libcurl. This +document does not describe how to install curl or libcurl using such a binary +package. This document describes how to compile, build and install curl and +libcurl from source code. + +## Building using vcpkg + +You can download and install curl and libcurl using the [vcpkg](https://github.com/Microsoft/vcpkg/) dependency manager: + + git clone https://github.com/Microsoft/vcpkg.git + cd vcpkg + ./bootstrap-vcpkg.sh + ./vcpkg integrate install + vcpkg install curl[tool] + +The curl port in vcpkg is kept up to date by Microsoft team members and +community contributors. If the version is out of date, please [create an issue +or pull request](https://github.com/Microsoft/vcpkg) on the vcpkg repository. + +## Building from git + +If you get your code off a git repository instead of a release tarball, see +the `GIT-INFO` file in the root directory for specific instructions on how to +proceed. + +# Unix + +A normal Unix installation is made in three or four steps (after you have +unpacked the source archive): + + ./configure --with-openssl [--with-gnutls --with-wolfssl] + make + make test (optional) + make install + +(Adjust the configure line accordingly to use the TLS library you want.) + +You probably need to be root when doing the last command. + +Get a full listing of all available configure options by invoking it like: + + ./configure --help + +If you want to install curl in a different file hierarchy than `/usr/local`, +specify that when running configure: + + ./configure --prefix=/path/to/curl/tree + +If you have write permission in that directory, you can do 'make install' +without being root. An example of this would be to make a local install in +your own home directory: + + ./configure --prefix=$HOME + make + make install + +The configure script always tries to find a working SSL library unless +explicitly told not to. If you have OpenSSL installed in the default search +path for your compiler/linker, you do not need to do anything special. If you +have OpenSSL installed in `/usr/local/ssl`, you can run configure like: + + ./configure --with-openssl + +If you have OpenSSL installed somewhere else (for example, `/opt/OpenSSL`) and +you have pkg-config installed, set the pkg-config path first, like this: + + env PKG_CONFIG_PATH=/opt/OpenSSL/lib/pkgconfig ./configure --with-openssl + +Without pkg-config installed, use this: + + ./configure --with-openssl=/opt/OpenSSL + +If you insist on forcing a build without SSL support, you can run configure +like this: + + ./configure --without-ssl + +If you have OpenSSL installed, but with the libraries in one place and the +header files somewhere else, you have to set the `LDFLAGS` and `CPPFLAGS` +environment variables prior to running configure. Something like this should +work: + + CPPFLAGS="-I/path/to/ssl/include" LDFLAGS="-L/path/to/ssl/lib" ./configure + +If you have shared SSL libs installed in a directory where your runtime +linker does not find them (which usually causes configure failures), you can +provide this option to gcc to set a hard-coded path to the runtime linker: + + LDFLAGS=-Wl,-R/usr/local/ssl/lib ./configure --with-openssl + +## Static builds + +To force a static library compile, disable the shared library creation by +running configure like: + + ./configure --disable-shared + +The configure script is primarily done to work with shared/dynamic third party +dependencies. When linking with shared libraries, the dependency "chain" is +handled automatically by the library loader - on all modern systems. + +If you instead link with a static library, you need to provide all the +dependency libraries already at the link command line. + +Figuring out all the dependency libraries for a given library is hard, as it +might involve figuring out the dependencies of the dependencies and they vary +between platforms and change between versions. + +When using static dependencies, the build scripts will mostly assume that you, +the user, will provide all the necessary additional dependency libraries as +additional arguments in the build. With configure, by setting `LIBS` or +`LDFLAGS` on the command line. + +Building statically is not for the faint of heart. + +## Debug + +If you are a curl developer and use gcc, you might want to enable more debug +options with the `--enable-debug` option. + +curl can be built to use a whole range of libraries to provide various useful +services, and configure will try to auto-detect a decent default. But if you +want to alter it, you can select how to deal with each individual library. + +## Select TLS backend + +These options are provided to select the TLS backend to use. + + - AmiSSL: `--with-amissl` + - BearSSL: `--with-bearssl` + - GnuTLS: `--with-gnutls`. + - mbedTLS: `--with-mbedtls` + - OpenSSL: `--with-openssl` (also for BoringSSL, AWS-LC, libressl, and quictls) + - rustls: `--with-rustls` + - Schannel: `--with-schannel` + - Secure Transport: `--with-secure-transport` + - wolfSSL: `--with-wolfssl` + +You can build curl with *multiple* TLS backends at your choice, but some TLS +backends cannot be combined: if you build with an OpenSSL fork (or wolfSSL), +you cannot add another OpenSSL fork (or wolfSSL) simply because they have +conflicting identical symbol names. + +When you build with multiple TLS backends, you can select the active one at +run-time when curl starts up. + +## configure finding libs in wrong directory + +When the configure script checks for third-party libraries, it adds those +directories to the `LDFLAGS` variable and then tries linking to see if it +works. When successful, the found directory is kept in the `LDFLAGS` variable +when the script continues to execute and do more tests and possibly check for +more libraries. + +This can make subsequent checks for libraries wrongly detect another +installation in a directory that was previously added to `LDFLAGS` by another +library check. + +# Windows + +Building for Windows XP is required as a minimum. + +## Building Windows DLLs and C runtime (CRT) linkage issues + + As a general rule, building a DLL with static CRT linkage is highly + discouraged, and intermixing CRTs in the same app is something to avoid at + any cost. + + Reading and comprehending Microsoft Knowledge Base articles KB94248 and + KB140584 is a must for any Windows developer. Especially important is full + understanding if you are not going to follow the advice given above. + + - [How To Use the C Run-Time](https://support.microsoft.com/help/94248/how-to-use-the-c-run-time) + - [Run-Time Library Compiler Options](https://docs.microsoft.com/cpp/build/reference/md-mt-ld-use-run-time-library) + - [Potential Errors Passing CRT Objects Across DLL Boundaries](https://docs.microsoft.com/cpp/c-runtime-library/potential-errors-passing-crt-objects-across-dll-boundaries) + +If your app is misbehaving in some strange way, or it is suffering from memory +corruption, before asking for further help, please try first to rebuild every +single library your app uses as well as your app using the debug +multi-threaded dynamic C runtime. + + If you get linkage errors read section 5.7 of the FAQ document. + +## mingw-w64 + +Make sure that mingw-w64's bin directory is in the search path, for example: + +```cmd +set PATH=c:\mingw-w64\bin;%PATH% +``` + +then run `mingw32-make mingw32` in the root dir. There are other +make targets available to build libcurl with more features, use: + + - `mingw32-make mingw32-zlib` to build with Zlib support; + - `mingw32-make mingw32-ssl-zlib` to build with SSL and Zlib enabled; + - `mingw32-make mingw32-ssh2-ssl-zlib` to build with SSH2, SSL, Zlib; + - `mingw32-make mingw32-ssh2-ssl-sspi-zlib` to build with SSH2, SSL, Zlib + and SSPI support. + +If you have any problems linking libraries or finding header files, be sure +to verify that the provided `Makefile.mk` files use the proper paths, and +adjust as necessary. It is also possible to override these paths with +environment variables, for example: + +```cmd +set ZLIB_PATH=c:\zlib-1.2.12 +set OPENSSL_PATH=c:\openssl-3.0.5 +set LIBSSH2_PATH=c:\libssh2-1.10.0 +``` + +It is also possible to build with other LDAP installations than MS LDAP; +currently it is possible to build with native Win32 OpenLDAP, or with the +*Novell CLDAP* SDK. If you want to use these you need to set these vars: + +```cmd +set CPPFLAGS=-Ic:/openldap/include -DCURL_HAS_OPENLDAP_LDAPSDK +set LDFLAGS=-Lc:/openldap/lib +set LIBS=-lldap -llber +``` + +or for using the Novell SDK: + +```cmd +set CPPFLAGS=-Ic:/openldapsdk/inc -DCURL_HAS_NOVELL_LDAPSDK +set LDFLAGS=-Lc:/openldapsdk/lib/mscvc +set LIBS=-lldapsdk -lldapssl -lldapx +``` + +If you want to enable LDAPS support then append `-ldaps` to the make target. + +## Cygwin + +Almost identical to the Unix installation. Run the configure script in the +curl source tree root with `sh configure`. Make sure you have the `sh` +executable in `/bin/` or you will see the configure fail toward the end. + +Run `make` + +## MS-DOS + +Requires DJGPP in the search path and pointing to the Watt-32 stack via +`WATT_PATH=c:/djgpp/net/watt`. + +Run `make -f Makefile.dist djgpp` in the root curl dir. + +For build configuration options, please see the mingw-w64 section. + +Notes: + + - DJGPP 2.04 beta has a `sscanf()` bug so the URL parsing is not done + properly. Use DJGPP 2.03 until they fix it. + + - Compile Watt-32 (and OpenSSL) with the same version of DJGPP. Otherwise + things go wrong because things like FS-extensions and `errno` values have + been changed between releases. + +## AmigaOS + +Run `make -f Makefile.dist amiga` in the root curl dir. + +For build configuration options, please see the mingw-w64 section. + +## Disabling Specific Protocols in Windows builds + +The configure utility, unfortunately, is not available for the Windows +environment, therefore, you cannot use the various disable-protocol options of +the configure utility on this platform. + +You can use specific defines to disable specific protocols and features. See +[CURL-DISABLE](CURL-DISABLE.md) for the full list. + +If you want to set any of these defines you have the following options: + + - Modify `lib/config-win32.h` + - Modify `lib/curl_setup.h` + - Modify `winbuild/Makefile.vc` + - Modify the "Preprocessor Definitions" in the libcurl project + +Note: The pre-processor settings can be found using the Visual Studio IDE +under "Project -> Properties -> Configuration Properties -> C/C++ -> +Preprocessor". + +## Using BSD-style lwIP instead of Winsock TCP/IP stack in Win32 builds + +In order to compile libcurl and curl using BSD-style lwIP TCP/IP stack it is +necessary to make the definition of the preprocessor symbol `USE_LWIPSOCK` +visible to libcurl and curl compilation processes. To set this definition you +have the following alternatives: + + - Modify `lib/config-win32.h` and `src/config-win32.h` + - Modify `winbuild/Makefile.vc` + - Modify the "Preprocessor Definitions" in the libcurl project + +Note: The pre-processor settings can be found using the Visual Studio IDE +under "Project -> Properties -> Configuration Properties -> C/C++ -> +Preprocessor". + +Once that libcurl has been built with BSD-style lwIP TCP/IP stack support, in +order to use it with your program it is mandatory that your program includes +lwIP header file `` (or another lwIP header that includes this) +before including any libcurl header. Your program does not need the +`USE_LWIPSOCK` preprocessor definition which is for libcurl internals only. + +Compilation has been verified with lwIP 1.4.0. + +This BSD-style lwIP TCP/IP stack support must be considered experimental given +that it has been verified that lwIP 1.4.0 still needs some polish, and libcurl +might yet need some additional adjustment. + +## Important static libcurl usage note + +When building an application that uses the static libcurl library on Windows, +you must add `-DCURL_STATICLIB` to your `CFLAGS`. Otherwise the linker will +look for dynamic import symbols. + +## Legacy Windows and SSL + +Schannel (from Windows SSPI), is the native SSL library in Windows. However, +Schannel in Windows <= XP is unable to connect to servers that +no longer support the legacy handshakes and algorithms used by those +versions. If you will be using curl in one of those earlier versions of +Windows you should choose another SSL backend such as OpenSSL. + +# Apple Platforms (macOS, iOS, tvOS, watchOS, and their simulator counterparts) + +On modern Apple operating systems, curl can be built to use Apple's SSL/TLS +implementation, Secure Transport, instead of OpenSSL. To build with Secure +Transport for SSL/TLS, use the configure option `--with-secure-transport`. + +When Secure Transport is in use, the curl options `--cacert` and `--capath` +and their libcurl equivalents, will be ignored, because Secure Transport uses +the certificates stored in the Keychain to evaluate whether or not to trust +the server. This, of course, includes the root certificates that ship with the +OS. The `--cert` and `--engine` options, and their libcurl equivalents, are +currently unimplemented in curl with Secure Transport. + +In general, a curl build for an Apple `ARCH/SDK/DEPLOYMENT_TARGET` combination +can be taken by providing appropriate values for `ARCH`, `SDK`, `DEPLOYMENT_TARGET` +below and running the commands: + +```bash +# Set these three according to your needs +export ARCH=x86_64 +export SDK=macosx +export DEPLOYMENT_TARGET=10.8 + +export CFLAGS="-arch $ARCH -isysroot $(xcrun -sdk $SDK --show-sdk-path) -m$SDK-version-min=$DEPLOYMENT_TARGET" +./configure --host=$ARCH-apple-darwin --prefix $(pwd)/artifacts --with-secure-transport +make -j8 +make install +``` + +Above will build curl for macOS platform with `x86_64` architecture and `10.8` as deployment target. + +Here is an example for iOS device: + +```bash +export ARCH=arm64 +export SDK=iphoneos +export DEPLOYMENT_TARGET=11.0 + +export CFLAGS="-arch $ARCH -isysroot $(xcrun -sdk $SDK --show-sdk-path) -m$SDK-version-min=$DEPLOYMENT_TARGET" +./configure --host=$ARCH-apple-darwin --prefix $(pwd)/artifacts --with-secure-transport +make -j8 +make install +``` + +Another example for watchOS simulator for macs with Apple Silicon: + +```bash +export ARCH=arm64 +export SDK=watchsimulator +export DEPLOYMENT_TARGET=5.0 + +export CFLAGS="-arch $ARCH -isysroot $(xcrun -sdk $SDK --show-sdk-path) -m$SDK-version-min=$DEPLOYMENT_TARGET" +./configure --host=$ARCH-apple-darwin --prefix $(pwd)/artifacts --with-secure-transport +make -j8 +make install +``` + +In all above, the built libraries and executables can be found in the +`artifacts` folder. + +# Android + +When building curl for Android it's recommended to use a Linux/macOS environment +since using curl's `configure` script is the easiest way to build curl +for Android. Before you can build curl for Android, you need to install the +Android NDK first. This can be done using the SDK Manager that is part of +Android Studio. Once you have installed the Android NDK, you need to figure out +where it has been installed and then set up some environment variables before +launching `configure`. On macOS, those variables could look like this to compile +for `aarch64` and API level 29: + +```bash +export ANDROID_NDK_HOME=~/Library/Android/sdk/ndk/25.1.8937393 # Point into your NDK. +export HOST_TAG=darwin-x86_64 # Same tag for Apple Silicon. Other OS values here: https://developer.android.com/ndk/guides/other_build_systems#overview +export TOOLCHAIN=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/$HOST_TAG +export AR=$TOOLCHAIN/bin/llvm-ar +export AS=$TOOLCHAIN/bin/llvm-as +export CC=$TOOLCHAIN/bin/aarch64-linux-android21-clang +export CXX=$TOOLCHAIN/bin/aarch64-linux-android21-clang++ +export LD=$TOOLCHAIN/bin/ld +export RANLIB=$TOOLCHAIN/bin/llvm-ranlib +export STRIP=$TOOLCHAIN/bin/llvm-strip +``` + +When building on Linux or targeting other API levels or architectures, you need +to adjust those variables accordingly. After that you can build curl like this: + + ./configure --host aarch64-linux-android --with-pic --disable-shared + +Note that this will not give you SSL/TLS support. If you need SSL/TLS, you have +to build curl against a SSL/TLS layer, e.g. OpenSSL, because it's impossible for +curl to access Android's native SSL/TLS layer. To build curl for Android using +OpenSSL, follow the OpenSSL build instructions and then install `libssl.a` and +`libcrypto.a` to `$TOOLCHAIN/sysroot/usr/lib` and copy `include/openssl` to +`$TOOLCHAIN/sysroot/usr/include`. Now you can build curl for Android using +OpenSSL like this: + +```bash +LIBS="-lssl -lcrypto -lc++" # For OpenSSL/BoringSSL. In general, you will need to the SSL/TLS layer's transitive dependencies if you are linking statically. +./configure --host aarch64-linux-android --with-pic --disable-shared --with-openssl="$TOOLCHAIN/sysroot/usr" +``` + +# IBM i + +For IBM i (formerly OS/400), you can use curl in two different ways: + +- Natively, running in the **ILE**. The obvious use is being able to call curl + from ILE C or RPG applications. + - You will need to build this from source. See `packages/OS400/README` for + the ILE specific build instructions. +- In the **PASE** environment, which runs AIX programs. curl will be built as + it would be on AIX. + - IBM provides builds of curl in their Yum repository for PASE software. + - To build from source, follow the Unix instructions. + +There are some additional limitations and quirks with curl on this platform; +they affect both environments. + +## Multi-threading notes + +By default, jobs in IBM i will not start with threading enabled. (Exceptions +include interactive PASE sessions started by `QP2TERM` or SSH.) If you use +curl in an environment without threading when options like asynchronous DNS +were enabled, you will get messages like: + +``` +getaddrinfo() thread failed to start +``` + +Do not panic. curl and your program are not broken. You can fix this by: + +- Set the environment variable `QIBM_MULTI_THREADED` to `Y` before starting + your program. This can be done at whatever scope you feel is appropriate. +- Alternatively, start the job with the `ALWMLTTHD` parameter set to `*YES`. + +# Cross compile + +Download and unpack the curl package. + +`cd` to the new directory. (e.g. `cd curl-7.12.3`) + +Set environment variables to point to the cross-compile toolchain and call +configure with any options you need. Be sure and specify the `--host` and +`--build` parameters at configuration time. The following script is an example +of cross-compiling for the IBM 405GP PowerPC processor using the toolchain on +Linux. + +```bash +#! /bin/sh + +export PATH=$PATH:/opt/hardhat/devkit/ppc/405/bin +export CPPFLAGS="-I/opt/hardhat/devkit/ppc/405/target/usr/include" +export AR=ppc_405-ar +export AS=ppc_405-as +export LD=ppc_405-ld +export RANLIB=ppc_405-ranlib +export CC=ppc_405-gcc +export NM=ppc_405-nm + +./configure --target=powerpc-hardhat-linux + --host=powerpc-hardhat-linux + --build=i586-pc-linux-gnu + --prefix=/opt/hardhat/devkit/ppc/405/target/usr/local + --exec-prefix=/usr/local +``` + +You may also need to provide a parameter like `--with-random=/dev/urandom` to +configure as it cannot detect the presence of a random number generating +device for a target system. The `--prefix` parameter specifies where curl +will be installed. If `configure` completes successfully, do `make` and `make +install` as usual. + +In some cases, you may be able to simplify the above commands to as little as: + + ./configure --host=ARCH-OS + +# REDUCING SIZE + +There are a number of configure options that can be used to reduce the size of +libcurl for embedded applications where binary size is an important factor. +First, be sure to set the `CFLAGS` variable when configuring with any relevant +compiler optimization flags to reduce the size of the binary. For gcc, this +would mean at minimum the -Os option, and potentially the `-march=X`, +`-mdynamic-no-pic` and `-flto` options as well, e.g. + + ./configure CFLAGS='-Os' LDFLAGS='-Wl,-Bsymbolic'... + +Note that newer compilers often produce smaller code than older versions +due to improved optimization. + +Be sure to specify as many `--disable-` and `--without-` flags on the +configure command-line as you can to disable all the libcurl features that you +know your application is not going to need. Besides specifying the +`--disable-PROTOCOL` flags for all the types of URLs your application will not +use, here are some other flags that can reduce the size of the library by +disabling support for some feature: + + - `--disable-alt-svc` (HTTP Alt-Svc) + - `--disable-ares` (the C-ARES DNS library) + - `--disable-cookies` (HTTP cookies) + - `--disable-basic-auth` (cryptographic authentication) + - `--disable-bearer-auth` (cryptographic authentication) + - `--disable-digest-auth` (cryptographic authentication) + - `--disable-kerberos-auth` (cryptographic authentication) + - `--disable-negotiate-auth` (cryptographic authentication) + - `--disable-aws` (cryptographic authentication) + - `--disable-dateparse` (date parsing for time conditionals) + - `--disable-dnsshuffle` (internal server load spreading) + - `--disable-doh` (DNS-over-HTTP) + - `--disable-get-easy-options` (lookup easy options at runtime) + - `--disable-hsts` (HTTP Strict Transport Security) + - `--disable-http-auth` (all HTTP authentication) + - `--disable-ipv6` (IPv6) + - `--disable-libcurl-option` (--libcurl C code generation support) + - `--disable-manual` (built-in documentation) + - `--disable-netrc` (.netrc file) + - `--disable-ntlm-wb` (NTLM WinBind) + - `--disable-progress-meter` (graphical progress meter in library) + - `--disable-proxy` (HTTP and SOCKS proxies) + - `--disable-pthreads` (multi-threading) + - `--disable-socketpair` (socketpair for asynchronous name resolving) + - `--disable-threaded-resolver` (threaded name resolver) + - `--disable-tls-srp` (Secure Remote Password authentication for TLS) + - `--disable-unix-sockets` (UNIX sockets) + - `--disable-verbose` (eliminates debugging strings and error code strings) + - `--disable-versioned-symbols` (versioned symbols) + - `--enable-symbol-hiding` (eliminates unneeded symbols in the shared library) + - `--without-brotli` (Brotli on-the-fly decompression) + - `--without-libpsl` (Public Suffix List in cookies) + - `--without-nghttp2` (HTTP/2 using nghttp2) + - `--without-ngtcp2` (HTTP/2 using ngtcp2) + - `--without-zstd` (Zstd on-the-fly decompression) + - `--without-libidn2` (internationalized domain names) + - `--without-librtmp` (RTMP) + - `--without-ssl` (SSL/TLS) + - `--without-zlib` (on-the-fly decompression) + +The GNU compiler and linker have a number of options that can reduce the +size of the libcurl dynamic libraries on some platforms even further. +Specify them by providing appropriate `CFLAGS` and `LDFLAGS` variables on +the configure command-line, e.g. + + CFLAGS="-Os -ffunction-sections -fdata-sections + -fno-unwind-tables -fno-asynchronous-unwind-tables -flto" + LDFLAGS="-Wl,-s -Wl,-Bsymbolic -Wl,--gc-sections" + +Be sure also to strip debugging symbols from your binaries after compiling +using 'strip' (or the appropriate variant if cross-compiling). If space is +really tight, you may be able to remove some unneeded sections of the shared +library using the -R option to objcopy (e.g. the .comment section). + +Using these techniques it is possible to create a basic HTTP-only libcurl +shared library for i386 Linux platforms that is only 133 KiB in size +(as of libcurl version 7.80.0, using gcc 11.2.0). + +You may find that statically linking libcurl to your application will result +in a lower total size than dynamically linking. + +Note that the curl test harness can detect the use of some, but not all, of +the `--disable` statements suggested above. Use will cause tests relying on +those features to fail. The test harness can be manually forced to skip the +relevant tests by specifying certain key words on the `runtests.pl` command +line. Following is a list of appropriate key words for those configure options +that are not automatically detected: + + - `--disable-cookies` !cookies + - `--disable-dateparse` !RETRY-AFTER !`CURLOPT_TIMECONDITION` !`CURLINFO_FILETIME` !`If-Modified-Since` !`curl_getdate` !`-z` + - `--disable-libcurl-option` !`--libcurl` + - `--disable-verbose` !verbose\ logs + +# Ports + +This is a probably incomplete list of known CPU architectures and operating +systems that curl has been compiled for. If you know a system curl compiles +and runs on, that is not listed, please let us know! + +## 101 Operating Systems + + AIX, AmigaOS, Android, ArcoOS, Aros, Atari FreeMiNT, BeOS, Blackberry 10, + Blackberry Tablet OS, Cell OS, CheriBSD, Chrome OS, Cisco IOS, DG/UX, + Dragonfly BSD, DR DOS, eCOS, FreeBSD, FreeDOS, FreeRTOS, Fuchsia, Garmin OS, + Genode, Haiku, HardenedBSD, HP-UX, Hurd, Illumos, Integrity, iOS, ipadOS, IRIX, + Linux, Lua RTOS, Mac OS 9, macOS, Mbed, Meego, Micrium, MINIX, Moblin, MorphOS, + MPE/iX, MS-DOS, NCR MP-RAS, NetBSD, Netware, NextStep, Nintendo Switch, + NonStop OS, NuttX, OpenBSD, OpenStep, Orbis OS, OS/2, OS/400, OS21, Plan 9, + PlayStation Portable, QNX, Qubes OS, ReactOS, Redox, RICS OS, ROS, RTEMS, + Sailfish OS, SCO Unix, Serenity, SINIX-Z, SkyOS, Solaris, Sortix, SunOS, + Syllable OS, Symbian, Tizen, TPF, Tru64, tvOS, ucLinux, Ultrix, UNICOS, + UnixWare, VMS, vxWorks, watchOS, Wear OS, WebOS, Wii system software, Wii U, + Windows, Windows CE, Xbox System, Xenix, Zephyr, z/OS, z/TPF, z/VM, z/VSE + +## 28 CPU Architectures + + Alpha, ARC, ARM, AVR32, C-SKY, CompactRISC, Elbrus, ETRAX, HP-PA, Itanium, + LoongArch, m68k, m88k, MicroBlaze, MIPS, Nios, OpenRISC, POWER, PowerPC, + RISC-V, s390, SH4, SPARC, Tilera, VAX, x86, Xtensa, z/arch diff --git a/deps/curl/docs/INTERNALS.md b/deps/curl/docs/INTERNALS.md new file mode 100644 index 0000000..d7513a8 --- /dev/null +++ b/deps/curl/docs/INTERNALS.md @@ -0,0 +1,56 @@ +# curl internals + +The canonical libcurl internals documentation is now in the [everything +curl](https://everything.curl.dev/internals) book. This file lists supported +versions of libs and build tools. + +## Portability + + We write curl and libcurl to compile with C89 compilers on 32-bit and up + machines. Most of libcurl assumes more or less POSIX compliance but that is + not a requirement. + + We write libcurl to build and work with lots of third party tools, and we + want it to remain functional and buildable with these and later versions + (older versions may still work but is not what we work hard to maintain): + +## Dependencies + + We aim to support these or later versions. + + - OpenSSL 0.9.7 + - GnuTLS 3.1.10 + - zlib 1.1.4 + - libssh2 1.0 + - c-ares 1.16.0 + - libidn2 2.0.0 + - wolfSSL 2.0.0 + - OpenLDAP 2.0 + - MIT Kerberos 1.2.4 + - Heimdal ? + - nghttp2 1.15.0 + - WinSock 2.2 (on Windows 95+ and Windows CE .NET 4.1+) + +## Build tools + + When writing code (mostly for generating stuff included in release tarballs) + we use a few "build tools" and we make sure that we remain functional with + these versions: + + - GNU Libtool 1.4.2 + - GNU Autoconf 2.59 + - GNU Automake 1.7 + - GNU M4 1.4 + - perl 5.6 + - roffit 0.5 + - nroff any version that supports `-man [in] [out]` + - cmake 3.7 + +Library Symbols +=============== + + All symbols used internally in libcurl must use a `Curl_` prefix if they are + used in more than a single file. Single-file symbols must be made static. + Public ("exported") symbols must use a `curl_` prefix. Public API functions + are marked with `CURL_EXTERN` in the public header files so that all others + can be hidden on platforms where this is possible. diff --git a/deps/curl/docs/IPFS.md b/deps/curl/docs/IPFS.md new file mode 100644 index 0000000..24bba8b --- /dev/null +++ b/deps/curl/docs/IPFS.md @@ -0,0 +1,82 @@ +# IPFS +For an overview about IPFS, visit the [IPFS project site](https://ipfs.tech/). + +In IPFS there are two protocols. IPFS and IPNS (their workings are explained in detail [here](https://docs.ipfs.tech/concepts/)). The ideal way to access data on the IPFS network is through those protocols. For example to access the Big Buck Bunny video the ideal way to access it is like: `ipfs://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi` + +## IPFS Gateways + +IPFS Gateway acts as a bridge between traditional HTTP clients and IPFS. +IPFS Gateway specifications of HTTP semantics can be found [here](https://specs.ipfs.tech/http-gateways/). + +### Deserialized responses + +By default, a gateway acts as a bridge between traditional HTTP clients and IPFS and performs necessary hash verification and deserialization. Through such gateway, users can download files, directories, and other content-addressed data stored with IPFS or IPNS as if they were stored in a traditional web server. + +### Verifiable responses + +By explicitly requesting [application/vnd.ipld.raw](https://www.iana.org/assignments/media-types/application/vnd.ipld.raw) or [application/vnd.ipld.car](https://www.iana.org/assignments/media-types/application/vnd.ipld.car) responses, by means defined in [Trustless Gateway Specification](https://specs.ipfs.tech/http-gateways/trustless-gateway/), the user is able to fetch raw content-addressed data and [perform hash verification themselves](https://docs.ipfs.tech/reference/http/gateway/#trustless-verifiable-retrieval). + +This enables users to use untrusted, public gateways without worrying they might return invalid/malicious bytes. + +## IPFS and IPNS protocol handling +There are various ways to access data from the IPFS network. One such way is through the concept of public "[gateways](https://docs.ipfs.tech/concepts/ipfs-gateway/#overview)". The short version is that entities can offer gateway services. An example here that is hosted by Protocol Labs (who also makes IPFS) is `dweb.link` and `ipfs.io`. Both sites expose gateway functionality. Getting a file through `ipfs.io` looks like this: `https://ipfs.io/ipfs/bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi` + +If you were to be [running your own IPFS node](https://docs.ipfs.tech/how-to/command-line-quick-start/) then you, by default, also have a [local gateway](https://specs.ipfs.tech/http-gateways/) running. In it's default configuration the earlier example would then also work in this link: `http://127.0.0.1:8080/ipfs/bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi` + +## cURL handling of the IPFS protocols +The IPFS integration in cURL hides this gateway logic for you. So instead of providing a full URL to a file on IPFS like this: +``` +curl http://127.0.0.1:8080/ipfs/bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi +``` + +You can provide it with the IPFS protocol instead: +``` +curl ipfs://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi +``` + +With the IPFS protocol way of asking a file, cURL still needs to know the gateway. curl essentially just rewrites the IPFS based URL to a gateway URL. + +### IPFS_GATEWAY environment variable +If the `IPFS_GATEWAY` environment variable is found, it's value is used as gateway. + +### Automatic gateway detection +When you provide no additional details to cURL then cURL will: + +1. First look for the `IPFS_GATEWAY` environment variable and use that if it's set. +2. Look for the file: `~/.ipfs/gateway`. If it can find that file then it means that you have a local gateway running and that file contains the URL to your local gateway. + +If cURL fails you'll be presented with an error message and a link to this page to the option most applicable to solving the issue. + +### `--ipfs-gateway` argument +You can also provide a `--ipfs-gateway` argument to cURL. This overrules any other gateway setting. curl won't fallback to the other options if the provided gateway didn't work. + +## Gateway redirects +A gateway could redirect to another place. For example, `dweb.link` redirects [path based](https://docs.ipfs.tech/how-to/address-ipfs-on-web/#path-gateway) requests to [subdomain based](https://docs.ipfs.tech/how-to/address-ipfs-on-web/#subdomain-gateway) ones. So a request to: +``` +curl ipfs://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi --ipfs-gateway https://dweb.link +``` +Which would be translated to: +``` +https://dweb.link/ipfs/bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi +``` +Will redirect to: +``` +https://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi.ipfs.dweb.link +``` +If you trust this behavior from your gateway of choice then passing the `-L` option will follow the redirect. + +## Error messages and hints +Depending on the arguments, cURL could present the user with an error. + +### Gateway file and environment variable +cURL tried to look for the file: `~/.ipfs/gateway` but couldn't find it. It also tried to look for the `IPFS_GATEWAY` environment variable but couldn't find that either. This happens when no extra arguments are passed to cURL and letting it try to figure it out [automatically](#automatic-gateway-detection). + +Any IPFS implementation that has gateway support should expose it's URL in `~/.ipfs/gateway`. If you are already running a gateway, make sure it exposes the file where cURL expects to find it. + +Alternatively you could set the `IPFS_GATEWAY` environment variable or pass the `--ipfs-gateway` flag to the cURL command. + +### Malformed gateway URL +The command executed evaluates in an invalid URL. This could be anywhere in the URL, but a likely point is a wrong gateway URL. + +Inspect the URL set via the `IPFS_GATEWAY` environment variable or passed with the `--ipfs-gateway` flag. +Alternatively opt to go for the [automatic](#automatic-gateway-detection) gateway detection. diff --git a/deps/curl/docs/KNOWN_BUGS b/deps/curl/docs/KNOWN_BUGS new file mode 100644 index 0000000..e52774a --- /dev/null +++ b/deps/curl/docs/KNOWN_BUGS @@ -0,0 +1,604 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + + Known Bugs + +These are problems and bugs known to exist at the time of this release. Feel +free to join in and help us correct one or more of these. Also be sure to +check the changelog of the current development status, as one or more of these +problems may have been fixed or changed somewhat since this was written. + + 1. HTTP + 1.2 hyper is slow + 1.5 Expect-100 meets 417 + + 2. TLS + 2.3 Unable to use PKCS12 certificate with Secure Transport + 2.4 Secure Transport will not import PKCS#12 client certificates without a password + 2.5 Client cert handling with Issuer DN differs between backends + 2.7 Client cert (MTLS) issues with Schannel + 2.11 Schannel TLS 1.2 handshake bug in old Windows versions + 2.12 FTPS with Schannel times out file list operation + 2.13 CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel + + 3. Email protocols + 3.1 IMAP SEARCH ALL truncated response + 3.2 No disconnect command + 3.3 POP3 expects "CRLF.CRLF" eob for some single-line responses + 3.4 AUTH PLAIN for SMTP is not working on all servers + 3.5 APOP authentication fails on POP3 + + 4. Command line + + 5. Build and portability issues + 5.1 OS400 port requires deprecated IBM library + 5.2 curl-config --libs contains private details + 5.3 building for old macOS fails with gcc + 5.5 cannot handle Unicode arguments in non-Unicode builds on Windows + 5.6 cygwin: make install installs curl-config.1 twice + 5.9 Utilize Requires.private directives in libcurl.pc + 5.11 configure --with-gssapi with Heimdal is ignored on macOS + 5.12 flaky CI builds + 5.13 long paths are not fully supported on Windows + 5.14 Windows Unicode builds use homedir in current locale + + 6. Authentication + 6.1 NTLM authentication and unicode + 6.2 MIT Kerberos for Windows build + 6.3 NTLM in system context uses wrong name + 6.5 NTLM does not support password with § character + 6.6 libcurl can fail to try alternatives with --proxy-any + 6.7 Do not clear digest for single realm + 6.9 SHA-256 digest not supported in Windows SSPI builds + 6.10 curl never completes Negotiate over HTTP + 6.11 Negotiate on Windows fails + 6.12 cannot use Secure Transport with Crypto Token Kit + 6.13 Negotiate against Hadoop HDFS + + 7. FTP + 7.3 FTP with NOBODY and FAILONERROR + 7.4 FTP with ACCT + 7.11 FTPS upload data loss with TLS 1.3 + 7.12 FTPS directory listing hangs on Windows with Schannel + + 9. SFTP and SCP + 9.1 SFTP does not do CURLOPT_POSTQUOTE correct + 9.2 wolfssh: publickey auth does not work + 9.3 Remote recursive folder creation with SFTP + 9.4 libssh blocking and infinite loop problem + 9.5 cygwin: "WARNING: UNPROTECTED PRIVATE KEY FILE!" + + 10. SOCKS + 10.3 FTPS over SOCKS + + 11. Internals + 11.2 error buffer not set if connection to multiple addresses fails + 11.4 HTTP test server 'connection-monitor' problems + 11.5 Connection information when using TCP Fast Open + + 12. LDAP + 12.1 OpenLDAP hangs after returning results + 12.2 LDAP on Windows does authentication wrong? + 12.3 LDAP on Windows does not work + 12.4 LDAPS requests to ActiveDirectory server hang + + 13. TCP/IP + 13.2 Trying local ports fails on Windows + + 15. CMake + 15.1 cmake outputs: no version information available + 15.2 support build with GnuTLS + 15.3 unusable tool_hugehelp.c with MinGW + 15.4 build docs/curl.1 + 15.6 uses -lpthread instead of Threads::Threads + 15.7 generated .pc file contains strange entries + 15.8 libcurl.pc uses absolute library paths + 15.11 ExternalProject_Add does not set CURL_CA_PATH + 15.13 CMake build with MIT Kerberos does not work + + 16. aws-sigv4 + 16.1 aws-sigv4 does not sign requests with * correctly + 16.6 aws-sigv4 does not behave well with AWS VPC Lattice + + 17. HTTP/2 + 17.2 HTTP/2 frames while in the connection pool kill reuse + 17.3 ENHANCE_YOUR_CALM causes infinite retries + + 18. HTTP/3 + 18.1 connection migration does not work + +============================================================================== + +1. HTTP + +1.2 hyper is slow + + When curl is built to use hyper for HTTP, it is unnecessary slow. + + https://github.com/curl/curl/issues/11203 + +1.5 Expect-100 meets 417 + + If an upload using Expect: 100-continue receives an HTTP 417 response, it + ought to be automatically resent without the Expect:. A workaround is for + the client application to redo the transfer after disabling Expect:. + https://curl.se/mail/archive-2008-02/0043.html + +2. TLS + +2.3 Unable to use PKCS12 certificate with Secure Transport + + See https://github.com/curl/curl/issues/5403 + +2.4 Secure Transport will not import PKCS#12 client certificates without a password + + libcurl calls SecPKCS12Import with the PKCS#12 client certificate, but that + function rejects certificates that do not have a password. + https://github.com/curl/curl/issues/1308 + +2.5 Client cert handling with Issuer DN differs between backends + + When the specified client certificate does not match any of the + server-specified DNs, the OpenSSL and GnuTLS backends behave differently. + The github discussion may contain a solution. + + See https://github.com/curl/curl/issues/1411 + +2.7 Client cert (MTLS) issues with Schannel + + See https://github.com/curl/curl/issues/3145 + +2.11 Schannel TLS 1.2 handshake bug in old Windows versions + + In old versions of Windows such as 7 and 8.1 the Schannel TLS 1.2 handshake + implementation likely has a bug that can rarely cause the key exchange to + fail, resulting in error SEC_E_BUFFER_TOO_SMALL or SEC_E_MESSAGE_ALTERED. + + https://github.com/curl/curl/issues/5488 + +2.12 FTPS with Schannel times out file list operation + + "Instead of the command completing, it just sits there until the timeout + expires." - the same command line seems to work with other TLS backends and + other operating systems. See https://github.com/curl/curl/issues/5284. + +2.13 CURLOPT_CERTINFO results in CURLE_OUT_OF_MEMORY with Schannel + + https://github.com/curl/curl/issues/8741 + +3. Email protocols + +3.1 IMAP SEARCH ALL truncated response + + IMAP "SEARCH ALL" truncates output on large boxes. "A quick search of the + code reveals that pingpong.c contains some truncation code, at line 408, when + it deems the server response to be too large truncating it to 40 characters" + https://curl.se/bug/view.cgi?id=1366 + +3.2 No disconnect command + + The disconnect commands (LOGOUT and QUIT) may not be sent by IMAP, POP3 and + SMTP if a failure occurs during the authentication phase of a connection. + +3.3 POP3 expects "CRLF.CRLF" eob for some single-line responses + + You have to tell libcurl not to expect a body, when dealing with one line + response commands. Please see the POP3 examples and test cases which show + this for the NOOP and DELE commands. https://curl.se/bug/?i=740 + +3.4 AUTH PLAIN for SMTP is not working on all servers + + Specifying "--login-options AUTH=PLAIN" on the command line does not seem to + work correctly. + + See https://github.com/curl/curl/issues/4080 + +3.5 APOP authentication fails on POP3 + + See https://github.com/curl/curl/issues/10073 + +4. Command line + +5. Build and portability issues + +5.1 OS400 port requires deprecated IBM library + + curl for OS400 requires QADRT to build, which provides ASCII wrappers for + libc/POSIX functions in the ILE, but IBM no longer supports or even offers + this library to download. + + See https://github.com/curl/curl/issues/5176 + +5.2 curl-config --libs contains private details + + "curl-config --libs" will include details set in LDFLAGS when configure is + run that might be needed only for building libcurl. Further, curl-config + --cflags suffers from the same effects with CFLAGS/CPPFLAGS. + +5.3 building for old macOS fails with gcc + + Building curl for certain old macOS versions fails when gcc is used. We + command using clang in those cases. + + See https://github.com/curl/curl/issues/11441 + +5.5 cannot handle Unicode arguments in non-Unicode builds on Windows + + If a URL or filename cannot be encoded using the user's current codepage then + it can only be encoded properly in the Unicode character set. Windows uses + UTF-16 encoding for Unicode and stores it in wide characters, however curl + and libcurl are not equipped for that at the moment except when built with + _UNICODE and UNICODE defined. And, except for Cygwin, Windows cannot use UTF-8 + as a locale. + + https://curl.se/bug/?i=345 + https://curl.se/bug/?i=731 + https://curl.se/bug/?i=3747 + +5.6 cygwin: make install installs curl-config.1 twice + + https://github.com/curl/curl/issues/8839 + +5.9 Utilize Requires.private directives in libcurl.pc + + https://github.com/curl/curl/issues/864 + +5.11 configure --with-gssapi with Heimdal is ignored on macOS + + ... unless you also pass --with-gssapi-libs + + https://github.com/curl/curl/issues/3841 + +5.12 flaky CI builds + + We run many CI builds for each commit and PR on github, and especially a + number of the Windows builds are flaky. This means that we rarely get all CI + builds go green and complete without errors. This is unfortunate as it makes + us sometimes miss actual build problems and it is surprising to newcomers to + the project who (rightfully) do not expect this. + + See https://github.com/curl/curl/issues/6972 + +5.13 long paths are not fully supported on Windows + + curl on Windows cannot access long paths (paths longer than 260 characters). + However, as a workaround, the Windows path prefix \\?\ which disables all path + interpretation may work to allow curl to access the path. For example: + \\?\c:\longpath. + + See https://github.com/curl/curl/issues/8361 + +5.14 Windows Unicode builds use homedir in current locale + + The Windows Unicode builds of curl use the current locale, but expect Unicode + UTF-8 encoded paths for internal use such as open, access and stat. The user's + home directory is retrieved via curl_getenv in the current locale and not as + UTF-8 encoded Unicode. + + See https://github.com/curl/curl/pull/7252 and + https://github.com/curl/curl/pull/7281 + +6. Authentication + +6.1 NTLM authentication and unicode + + NTLM authentication involving unicode user name or password only works + properly if built with UNICODE defined together with the Schannel + backend. The original problem was mentioned in: + https://curl.se/mail/lib-2009-10/0024.html + https://curl.se/bug/view.cgi?id=896 + + The Schannel version verified to work as mentioned in + https://curl.se/mail/lib-2012-07/0073.html + +6.2 MIT Kerberos for Windows build + + libcurl fails to build with MIT Kerberos for Windows (KfW) due to KfW's + library header files exporting symbols/macros that should be kept private to + the KfW library. See ticket #5601 at https://krbdev.mit.edu/rt/ + +6.3 NTLM in system context uses wrong name + + NTLM authentication using SSPI (on Windows) when (lib)curl is running in + "system context" will make it use wrong(?) user name - at least when compared + to what winhttp does. See https://curl.se/bug/view.cgi?id=535 + +6.5 NTLM does not support password with § character + + https://github.com/curl/curl/issues/2120 + +6.6 libcurl can fail to try alternatives with --proxy-any + + When connecting via a proxy using --proxy-any, a failure to establish an + authentication will cause libcurl to abort trying other options if the + failed method has a higher preference than the alternatives. As an example, + --proxy-any against a proxy which advertise Negotiate and NTLM, but which + fails to set up Kerberos authentication will not proceed to try authentication + using NTLM. + + https://github.com/curl/curl/issues/876 + +6.7 Do not clear digest for single realm + + https://github.com/curl/curl/issues/3267 + +6.9 SHA-256 digest not supported in Windows SSPI builds + + Windows builds of curl that have SSPI enabled use the native Windows API calls + to create authentication strings. The call to InitializeSecurityContext fails + with SEC_E_QOP_NOT_SUPPORTED which causes curl to fail with CURLE_AUTH_ERROR. + + Microsoft does not document supported digest algorithms and that SEC_E error + code is not a documented error for InitializeSecurityContext (digest). + + https://github.com/curl/curl/issues/6302 + +6.10 curl never completes Negotiate over HTTP + + Apparently it is not working correctly...? + + See https://github.com/curl/curl/issues/5235 + +6.11 Negotiate on Windows fails + + When using --negotiate (or NTLM) with curl on Windows, SSL/TLS handshake + fails despite having a valid kerberos ticket cached. Works without any issue + in Unix/Linux. + + https://github.com/curl/curl/issues/5881 + +6.12 cannot use Secure Transport with Crypto Token Kit + + https://github.com/curl/curl/issues/7048 + +6.13 Negotiate authentication against Hadoop HDFS + + https://github.com/curl/curl/issues/8264 + +7. FTP + +7.3 FTP with NOBODY and FAILONERROR + + It seems sensible to be able to use CURLOPT_NOBODY and CURLOPT_FAILONERROR + with FTP to detect if a file exists or not, but it is not working: + https://curl.se/mail/lib-2008-07/0295.html + +7.4 FTP with ACCT + + When doing an operation over FTP that requires the ACCT command (but not when + logging in), the operation will fail since libcurl does not detect this and + thus fails to issue the correct command: + https://curl.se/bug/view.cgi?id=635 + +7.11 FTPS upload data loss with TLS 1.3 + + During FTPS upload curl does not attempt to read TLS handshake messages sent + after the initial handshake. OpenSSL servers running TLS 1.3 may send such a + message. When curl closes the upload connection if unread data has been + received (such as a TLS handshake message) then the TCP protocol sends an + RST to the server, which may cause the server to discard or truncate the + upload if it has not read all sent data yet, and then return an error to curl + on the control channel connection. + + Since 7.78.0 this is mostly fixed. curl will do a single read before closing + TLS connections (which causes the TLS library to read handshake messages), + however there is still possibility of an RST if more messages need to be read + or a message arrives after the read but before close (network race condition). + + https://github.com/curl/curl/issues/6149 + +7.12 FTPS directory listing hangs on Windows with Schannel + + https://github.com/curl/curl/issues/9161 + +9. SFTP and SCP + +9.1 SFTP does not do CURLOPT_POSTQUOTE correct + + When libcurl sends CURLOPT_POSTQUOTE commands when connected to a SFTP server + using the multi interface, the commands are not being sent correctly and + instead the connection is "cancelled" (the operation is considered done) + prematurely. There is a half-baked (busy-looping) patch provided in the bug + report but it cannot be accepted as-is. See + https://curl.se/bug/view.cgi?id=748 + +9.2 wolfssh: publickey auth does not work + + When building curl to use the wolfSSH backend for SFTP, the publickey + authentication does not work. This is simply functionality not written for curl + yet, the necessary API for make this work is provided by wolfSSH. + + See https://github.com/curl/curl/issues/4820 + +9.3 Remote recursive folder creation with SFTP + + On this servers, the curl fails to create directories on the remote server + even when the CURLOPT_FTP_CREATE_MISSING_DIRS option is set. + + See https://github.com/curl/curl/issues/5204 + +9.4 libssh blocking and infinite loop problem + + In the SSH_SFTP_INIT state for libssh, the ssh session working mode is set to + blocking mode. If the network is suddenly disconnected during sftp + transmission, curl will be stuck, even if curl is configured with a timeout. + + https://github.com/curl/curl/issues/8632 + +9.5 cygwin: "WARNING: UNPROTECTED PRIVATE KEY FILE!" + + Running SCP and SFTP tests on cygwin makes this warning message appear. + + https://github.com/curl/curl/issues/11244 + +10. SOCKS + +10.3 FTPS over SOCKS + + libcurl does not support FTPS over a SOCKS proxy. + + +11. Internals + +11.2 error buffer not set if connection to multiple addresses fails + + If you ask libcurl to resolve a hostname like example.com to IPv6 addresses + only. But you only have IPv4 connectivity. libcurl will correctly fail with + CURLE_COULDNT_CONNECT. But the error buffer set by CURLOPT_ERRORBUFFER + remains empty. Issue: https://github.com/curl/curl/issues/544 + +11.4 HTTP test server 'connection-monitor' problems + + The 'connection-monitor' feature of the sws HTTP test server does not work + properly if some tests are run in unexpected order. Like 1509 and then 1525. + + See https://github.com/curl/curl/issues/868 + +11.5 Connection information when using TCP Fast Open + + CURLINFO_LOCAL_PORT (and possibly a few other) fails when TCP Fast Open is + enabled. + + See https://github.com/curl/curl/issues/1332 and + https://github.com/curl/curl/issues/4296 + +12. LDAP + +12.1 OpenLDAP hangs after returning results + + By configuration defaults, OpenLDAP automatically chase referrals on + secondary socket descriptors. The OpenLDAP backend is asynchronous and thus + should monitor all socket descriptors involved. Currently, these secondary + descriptors are not monitored, causing OpenLDAP library to never receive + data from them. + + As a temporary workaround, disable referrals chasing by configuration. + + The fix is not easy: proper automatic referrals chasing requires a + synchronous bind callback and monitoring an arbitrary number of socket + descriptors for a single easy handle (currently limited to 5). + + Generic LDAP is synchronous: OK. + + See https://github.com/curl/curl/issues/622 and + https://curl.se/mail/lib-2016-01/0101.html + +12.2 LDAP on Windows does authentication wrong? + + https://github.com/curl/curl/issues/3116 + +12.3 LDAP on Windows does not work + + A simple curl command line getting "ldap://ldap.forumsys.com" returns an + error that says "no memory" ! + + https://github.com/curl/curl/issues/4261 + +12.4 LDAPS requests to ActiveDirectory server hang + + https://github.com/curl/curl/issues/9580 + +13. TCP/IP + +13.2 Trying local ports fails on Windows + + This makes '--local-port [range]' to not work since curl cannot properly + detect if a port is already in use, so it will try the first port, use that and + then subsequently fail anyway if that was actually in use. + + https://github.com/curl/curl/issues/8112 + +15. CMake + +15.1 cmake outputs: no version information available + + Something in the SONAME generation seems to be wrong in the cmake build. + + https://github.com/curl/curl/issues/11158 + +15.2 support build with GnuTLS + +15.3 unusable tool_hugehelp.c with MinGW + + see https://github.com/curl/curl/issues/3125 + +15.4 build docs/curl.1 + + The cmake build does not create the docs/curl.1 file and therefore must rely on + it being there already. This makes the --manual option not work and test + cases like 1139 cannot function. + +15.6 uses -lpthread instead of Threads::Threads + + See https://github.com/curl/curl/issues/6166 + +15.7 generated .pc file contains strange entries + + The Libs.private field of the generated .pc file contains -lgcc -lgcc_s -lc + -lgcc -lgcc_s + + See https://github.com/curl/curl/issues/6167 + +15.8 libcurl.pc uses absolute library paths + + The libcurl.pc file generated by cmake contains things like Libs.private: + /usr/lib64/libssl.so /usr/lib64/libcrypto.so /usr/lib64/libz.so. The + autotools equivalent would say Libs.private: -lssl -lcrypto -lz + + See https://github.com/curl/curl/issues/6169 + +15.11 ExternalProject_Add does not set CURL_CA_PATH + + CURL_CA_BUNDLE and CURL_CA_PATH are not set properly when cmake's + ExternalProject_Add is used to build curl as a dependency. + + See https://github.com/curl/curl/issues/6313 + +15.13 CMake build with MIT Kerberos does not work + + Minimum CMake version was bumped in curl 7.71.0 (#5358) Since CMake 3.2 + try_compile started respecting the CMAKE_EXE_FLAGS. The code dealing with + MIT Kerberos detection sets few variables to potentially weird mix of space, + and ;-separated flags. It had to blow up at some point. All the CMake checks + that involve compilation are doomed from that point, the configured tree + cannot be built. + + https://github.com/curl/curl/issues/6904 + +16. aws-sigv4 + +16.1 aws-sigv4 does not sign requests with * correctly + + https://github.com/curl/curl/issues/7559 + +16.6 aws-sigv4 does not behave well with AWS VPC Lattice + + https://github.com/curl/curl/issues/11007 + +17. HTTP/2 + +17.2 HTTP/2 frames while in the connection pool kill reuse + + If the server sends HTTP/2 frames (like for example an HTTP/2 PING frame) to + curl while the connection is held in curl's connection pool, the socket will + be found readable when considered for reuse and that makes curl think it is + dead and then it will be closed and a new connection gets created instead. + + This is *best* fixed by adding monitoring to connections while they are kept + in the pool so that pings can be responded to appropriately. + +17.3 ENHANCE_YOUR_CALM causes infinite retries + + Infinite retries with 2 parallel requests on one connection receiving GOAWAY + with ENHANCE_YOUR_CALM error code. + + See https://github.com/curl/curl/issues/5119 + +18. HTTP/3 + +18.1 connection migration does not work + + https://github.com/curl/curl/issues/7695 diff --git a/deps/curl/docs/MAIL-ETIQUETTE b/deps/curl/docs/MAIL-ETIQUETTE new file mode 100644 index 0000000..2dcf9cb --- /dev/null +++ b/deps/curl/docs/MAIL-ETIQUETTE @@ -0,0 +1,285 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + +MAIL ETIQUETTE + + 1. About the lists + 1.1 Mailing Lists + 1.2 Netiquette + 1.3 Do Not Mail a Single Individual + 1.4 Subscription Required + 1.5 Moderation of new posters + 1.6 Handling trolls and spam + 1.7 How to unsubscribe + 1.8 I posted, now what? + 1.9 Your emails are public + + 2. Sending mail + 2.1 Reply or New Mail + 2.2 Reply to the List + 2.3 Use a Sensible Subject + 2.4 Do Not Top-Post + 2.5 HTML is not for mails + 2.6 Quoting + 2.7 Digest + 2.8 Please Tell Us How You Solved The Problem + +============================================================================== + +1. About the lists + + 1.1 Mailing Lists + + The mailing lists we have are all listed and described at + https://curl.se/mail/ + + Each mailing list is targeted to a specific set of users and subjects, + please use the one or the ones that suit you the most. + + Each mailing list has hundreds up to thousands of readers, meaning that each + mail sent will be received and read by a large number of people. People + from various cultures, regions, religions and continents. + + 1.2 Netiquette + + Netiquette is a common term for how to behave on the Internet. Of course, in + each particular group and subculture there will be differences in what is + acceptable and what is considered good manners. + + This document outlines what we in the curl project consider to be good + etiquette, and primarily this focus on how to behave on and how to use our + mailing lists. + + 1.3 Do Not Mail a Single Individual + + Many people send one question to one person. One person gets many mails, and + there is only one person who can give you a reply. The question may be + something that other people would also like to ask. These other people have + no way to read the reply, but to ask the one person the question. The one + person consequently gets overloaded with mail. + + If you really want to contact an individual and perhaps pay for his or her + services, by all means go ahead, but if it's just another curl question, + take it to a suitable list instead. + + 1.4 Subscription Required + + All curl mailing lists require that you are subscribed to allow a mail to go + through to all the subscribers. + + If you post without being subscribed (or from a different mail address than + the one you are subscribed with), your mail will simply be silently + discarded. You have to subscribe first, then post. + + The reason for this unfortunate and strict subscription policy is of course + to stop spam from pestering the lists. + + 1.5 Moderation of new posters + + Several of the curl mailing lists automatically make all posts from new + subscribers be moderated. This means that after you have subscribed and + sent your first mail to a list, that mail will not be let through to the + list until a mailing list administrator has verified that it is OK and + permits it to get posted. + + Once a first post has been made that proves the sender is actually talking + about curl-related subjects, the moderation "flag" will be switched off and + future posts will go through without being moderated. + + The reason for this moderation policy is that we do suffer from spammers who + actually subscribe and send spam to our lists. + + 1.6 Handling trolls and spam + + Despite our good intentions and hard work to keep spam off the lists and to + maintain a friendly and positive atmosphere, there will be times when spam + and or trolls get through. + + Troll - "someone who posts inflammatory, extraneous, or off-topic messages + in an online community" + + Spam - "use of electronic messaging systems to send unsolicited bulk + messages" + + No matter what, we NEVER EVER respond to trolls or spammers on the list. If + you believe the list admin should do something in particular, contact them + off-list. The subject will be taken care of as much as possible to prevent + repeated offenses, but responding on the list to such messages never leads to + anything good and only puts the light even more on the offender: which was + the entire purpose of it getting sent to the list in the first place. + + Do not feed the trolls. + + 1.7 How to unsubscribe + + You can unsubscribe the same way you subscribed in the first place. You go + to the page for the particular mailing list you are subscribed to and you enter + your email address and password and press the unsubscribe button. + + Also, the instructions to unsubscribe are included in the headers of every + mail that is sent out to all curl related mailing lists and there is a footer + in each mail that links to the "admin" page on which you can unsubscribe and + change other options. + + You NEVER EVER email the mailing list requesting someone else to take you off + the list. + + 1.8 I posted, now what? + + If you are not subscribed with the same email address that you used to send + the email, your post will just be silently discarded. + + If you posted for the first time to the mailing list, you first need to wait + for an administrator to allow your email to go through (moderated). This + normally happens quickly but in case we are asleep, you may have to wait a + few hours. + + Once your email goes through it is sent out to several hundred or even + thousands of recipients. Your email may cover an area that not that many + people know about or are interested in. Or possibly the person who knows + about it is on vacation or under a heavy work load right now. You may have + to wait for a response and you should not expect to get a response at all. + Ideally, you get an answer within a couple of days. + + You do yourself and all of us a service when you include as many details as + possible already in your first email. Mention your operating system and + environment. Tell us which curl version you are using and tell us what you + did, what happened and what you expected would happen. Preferably, show us + what you did with details enough to allow others to help point out the + problem or repeat the steps in their locations. + + Failing to include details will only delay responses and make people respond + and ask for more details and you will have to send a follow-up email that + includes them. + + Expect the responses to primarily help YOU debug the issue, or ask YOU + questions that can lead you or others towards a solution or explanation to + whatever you experience. + + If you are a repeat offender to the guidelines outlined in this document, + chances are that people will ignore you at will and your chances to get + responses in the future will greatly diminish. + + 1.9 Your emails are public + + Your email, its contents and all its headers and the details in those + headers will be received by every subscriber of the mailing list that you + send your email to. + + Your email as sent to a curl mailing list will end up in mail archives, on + the curl website and elsewhere, for others to see and read. Today and in + the future. In addition to the archives, the mail is sent out to thousands + of individuals. There is no way to undo a sent email. + + When sending emails to a curl mailing list, do not include sensitive + information such as user names and passwords; use fake ones, temporary ones + or just remove them completely from the mail. Note that this includes base64 + encoded HTTP Basic auth headers. + + This public nature of the curl mailing lists makes automatically inserted mail + footers about mails being "private" or "only meant for the recipient" or + similar even more silly than usual. Because they are absolutely not private + when sent to a public mailing list. + + +2. Sending mail + + 2.1 Reply or New Mail + + Please do not reply to an existing message as a short-cut to post a message + to the lists. + + Many mail programs and web archivers use information within mails to keep + them together as "threads", as collections of posts that discuss a certain + subject. If you do not intend to reply on the same or similar subject, do not + just hit reply on an existing mail and change the subject, create a new mail. + + 2.2 Reply to the List + + When replying to a message from the list, make sure that you do "group + reply" or "reply to all", and not just reply to the author of the single + mail you reply to. + + We are actively discouraging replying back to the single person by setting + the Reply-To: field in outgoing mails back to the mailing list address, + making it harder for people to mail the author directly, if only by mistake. + + 2.3 Use a Sensible Subject + + Please use a subject of the mail that makes sense and that is related to the + contents of your mail. It makes it a lot easier to find your mail afterwards + and it makes it easier to track mail threads and topics. + + 2.4 Do Not Top-Post + + If you reply to a message, do not use top-posting. Top-posting is when you + write the new text at the top of a mail and you insert the previous quoted + mail conversation below. It forces users to read the mail in a backwards + order to properly understand it. + + This is why top posting is so bad (in top posting order): + + A: Because it messes up the order in which people normally read text. + Q: Why is top-posting such a bad thing? + A: Top-posting. + Q: What is the most annoying thing in email? + + Apart from the screwed up read order (especially when mixed together in a + thread when someone responds using the mandated bottom-posting style), it + also makes it impossible to quote only parts of the original mail. + + When you reply to a mail. You let the mail client insert the previous mail + quoted. Then you put the cursor on the first line of the mail and you move + down through the mail, deleting all parts of the quotes that do not add + context for your comments. When you want to add a comment you do so, inline, + right after the quotes that relate to your comment. Then you continue + downwards again. + + When most of the quotes have been removed and you have added your own words, + you are done. + + 2.5 HTML is not for mails + + Please switch off those HTML encoded messages. You can mail all those funny + mails to your friends. We speak plain text mails. + + 2.6 Quoting + + Quote as little as possible. Just enough to provide the context you cannot + leave out. A lengthy description can be found here: + + https://www.netmeister.org/news/learn2quote.html + + 2.7 Digest + + We allow subscribers to subscribe to the "digest" version of the mailing + lists. A digest is a collection of mails lumped together in one single mail. + + Should you decide to reply to a mail sent out as a digest, there are two + things you MUST consider if you really really cannot subscribe normally + instead: + + Cut off all mails and chatter that is not related to the mail you want to + reply to. + + Change the subject name to something sensible and related to the subject, + preferably even the actual subject of the single mail you wanted to reply to + + 2.8 Please Tell Us How You Solved The Problem + + Many people mail questions to the list, people spend some of their time and + make an effort in providing good answers to these questions. + + If you are the one who asks, please consider responding once more in case + one of the hints was what solved your problems. The guys who write answers + feel good to know that they provided a good answer and that you fixed the + problem. Far too often, the person who asked the question is never heard from + again, and we never get to know if they are gone because the problem was + solved or perhaps because the problem was unsolvable. + + Getting the solution posted also helps other users that experience the same + problem(s). They get to see (possibly in the web archives) that the + suggested fixes actually have helped at least one person. diff --git a/deps/curl/docs/MANUAL.md b/deps/curl/docs/MANUAL.md new file mode 100644 index 0000000..8de4bd7 --- /dev/null +++ b/deps/curl/docs/MANUAL.md @@ -0,0 +1,1002 @@ +# curl tutorial + +## Simple Usage + +Get the main page from a web-server: + + curl https://www.example.com/ + +Get a README file from an FTP server: + + curl ftp://ftp.example.com/README + +Get a web page from a server using port 8000: + + curl http://www.example.com:8000/ + +Get a directory listing of an FTP site: + + curl ftp://ftp.example.com/ + +Get the all terms matching curl from a dictionary: + + curl dict://dict.example.com/m:curl + +Get the definition of curl from a dictionary: + + curl dict://dict.example.com/d:curl + +Fetch two documents at once: + + curl ftp://ftp.example.com/ http://www.example.com:8000/ + +Get a file off an FTPS server: + + curl ftps://files.are.example.com/secrets.txt + +or use the more appropriate FTPS way to get the same file: + + curl --ftp-ssl ftp://files.are.example.com/secrets.txt + +Get a file from an SSH server using SFTP: + + curl -u username sftp://example.com/etc/issue + +Get a file from an SSH server using SCP using a private key (not +password-protected) to authenticate: + + curl -u username: --key ~/.ssh/id_rsa scp://example.com/~/file.txt + +Get a file from an SSH server using SCP using a private key +(password-protected) to authenticate: + + curl -u username: --key ~/.ssh/id_rsa --pass private_key_password + scp://example.com/~/file.txt + +Get the main page from an IPv6 web server: + + curl "http://[2001:1890:1112:1::20]/" + +Get a file from an SMB server: + + curl -u "domain\username:passwd" smb://server.example.com/share/file.txt + +## Download to a File + +Get a web page and store in a local file with a specific name: + + curl -o thatpage.html http://www.example.com/ + +Get a web page and store in a local file, make the local file get the name of +the remote document (if no file name part is specified in the URL, this will +fail): + + curl -O http://www.example.com/index.html + +Fetch two files and store them with their remote names: + + curl -O www.haxx.se/index.html -O curl.se/download.html + +## Using Passwords + +### FTP + +To ftp files using name and password, include them in the URL like: + + curl ftp://name:passwd@ftp.server.example:port/full/path/to/file + +or specify them with the `-u` flag like + + curl -u name:passwd ftp://ftp.server.example:port/full/path/to/file + +### FTPS + +It is just like for FTP, but you may also want to specify and use SSL-specific +options for certificates etc. + +Note that using `FTPS://` as prefix is the *implicit* way as described in the +standards while the recommended *explicit* way is done by using `FTP://` and +the `--ssl-reqd` option. + +### SFTP / SCP + +This is similar to FTP, but you can use the `--key` option to specify a +private key to use instead of a password. Note that the private key may itself +be protected by a password that is unrelated to the login password of the +remote system; this password is specified using the `--pass` option. +Typically, curl will automatically extract the public key from the private key +file, but in cases where curl does not have the proper library support, a +matching public key file must be specified using the `--pubkey` option. + +### HTTP + +Curl also supports user and password in HTTP URLs, thus you can pick a file +like: + + curl http://name:passwd@http.server.example/full/path/to/file + +or specify user and password separately like in + + curl -u name:passwd http://http.server.example/full/path/to/file + +HTTP offers many different methods of authentication and curl supports +several: Basic, Digest, NTLM and Negotiate (SPNEGO). Without telling which +method to use, curl defaults to Basic. You can also ask curl to pick the most +secure ones out of the ones that the server accepts for the given URL, by +using `--anyauth`. + +**Note**! According to the URL specification, HTTP URLs can not contain a user +and password, so that style will not work when using curl via a proxy, even +though curl allows it at other times. When using a proxy, you _must_ use the +`-u` style for user and password. + +### HTTPS + +Probably most commonly used with private certificates, as explained below. + +## Proxy + +curl supports both HTTP and SOCKS proxy servers, with optional authentication. +It does not have special support for FTP proxy servers since there are no +standards for those, but it can still be made to work with many of them. You +can also use both HTTP and SOCKS proxies to transfer files to and from FTP +servers. + +Get an ftp file using an HTTP proxy named my-proxy that uses port 888: + + curl -x my-proxy:888 ftp://ftp.example.com/README + +Get a file from an HTTP server that requires user and password, using the +same proxy as above: + + curl -u user:passwd -x my-proxy:888 http://www.example.com/ + +Some proxies require special authentication. Specify by using -U as above: + + curl -U user:passwd -x my-proxy:888 http://www.example.com/ + +A comma-separated list of hosts and domains which do not use the proxy can be +specified as: + + curl --noproxy example.com -x my-proxy:888 http://www.example.com/ + +If the proxy is specified with `--proxy1.0` instead of `--proxy` or `-x`, then +curl will use HTTP/1.0 instead of HTTP/1.1 for any `CONNECT` attempts. + +curl also supports SOCKS4 and SOCKS5 proxies with `--socks4` and `--socks5`. + +See also the environment variables Curl supports that offer further proxy +control. + +Most FTP proxy servers are set up to appear as a normal FTP server from the +client's perspective, with special commands to select the remote FTP server. +curl supports the `-u`, `-Q` and `--ftp-account` options that can be used to +set up transfers through many FTP proxies. For example, a file can be uploaded +to a remote FTP server using a Blue Coat FTP proxy with the options: + + curl -u "username@ftp.server.example Proxy-Username:Remote-Pass" + --ftp-account Proxy-Password --upload-file local-file + ftp://my-ftp.proxy.example:21/remote/upload/path/ + +See the manual for your FTP proxy to determine the form it expects to set up +transfers, and curl's `-v` option to see exactly what curl is sending. + +## Piping + +Get a key file and add it with `apt-key` (when on a system that uses `apt` for +package management): + + curl -L https://apt.example.org/llvm-snapshot.gpg.key | sudo apt-key add - + +The '|' pipes the output to STDIN. `-` tells `apt-key` that the key file +should be read from STDIN. + +## Ranges + +HTTP 1.1 introduced byte-ranges. Using this, a client can request to get only +one or more sub-parts of a specified document. Curl supports this with the +`-r` flag. + +Get the first 100 bytes of a document: + + curl -r 0-99 http://www.example.com/ + +Get the last 500 bytes of a document: + + curl -r -500 http://www.example.com/ + +Curl also supports simple ranges for FTP files as well. Then you can only +specify start and stop position. + +Get the first 100 bytes of a document using FTP: + + curl -r 0-99 ftp://www.example.com/README + +## Uploading + +### FTP / FTPS / SFTP / SCP + +Upload all data on stdin to a specified server: + + curl -T - ftp://ftp.example.com/myfile + +Upload data from a specified file, login with user and password: + + curl -T uploadfile -u user:passwd ftp://ftp.example.com/myfile + +Upload a local file to the remote site, and use the local file name at the +remote site too: + + curl -T uploadfile -u user:passwd ftp://ftp.example.com/ + +Upload a local file to get appended to the remote file: + + curl -T localfile -a ftp://ftp.example.com/remotefile + +Curl also supports ftp upload through a proxy, but only if the proxy is +configured to allow that kind of tunneling. If it does, you can run curl in a +fashion similar to: + + curl --proxytunnel -x proxy:port -T localfile ftp.example.com + +### SMB / SMBS + + curl -T file.txt -u "domain\username:passwd" + smb://server.example.com/share/ + +### HTTP + +Upload all data on stdin to a specified HTTP site: + + curl -T - http://www.example.com/myfile + +Note that the HTTP server must have been configured to accept PUT before this +can be done successfully. + +For other ways to do HTTP data upload, see the POST section below. + +## Verbose / Debug + +If curl fails where it is not supposed to, if the servers do not let you in, if +you cannot understand the responses: use the `-v` flag to get verbose +fetching. Curl will output lots of info and what it sends and receives in +order to let the user see all client-server interaction (but it will not show you +the actual data). + + curl -v ftp://ftp.example.com/ + +To get even more details and information on what curl does, try using the +`--trace` or `--trace-ascii` options with a given file name to log to, like +this: + + curl --trace trace.txt www.haxx.se + + +## Detailed Information + +Different protocols provide different ways of getting detailed information +about specific files/documents. To get curl to show detailed information about +a single file, you should use `-I`/`--head` option. It displays all available +info on a single file for HTTP and FTP. The HTTP information is a lot more +extensive. + +For HTTP, you can get the header information (the same as `-I` would show) +shown before the data by using `-i`/`--include`. Curl understands the +`-D`/`--dump-header` option when getting files from both FTP and HTTP, and it +will then store the headers in the specified file. + +Store the HTTP headers in a separate file (headers.txt in the example): + + curl --dump-header headers.txt curl.se + +Note that headers stored in a separate file can be useful at a later time if +you want curl to use cookies sent by the server. More about that in the +cookies section. + +## POST (HTTP) + +It is easy to post data using curl. This is done using the `-d ` option. +The post data must be urlencoded. + +Post a simple `name` and `phone` guestbook. + + curl -d "name=Rafael%20Sagula&phone=3320780" http://www.example.com/guest.cgi + +Or automatically [URL encode the data](https://everything.curl.dev/http/post/url-encode). + + curl --data-urlencode "name=Rafael Sagula&phone=3320780" http://www.example.com/guest.cgi + +How to post a form with curl, lesson #1: + +Dig out all the `` tags in the form that you want to fill in. + +If there is a normal post, you use `-d` to post. `-d` takes a full post +string, which is in the format + + =&=&... + +The variable names are the names set with `"name="` in the `` tags, and +the data is the contents you want to fill in for the inputs. The data *must* +be properly URL encoded. That means you replace space with + and that you +replace weird letters with `%XX` where `XX` is the hexadecimal representation +of the letter's ASCII code. + +Example: + +(say if `http://example.com` had the following html) + +```html +
+ + + + +
+``` + +We want to enter user `foobar` with password `12345`. + +To post to this, you would enter a curl command line like: + + curl -d "user=foobar&pass=12345&id=blablabla&ding=submit" http://example.com/post.cgi + +While `-d` uses the application/x-www-form-urlencoded mime-type, generally +understood by CGI's and similar, curl also supports the more capable +multipart/form-data type. This latter type supports things like file upload. + +`-F` accepts parameters like `-F "name=contents"`. If you want the contents to +be read from a file, use `@filename` as contents. When specifying a file, you +can also specify the file content type by appending `;type=` to the +file name. You can also post the contents of several files in one field. For +example, the field name `coolfiles` is used to send three files, with +different content types using the following syntax: + + curl -F "coolfiles=@fil1.gif;type=image/gif,fil2.txt,fil3.html" + http://www.example.com/postit.cgi + +If the content-type is not specified, curl will try to guess from the file +extension (it only knows a few), or use the previously specified type (from an +earlier file if several files are specified in a list) or else it will use the +default type `application/octet-stream`. + +Emulate a fill-in form with `-F`. Let's say you fill in three fields in a +form. One field is a file name which to post, one field is your name and one +field is a file description. We want to post the file we have written named +`cooltext.txt`. To let curl do the posting of this data instead of your +favorite browser, you have to read the HTML source of the form page and find +the names of the input fields. In our example, the input field names are +`file`, `yourname` and `filedescription`. + + curl -F "file=@cooltext.txt" -F "yourname=Daniel" + -F "filedescription=Cool text file with cool text inside" + http://www.example.com/postit.cgi + +To send two files in one post you can do it in two ways: + +Send multiple files in a single field with a single field name: + + curl -F "pictures=@dog.gif,cat.gif" $URL + +Send two fields with two field names + + curl -F "docpicture=@dog.gif" -F "catpicture=@cat.gif" $URL + +To send a field value literally without interpreting a leading `@` or `<`, or +an embedded `;type=`, use `--form-string` instead of `-F`. This is recommended +when the value is obtained from a user or some other unpredictable +source. Under these circumstances, using `-F` instead of `--form-string` could +allow a user to trick curl into uploading a file. + +## Referrer + +An HTTP request has the option to include information about which address +referred it to the actual page. curl allows you to specify the referrer to be +used on the command line. It is especially useful to fool or trick stupid +servers or CGI scripts that rely on that information being available or +contain certain data. + + curl -e www.exomaple.org http://www.example.com/ + +## User Agent + +An HTTP request has the option to include information about the browser that +generated the request. Curl allows it to be specified on the command line. It +is especially useful to fool or trick stupid servers or CGI scripts that only +accept certain browsers. + +Example: + + curl -A 'Mozilla/3.0 (Win95; I)' http://www.bank.example.com/ + +Other common strings: + +- `Mozilla/3.0 (Win95; I)` - Netscape Version 3 for Windows 95 +- `Mozilla/3.04 (Win95; U)` - Netscape Version 3 for Windows 95 +- `Mozilla/2.02 (OS/2; U)` - Netscape Version 2 for OS/2 +- `Mozilla/4.04 [en] (X11; U; AIX 4.2; Nav)` - Netscape for AIX +- `Mozilla/4.05 [en] (X11; U; Linux 2.0.32 i586)` - Netscape for Linux + +Note that Internet Explorer tries hard to be compatible in every way: + +- `Mozilla/4.0 (compatible; MSIE 4.01; Windows 95)` - MSIE for W95 + +Mozilla is not the only possible User-Agent name: + +- `Konqueror/1.0` - KDE File Manager desktop client +- `Lynx/2.7.1 libwww-FM/2.14` - Lynx command line browser + +## Cookies + +Cookies are generally used by web servers to keep state information at the +client's side. The server sets cookies by sending a response line in the +headers that looks like `Set-Cookie: ` where the data part then +typically contains a set of `NAME=VALUE` pairs (separated by semicolons `;` +like `NAME1=VALUE1; NAME2=VALUE2;`). The server can also specify for what path +the cookie should be used for (by specifying `path=value`), when the cookie +should expire (`expire=DATE`), for what domain to use it (`domain=NAME`) and +if it should be used on secure connections only (`secure`). + +If you have received a page from a server that contains a header like: + +```http +Set-Cookie: sessionid=boo123; path="/foo"; +``` + +it means the server wants that first pair passed on when we get anything in a +path beginning with `/foo`. + +Example, get a page that wants my name passed in a cookie: + + curl -b "name=Daniel" www.example.com + +Curl also has the ability to use previously received cookies in following +sessions. If you get cookies from a server and store them in a file in a +manner similar to: + + curl --dump-header headers www.example.com + +... you can then in a second connect to that (or another) site, use the +cookies from the `headers.txt` file like: + + curl -b headers.txt www.example.com + +While saving headers to a file is a working way to store cookies, it is +however error-prone and not the preferred way to do this. Instead, make curl +save the incoming cookies using the well-known Netscape cookie format like +this: + + curl -c cookies.txt www.example.com + +Note that by specifying `-b` you enable the cookie engine and with `-L` you +can make curl follow a `location:` (which often is used in combination with +cookies). If a site sends cookies and a location field, you can use a +non-existing file to trigger the cookie awareness like: + + curl -L -b empty.txt www.example.com + +The file to read cookies from must be formatted using plain HTTP headers OR as +Netscape's cookie file. Curl will determine what kind it is based on the file +contents. In the above command, curl will parse the header and store the +cookies received from www.example.com. curl will send to the server the stored +cookies which match the request as it follows the location. The file +`empty.txt` may be a nonexistent file. + +To read and write cookies from a Netscape cookie file, you can set both `-b` +and `-c` to use the same file: + + curl -b cookies.txt -c cookies.txt www.example.com + +## Progress Meter + +The progress meter exists to show a user that something actually is +happening. The different fields in the output have the following meaning: + + % Total % Received % Xferd Average Speed Time Curr. + Dload Upload Total Current Left Speed + 0 151M 0 38608 0 0 9406 0 4:41:43 0:00:04 4:41:39 9287 + +From left-to-right: + + - `%` - percentage completed of the whole transfer + - `Total` - total size of the whole expected transfer + - `%` - percentage completed of the download + - `Received` - currently downloaded amount of bytes + - `%` - percentage completed of the upload + - `Xferd` - currently uploaded amount of bytes + - `Average Speed Dload` - the average transfer speed of the download + - `Average Speed Upload` - the average transfer speed of the upload + - `Time Total` - expected time to complete the operation + - `Time Current` - time passed since the invoke + - `Time Left` - expected time left to completion + - `Curr.Speed` - the average transfer speed the last 5 seconds (the first + 5 seconds of a transfer is based on less time of course.) + +The `-#` option will display a totally different progress bar that does not +need much explanation! + +## Speed Limit + +Curl allows the user to set the transfer speed conditions that must be met to +let the transfer keep going. By using the switch `-y` and `-Y` you can make +curl abort transfers if the transfer speed is below the specified lowest limit +for a specified time. + +To have curl abort the download if the speed is slower than 3000 bytes per +second for 1 minute, run: + + curl -Y 3000 -y 60 www.far-away.example.com + +This can be used in combination with the overall time limit, so that the above +operation must be completed in whole within 30 minutes: + + curl -m 1800 -Y 3000 -y 60 www.far-away.example.com + +Forcing curl not to transfer data faster than a given rate is also possible, +which might be useful if you are using a limited bandwidth connection and you +do not want your transfer to use all of it (sometimes referred to as +*bandwidth throttle*). + +Make curl transfer data no faster than 10 kilobytes per second: + + curl --limit-rate 10K www.far-away.example.com + +or + + curl --limit-rate 10240 www.far-away.example.com + +Or prevent curl from uploading data faster than 1 megabyte per second: + + curl -T upload --limit-rate 1M ftp://uploads.example.com + +When using the `--limit-rate` option, the transfer rate is regulated on a +per-second basis, which will cause the total transfer speed to become lower +than the given number. Sometimes of course substantially lower, if your +transfer stalls during periods. + +## Config File + +Curl automatically tries to read the `.curlrc` file (or `_curlrc` file on +Microsoft Windows systems) from the user's home dir on startup. + +The config file could be made up with normal command line switches, but you +can also specify the long options without the dashes to make it more +readable. You can separate the options and the parameter with spaces, or with +`=` or `:`. Comments can be used within the file. If the first letter on a +line is a `#`-symbol the rest of the line is treated as a comment. + +If you want the parameter to contain spaces, you must enclose the entire +parameter within double quotes (`"`). Within those quotes, you specify a quote +as `\"`. + +NOTE: You must specify options and their arguments on the same line. + +Example, set default time out and proxy in a config file: + + # We want a 30 minute timeout: + -m 1800 + # ... and we use a proxy for all accesses: + proxy = proxy.our.domain.com:8080 + +Whitespaces ARE significant at the end of lines, but all whitespace leading +up to the first characters of each line are ignored. + +Prevent curl from reading the default file by using -q as the first command +line parameter, like: + + curl -q www.example.org + +Force curl to get and display a local help page in case it is invoked without +URL by making a config file similar to: + + # default url to get + url = "http://help.with.curl.example.com/curlhelp.html" + +You can specify another config file to be read by using the `-K`/`--config` +flag. If you set config file name to `-` it will read the config from stdin, +which can be handy if you want to hide options from being visible in process +tables etc: + + echo "user = user:passwd" | curl -K - http://that.secret.example.com + +## Extra Headers + +When using curl in your own programs, you may end up needing to pass on your +own custom headers when getting a web page. You can do this by using the `-H` +flag. + +Example, send the header `X-you-and-me: yes` to the server when getting a +page: + + curl -H "X-you-and-me: yes" love.example.com + +This can also be useful in case you want curl to send a different text in a +header than it normally does. The `-H` header you specify then replaces the +header curl would normally send. If you replace an internal header with an +empty one, you prevent that header from being sent. To prevent the `Host:` +header from being used: + + curl -H "Host:" server.example.com + +## FTP and Path Names + +Do note that when getting files with a `ftp://` URL, the given path is +relative to the directory you enter. To get the file `README` from your home +directory at your ftp site, do: + + curl ftp://user:passwd@my.example.com/README + +If you want the README file from the root directory of that same site, you +need to specify the absolute file name: + + curl ftp://user:passwd@my.example.com//README + +(I.e with an extra slash in front of the file name.) + +## SFTP and SCP and Path Names + +With sftp: and scp: URLs, the path name given is the absolute name on the +server. To access a file relative to the remote user's home directory, prefix +the file with `/~/` , such as: + + curl -u $USER sftp://home.example.com/~/.bashrc + +## FTP and Firewalls + +The FTP protocol requires one of the involved parties to open a second +connection as soon as data is about to get transferred. There are two ways to +do this. + +The default way for curl is to issue the PASV command which causes the server +to open another port and await another connection performed by the +client. This is good if the client is behind a firewall that does not allow +incoming connections. + + curl ftp.example.com + +If the server, for example, is behind a firewall that does not allow +connections on ports other than 21 (or if it just does not support the `PASV` +command), the other way to do it is to use the `PORT` command and instruct the +server to connect to the client on the given IP number and port (as parameters +to the PORT command). + +The `-P` flag to curl supports a few different options. Your machine may have +several IP-addresses and/or network interfaces and curl allows you to select +which of them to use. Default address can also be used: + + curl -P - ftp.example.com + +Download with `PORT` but use the IP address of our `le0` interface (this does +not work on Windows): + + curl -P le0 ftp.example.com + +Download with `PORT` but use 192.168.0.10 as our IP address to use: + + curl -P 192.168.0.10 ftp.example.com + +## Network Interface + +Get a web page from a server using a specified port for the interface: + + curl --interface eth0:1 http://www.example.com/ + +or + + curl --interface 192.168.1.10 http://www.example.com/ + +## HTTPS + +Secure HTTP requires a TLS library to be installed and used when curl is +built. If that is done, curl is capable of retrieving and posting documents +using the HTTPS protocol. + +Example: + + curl https://secure.example.com + +curl is also capable of using client certificates to get/post files from sites +that require valid certificates. The only drawback is that the certificate +needs to be in PEM-format. PEM is a standard and open format to store +certificates with, but it is not used by the most commonly used browsers. If +you want curl to use the certificates you use with your favorite browser, you +may need to download/compile a converter that can convert your browser's +formatted certificates to PEM formatted ones. + +Example on how to automatically retrieve a document using a certificate with a +personal password: + + curl -E /path/to/cert.pem:password https://secure.example.com/ + +If you neglect to specify the password on the command line, you will be +prompted for the correct password before any data can be received. + +Many older HTTPS servers have problems with specific SSL or TLS versions, +which newer versions of OpenSSL etc use, therefore it is sometimes useful to +specify what TLS version curl should use.: + + curl --tlv1.0 https://secure.example.com/ + +Otherwise, curl will attempt to use a sensible TLS default version. + +## Resuming File Transfers + +To continue a file transfer where it was previously aborted, curl supports +resume on HTTP(S) downloads as well as FTP uploads and downloads. + +Continue downloading a document: + + curl -C - -o file ftp://ftp.example.com/path/file + +Continue uploading a document: + + curl -C - -T file ftp://ftp.example.com/path/file + +Continue downloading a document from a web server + + curl -C - -o file http://www.example.com/ + +## Time Conditions + +HTTP allows a client to specify a time condition for the document it requests. +It is `If-Modified-Since` or `If-Unmodified-Since`. curl allows you to specify +them with the `-z`/`--time-cond` flag. + +For example, you can easily make a download that only gets performed if the +remote file is newer than a local copy. It would be made like: + + curl -z local.html http://remote.example.com/remote.html + +Or you can download a file only if the local file is newer than the remote +one. Do this by prepending the date string with a `-`, as in: + + curl -z -local.html http://remote.example.com/remote.html + +You can specify a plain text date as condition. Tell curl to only download the +file if it was updated since January 12, 2012: + + curl -z "Jan 12 2012" http://remote.example.com/remote.html + +curl accepts a wide range of date formats. You always make the date check the +other way around by prepending it with a dash (`-`). + +## DICT + +For fun try + + curl dict://dict.org/m:curl + curl dict://dict.org/d:heisenbug:jargon + curl dict://dict.org/d:daniel:gcide + +Aliases for `m` are `match` and `find`, and aliases for `d` are `define` and +`lookup`. For example, + + curl dict://dict.org/find:curl + +Commands that break the URL description of the RFC (but not the DICT +protocol) are + + curl dict://dict.org/show:db + curl dict://dict.org/show:strat + +Authentication support is still missing + +## LDAP + +If you have installed the OpenLDAP library, curl can take advantage of it and +offer `ldap://` support. On Windows, curl will use WinLDAP from Platform SDK +by default. + +Default protocol version used by curl is LDAP version 3. Version 2 will be +used as a fallback mechanism in case version 3 fails to connect. + +LDAP is a complex thing and writing an LDAP query is not an easy +task. Familiarize yourself with the exact syntax description elsewhere. One +such place might be: [RFC 2255, The LDAP URL +Format](https://curl.se/rfc/rfc2255.txt) + +To show you an example, this is how to get all people from an LDAP server that +has a certain subdomain in their email address: + + curl -B "ldap://ldap.example.com/o=frontec??sub?mail=*sth.example.com" + +You also can use authentication when accessing LDAP catalog: + + curl -u user:passwd "ldap://ldap.example.com/o=frontec??sub?mail=*" + curl "ldap://user:passwd@ldap.example.com/o=frontec??sub?mail=*" + +By default, if user and password are provided, OpenLDAP/WinLDAP will use basic +authentication. On Windows you can control this behavior by providing one of +`--basic`, `--ntlm` or `--digest` option in curl command line + + curl --ntlm "ldap://user:passwd@ldap.example.com/o=frontec??sub?mail=*" + +On Windows, if no user/password specified, auto-negotiation mechanism will be +used with current logon credentials (SSPI/SPNEGO). + +## Environment Variables + +Curl reads and understands the following environment variables: + + http_proxy, HTTPS_PROXY, FTP_PROXY + +They should be set for protocol-specific proxies. General proxy should be set +with + + ALL_PROXY + +A comma-separated list of host names that should not go through any proxy is +set in (only an asterisk, `*` matches all hosts) + + NO_PROXY + +If the host name matches one of these strings, or the host is within the +domain of one of these strings, transactions with that node will not be done +over proxy. When a domain is used, it needs to start with a period. A user can +specify that both www.example.com and foo.example.com should not use a proxy +by setting `NO_PROXY` to `.example.com`. By including the full name you can +exclude specific host names, so to make `www.example.com` not use a proxy but +still have `foo.example.com` do it, set `NO_PROXY` to `www.example.com`. + +The usage of the `-x`/`--proxy` flag overrides the environment variables. + +## Netrc + +Unix introduced the `.netrc` concept a long time ago. It is a way for a user +to specify name and password for commonly visited FTP sites in a file so that +you do not have to type them in each time you visit those sites. You realize +this is a big security risk if someone else gets hold of your passwords, +therefore most Unix programs will not read this file unless it is only readable +by yourself (curl does not care though). + +Curl supports `.netrc` files if told to (using the `-n`/`--netrc` and +`--netrc-optional` options). This is not restricted to just FTP, so curl can +use it for all protocols where authentication is used. + +A simple `.netrc` file could look something like: + + machine curl.se login iamdaniel password mysecret + +## Custom Output + +To better allow script programmers to get to know about the progress of curl, +the `-w`/`--write-out` option was introduced. Using this, you can specify what +information from the previous transfer you want to extract. + +To display the amount of bytes downloaded together with some text and an +ending newline: + + curl -w 'We downloaded %{size_download} bytes\n' www.example.com + +## Kerberos FTP Transfer + +Curl supports kerberos4 and kerberos5/GSSAPI for FTP transfers. You need the +kerberos package installed and used at curl build time for it to be available. + +First, get the krb-ticket the normal way, like with the `kinit`/`kauth` tool. +Then use curl in way similar to: + + curl --krb private ftp://krb4site.example.com -u username:fakepwd + +There is no use for a password on the `-u` switch, but a blank one will make +curl ask for one and you already entered the real password to `kinit`/`kauth`. + +## TELNET + +The curl telnet support is basic and easy to use. Curl passes all data passed +to it on stdin to the remote server. Connect to a remote telnet server using a +command line similar to: + + curl telnet://remote.example.com + +And enter the data to pass to the server on stdin. The result will be sent to +stdout or to the file you specify with `-o`. + +You might want the `-N`/`--no-buffer` option to switch off the buffered output +for slow connections or similar. + +Pass options to the telnet protocol negotiation, by using the `-t` option. To +tell the server we use a vt100 terminal, try something like: + + curl -tTTYPE=vt100 telnet://remote.example.com + +Other interesting options for it `-t` include: + + - `XDISPLOC=` Sets the X display location. + - `NEW_ENV=` Sets an environment variable. + +NOTE: The telnet protocol does not specify any way to login with a specified +user and password so curl cannot do that automatically. To do that, you need to +track when the login prompt is received and send the username and password +accordingly. + +## Persistent Connections + +Specifying multiple files on a single command line will make curl transfer all +of them, one after the other in the specified order. + +libcurl will attempt to use persistent connections for the transfers so that +the second transfer to the same host can use the same connection that was +already initiated and was left open in the previous transfer. This greatly +decreases connection time for all but the first transfer and it makes a far +better use of the network. + +Note that curl cannot use persistent connections for transfers that are used +in subsequent curl invokes. Try to stuff as many URLs as possible on the same +command line if they are using the same host, as that will make the transfers +faster. If you use an HTTP proxy for file transfers, practically all transfers +will be persistent. + +## Multiple Transfers With A Single Command Line + +As is mentioned above, you can download multiple files with one command line +by simply adding more URLs. If you want those to get saved to a local file +instead of just printed to stdout, you need to add one save option for each +URL you specify. Note that this also goes for the `-O` option (but not +`--remote-name-all`). + +For example: get two files and use `-O` for the first and a custom file +name for the second: + + curl -O http://example.com/file.txt ftp://example.com/moo.exe -o moo.jpg + +You can also upload multiple files in a similar fashion: + + curl -T local1 ftp://example.com/moo.exe -T local2 ftp://example.com/moo2.txt + +## IPv6 + +curl will connect to a server with IPv6 when a host lookup returns an IPv6 +address and fall back to IPv4 if the connection fails. The `--ipv4` and +`--ipv6` options can specify which address to use when both are +available. IPv6 addresses can also be specified directly in URLs using the +syntax: + + http://[2001:1890:1112:1::20]/overview.html + +When this style is used, the `-g` option must be given to stop curl from +interpreting the square brackets as special globbing characters. Link local +and site local addresses including a scope identifier, such as `fe80::1234%1`, +may also be used, but the scope portion must be numeric or match an existing +network interface on Linux and the percent character must be URL escaped. The +previous example in an SFTP URL might look like: + + sftp://[fe80::1234%251]/ + +IPv6 addresses provided other than in URLs (e.g. to the `--proxy`, +`--interface` or `--ftp-port` options) should not be URL encoded. + +## Mailing Lists + +For your convenience, we have several open mailing lists to discuss curl, its +development and things relevant to this. Get all info at +https://curl.se/mail/. + +Please direct curl questions, feature requests and trouble reports to one of +these mailing lists instead of mailing any individual. + +Available lists include: + +### `curl-users` + +Users of the command line tool. How to use it, what does not work, new +features, related tools, questions, news, installations, compilations, +running, porting etc. + +### `curl-library` + +Developers using or developing libcurl. Bugs, extensions, improvements. + +### `curl-announce` + +Low-traffic. Only receives announcements of new public versions. At worst, +that makes something like one or two mails per month, but usually only one +mail every second month. + +### `curl-and-php` + +Using the curl functions in PHP. Everything curl with a PHP angle. Or PHP with +a curl angle. + +### `curl-and-python` + +Python hackers using curl with or without the python binding pycurl. diff --git a/deps/curl/docs/MQTT.md b/deps/curl/docs/MQTT.md new file mode 100644 index 0000000..660ff29 --- /dev/null +++ b/deps/curl/docs/MQTT.md @@ -0,0 +1,27 @@ +# MQTT in curl + +## Usage + +A plain "GET" subscribes to the topic and prints all published messages. +Doing a "POST" publishes the post data to the topic and exits. + +Example subscribe: + + curl mqtt://host.home/bedroom/temp + +Example publish: + + curl -d 75 mqtt://host.home/bedroom/dimmer + +## What does curl deliver as a response to a subscribe + +It outputs two bytes topic length (MSB | LSB), the topic followed by the +payload. + +## Caveats + +Remaining limitations: + - Only QoS level 0 is implemented for publish + - No way to set retain flag for publish + - No TLS (mqtts) support + - Naive EAGAIN handling will not handle split messages diff --git a/deps/curl/docs/Makefile.am b/deps/curl/docs/Makefile.am new file mode 100644 index 0000000..9190b44 --- /dev/null +++ b/deps/curl/docs/Makefile.am @@ -0,0 +1,135 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +AUTOMAKE_OPTIONS = foreign no-dependencies + +# EXTRA_DIST breaks with $(abs_builddir) so build it using this variable +# but distribute it (using the relative file name) in the next variable +man_MANS = $(abs_builddir)/curl.1 +noinst_man_MANS = curl.1 mk-ca-bundle.1 +dist_man_MANS = curl-config.1 +GENHTMLPAGES = curl.html curl-config.html mk-ca-bundle.html +PDFPAGES = curl.pdf curl-config.pdf mk-ca-bundle.pdf +MANDISTPAGES = curl.1.dist curl-config.1.dist + +HTMLPAGES = $(GENHTMLPAGES) + +# Build targets in this file (.) before cmdline-opts to ensure that +# the curl.1 rule below runs first +SUBDIRS = . cmdline-opts +DIST_SUBDIRS = $(SUBDIRS) examples libcurl + +CLEANFILES = $(GENHTMLPAGES) $(PDFPAGES) $(MANDISTPAGES) curl.1 + +EXTRA_DIST = \ + $(noinst_man_MANS) \ + ALTSVC.md \ + BINDINGS.md \ + BUFREF.md \ + BUG-BOUNTY.md \ + BUGS.md \ + CHECKSRC.md \ + CIPHERS.md \ + CMakeLists.txt \ + CODE_OF_CONDUCT.md \ + CODE_REVIEW.md \ + CODE_STYLE.md \ + CONNECTION-FILTERS.md \ + CONTRIBUTE.md \ + CURL-DISABLE.md \ + DEPRECATE.md \ + DYNBUF.md \ + EARLY-RELEASE.md \ + EXPERIMENTAL.md \ + FAQ \ + FEATURES.md \ + GOVERNANCE.md \ + HELP-US.md \ + HISTORY.md \ + HSTS.md \ + HTTP-COOKIES.md \ + HTTP2.md \ + HTTP3.md \ + HYPER.md \ + INSTALL \ + INSTALL.cmake \ + INSTALL.md \ + INTERNALS.md \ + KNOWN_BUGS \ + MAIL-ETIQUETTE \ + MQTT.md \ + NEW-PROTOCOL.md \ + options-in-versions \ + PARALLEL-TRANSFERS.md \ + README.md \ + RELEASE-PROCEDURE.md \ + RUSTLS.md \ + ROADMAP.md \ + SECURITY-ADVISORY.md \ + SSL-PROBLEMS.md \ + SSLCERTS.md \ + THANKS \ + TODO \ + TheArtOfHttpScripting.md \ + URL-SYNTAX.md \ + VERSIONS.md \ + VULN-DISCLOSURE-POLICY.md \ + WEBSOCKET.md + +MAN2HTML= roffit $< >$@ + +SUFFIXES = .1 .html .pdf + +# $(abs_builddir) is to disable VPATH when searching for this file, which +# would otherwise find the copy in $(srcdir) which breaks the $(HUGE) +# rule in src/Makefile.am in out-of-tree builds that references the file in the +# build directory. +# +# First, seed the used copy of curl.1 with the prebuilt copy (in an out-of-tree +# build), then run make recursively to rebuild it only if its dependencies +# have changed. +$(abs_builddir)/curl.1: + if test "$(top_builddir)x" != "$(top_srcdir)x" -a -e "$(srcdir)/curl.1"; then \ + $(INSTALL_DATA) "$(srcdir)/curl.1" $@ \ + && touch -r "$(srcdir)/curl.1" $@; fi + cd cmdline-opts && $(MAKE) + +html: $(HTMLPAGES) + cd libcurl && $(MAKE) html + +pdf: $(PDFPAGES) + cd libcurl && $(MAKE) pdf + +.1.html: + $(MAN2HTML) + +.1.pdf: + @(foo=`echo $@ | sed -e 's/\.[0-9]$$//g'`; \ + groff -Tps -man $< >$$foo.ps; \ + ps2pdf $$foo.ps $@; \ + rm $$foo.ps; \ + echo "converted $< to $@") + +distclean: + rm -f $(CLEANFILES) diff --git a/deps/curl/docs/NEW-PROTOCOL.md b/deps/curl/docs/NEW-PROTOCOL.md new file mode 100644 index 0000000..a8b227d --- /dev/null +++ b/deps/curl/docs/NEW-PROTOCOL.md @@ -0,0 +1,110 @@ +# Adding a new protocol? + +Every once in a while, someone comes up with the idea of adding support for yet +another protocol to curl. After all, curl already supports 25 something +protocols and it is the Internet transfer machine for the world. + +In the curl project we love protocols and we love supporting many protocols +and doing it well. + +So how do you proceed to add a new protocol and what are the requirements? + +## No fixed set of requirements + +This document is an attempt to describe things to consider. There is no +checklist of the twenty-seven things you need to cross off. We view the entire +effort as a whole and then judge if it seems to be the right thing - for +now. The more things that look right, fit our patterns and are done in ways +that align with our thinking, the better are the chances that we will agree +that supporting this protocol is a grand idea. + +## Mutual benefit is preferred + +curl is not here for your protocol. Your protocol is not here for curl. The +best cooperation and end result occur when all involved parties mutually see +and agree that supporting this protocol in curl would be good for everyone. +Heck, for the world. + +Consider "selling us" the idea that we need an implementation merged in curl, +to be fairly important. *Why* do we want curl to support this new protocol? + +## Protocol requirements + +### Client-side + +The protocol implementation is for a client's side of a "communication +session". + +### Transfer oriented + +The protocol itself should be focused on *transfers*. Be it uploads or +downloads or both. It should at least be possible to view the transfers as +such, like we can view reading emails over POP3 as a download and sending +emails over SMTP as an upload. + +If you cannot even shoehorn the protocol into a transfer focused view, then +you are up for a tough argument. + +### URL + +There should be a documented URL format. If there is an RFC for it there is no +question about it but the syntax does not have to be a published RFC. It could +be enough if it is already in use by other implementations. + +If you make up the syntax just in order to be able to propose it to curl, then +you are in a bad place. URLs are designed and defined for interoperability. +There should at least be a good chance that other clients and servers can be +implemented supporting the same URL syntax and work the same or similar way. + +URLs work on registered 'schemes'. There is a register of [all officially +recognized +schemes](https://www.iana.org/assignments/uri-schemes/uri-schemes.xhtml). If +your protocol is not in there, is it really a protocol we want? + +### Wide and public use + +The protocol shall already be used or have an expectation of getting used +widely. Experimental protocols are better off worked on in experiments first, +to prove themselves before they are adopted by curl. + +## Code + +Of course the code needs to be written, provided, licensed agreeably and it +should follow our code guidelines and review comments have to be dealt with. +If the implementation needs third party code, that third party code should not +have noticeably lesser standards than the curl project itself. + +## Tests + +As much of the protocol implementation as possible needs to be verified by +curl test cases. We must have the implementation get tested by CI jobs, +torture tests and more. + +We have experienced many times in the past how new implementations were brought +to curl and immediately once the code had been merged, the originator vanished +from the face of the earth. That is fine, but we need to take the necessary +precautions so when it happens we are still fine. + +Our test infrastructure is powerful enough to test just about every possible +protocol - but it might require a bit of an effort to make it happen. + +## Documentation + +We cannot assume that users are particularly familiar with details and +peculiarities of the protocol. It needs documentation. + +Maybe it even needs some internal documentation so that the developers who +will try to debug something five years from now can figure out functionality a +little easier! + +The protocol specification itself should be freely available without requiring +a non-disclosure agreement or similar. + +## Do not compare + +We are constantly raising the bar and we are constantly improving the +project. A lot of things we did in the past would not be acceptable if done +today. Therefore, you might be tempted to use shortcuts or "hacks" you can +spot other - existing - protocol implementations have used, but there is +nothing to gain from that. The bar has been raised. Former "cheats" will not be +tolerated anymore. diff --git a/deps/curl/docs/PARALLEL-TRANSFERS.md b/deps/curl/docs/PARALLEL-TRANSFERS.md new file mode 100644 index 0000000..337fab5 --- /dev/null +++ b/deps/curl/docs/PARALLEL-TRANSFERS.md @@ -0,0 +1,50 @@ +# Parallel transfers + +curl 7.66.0 introduced support for doing multiple transfers simultaneously; in +parallel. + +## -Z, --parallel + +When this command line option is used, curl will perform the transfers given +to it at the same time. It will do up to `--parallel-max` concurrent +transfers, with a default value of 50. + +## Progress meter + +The progress meter that is displayed when doing parallel transfers is +completely different than the regular one used for each single transfer. + + It shows: + + o percent download (if known, which means *all* transfers need to have a + known size) + o percent upload (if known, with the same caveat as for download) + o total amount of downloaded data + o total amount of uploaded data + o number of transfers to perform + o number of concurrent transfers being transferred right now + o number of transfers queued up waiting to start + o total time all transfers are expected to take (if sizes are known) + o current time the transfers have spent so far + o estimated time left (if sizes are known) + o current transfer speed (the faster of upload/download speeds measured over + the last few seconds) + +Example: + + DL% UL% Dled Uled Xfers Live Qd Total Current Left Speed + 72 -- 37.9G 0 101 30 23 0:00:55 0:00:34 0:00:22 2752M + +## Behavior differences + +Connections are shared fine between different easy handles, but the +"authentication contexts" are not. So for example doing HTTP Digest auth with +one handle for a particular transfer and then continue on with another handle +that reuses the same connection, the second handle cannot send the necessary +Authorization header at once since the context is only kept in the original +easy handle. + +To fix this, the authorization state could be made possible to share with the +share API as well, as a context per origin + path (realm?) basically. + +Visible in test 153, 1412 and more. diff --git a/deps/curl/docs/README.md b/deps/curl/docs/README.md new file mode 100644 index 0000000..b72d8bc --- /dev/null +++ b/deps/curl/docs/README.md @@ -0,0 +1,12 @@ +![curl logo](https://curl.se/logo/curl-logo.svg) + +# Documentation + +you will find a mix of various documentation in this directory and +subdirectories, using several different formats. Some of them are not ideal +for reading directly in your browser. + +If you would rather see the rendered version of the documentation, check out the +curl website's [documentation section](https://curl.se/docs/) for +general curl stuff or the [libcurl section](https://curl.se/libcurl/) for +libcurl related documentation. diff --git a/deps/curl/docs/RELEASE-PROCEDURE.md b/deps/curl/docs/RELEASE-PROCEDURE.md new file mode 100644 index 0000000..0ce02fb --- /dev/null +++ b/deps/curl/docs/RELEASE-PROCEDURE.md @@ -0,0 +1,117 @@ +curl release procedure - how to do a release +============================================ + +in the source code repo +----------------------- + +- run `./scripts/copyright.pl` and correct possible omissions + +- edit `RELEASE-NOTES` to be accurate + +- update `docs/THANKS` + +- make sure all relevant changes are committed on the master branch + +- tag the git repo in this style: `git tag -a curl-7_34_0`. -a annotates the + tag and we use underscores instead of dots in the version number. Make sure + the tag is GPG signed (using -s). + +- run `./maketgz 7.34.0` to build the release tarballs. It is important that + you run this on a machine with the correct set of autotools etc installed + as this is what then will be shipped and used by most users on \*nix like + systems. + +- push the git commits and the new tag + +- GPG sign the 4 tarballs as `maketgz` suggests + +- upload the 8 resulting files to the primary download directory + +in the curl-www repo +-------------------- + +- edit `Makefile` (version number and date), + +- edit `_newslog.html` (announce the new release) and + +- edit `_changes.html` (insert changes+bugfixes from RELEASE-NOTES) + +- commit all local changes + +- tag the repo with the same name as used for the source repo. + +- make sure all relevant changes are committed and pushed on the master branch + + (the website then updates its contents automatically) + +on GitHub +--------- + +- edit the newly made release tag so that it is listed as the latest release + +inform +------ + +- send an email to curl-users, curl-announce and curl-library. Insert the + RELEASE-NOTES into the mail. + +celebrate +--------- + +- suitable beverage intake is encouraged for the festivities + +curl release scheduling +======================= + +Release Cycle +------------- + +We normally do releases every 8 weeks on Wednesdays. If important problems +arise, we can insert releases outside the schedule or we can move the release +date. + +Each 8 week (56 days) release cycle is divided into three distinct periods: + +- During the first 10 calendar days after a release, we are in "cool down". We + do not merge features but only bug-fixes. If a regression is reported, we + might do a follow-up patch release. + +- During the following 3 weeks (21 days) there is a feature window: we allow + new features and changes to curl and libcurl. If we accept any such changes, + we bump the minor number used for the next release. + +- During the next 25 days we are in feature freeze. We do not merge any + features or changes, and we only focus on fixing bugs and polishing things + to make the pending release a solid one. + +If a future release date happens to end up on a "bad date", like in the middle +of common public holidays or when the lead release manager is unavailable, the +release date can be moved forwards or backwards a full week. This is then +advertised well in advance. + +Critical problems +----------------- + +We can break the release cycle and do a patch release at any point if a +critical enough problem is reported. There is no exact definition of how to +assess such criticality, but if an issue is highly disturbing or has a +security impact on a large enough share of the user population it might +qualify. + +If you think an issue qualifies, bring it to the curl-library mailing list and +push for it. + +Coming dates +------------ + +Based on the description above, here are some planned release dates (at the +time of this writing): + +- October 11, 2023 +- December 6, 2023 +- January 31, 2024 +- March 27, 2024 +- May 22, 2024 +- July 17, 2024 +- September 11, 2024 +- November 6, 2024 diff --git a/deps/curl/docs/ROADMAP.md b/deps/curl/docs/ROADMAP.md new file mode 100644 index 0000000..4642938 --- /dev/null +++ b/deps/curl/docs/ROADMAP.md @@ -0,0 +1,24 @@ +# curl the next few years - perhaps + +Roadmap of things Daniel Stenberg wants to work on next. It is intended to +serve as a guideline for others for information, feedback and possible +participation. + +## "Complete" the HTTP/3 support + +curl has experimental support for HTTP/3 since a good while back. There are +some functionality missing and once the final specs are published we want to +eventually remove the "experimental" label from this functionality. + +## HTTPS DNS records + +As a DNS version of alt-svc and also a pre-requisite for ECH (see below). + +See: https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-02 + +## ECH (Encrypted Client Hello - formerly known as ESNI) + + See Daniel's post on [Support of Encrypted + SNI](https://curl.se/mail/lib-2019-03/0000.html) on the mailing list. + + Initial work exists in [PR 4011](https://github.com/curl/curl/pull/4011) diff --git a/deps/curl/docs/RUSTLS.md b/deps/curl/docs/RUSTLS.md new file mode 100644 index 0000000..7a0d806 --- /dev/null +++ b/deps/curl/docs/RUSTLS.md @@ -0,0 +1,26 @@ +# Rustls + +[Rustls is a TLS backend written in Rust](https://docs.rs/rustls/). Curl can +be built to use it as an alternative to OpenSSL or other TLS backends. We use +the [rustls-ffi C bindings](https://github.com/rustls/rustls-ffi/). This +version of curl depends on version v0.10.0 of rustls-ffi. + +# Building with rustls + +First, [install Rust](https://rustup.rs/). + +Next, check out, build, and install the appropriate version of rustls-ffi: + + % cargo install cbindgen + % git clone https://github.com/rustls/rustls-ffi -b v0.10.0 + % cd rustls-ffi + % make + % make DESTDIR=${HOME}/rustls-ffi-built/ install + +Now configure and build curl with rustls: + + % git clone https://github.com/curl/curl + % cd curl + % autoreconf -fi + % ./configure --with-rustls=${HOME}/rustls-ffi-built + % make diff --git a/deps/curl/docs/SECURITY-ADVISORY.md b/deps/curl/docs/SECURITY-ADVISORY.md new file mode 100644 index 0000000..0ddc38b --- /dev/null +++ b/deps/curl/docs/SECURITY-ADVISORY.md @@ -0,0 +1,129 @@ +# Anatomy of a curl security advisory + +As described in the [Security Process](https://curl.se/dev/secprocess.html) +document, when a security vulnerability has been reported to the project and +confirmed, we author an advisory document for the issue. It should ideally +be written in cooperation with the reporter to make sure all the angles and +details of the problem are gathered and described correctly and succinctly. + +## New document + +A security advisory for curl is created in the `docs/` folder in the +[curl-www](https://github.com/curl/curl-www) repository. It should be named +`$CVEID.md` where `$CVEID` is the full CVE Id that has been registered for the +flaw. Like `CVE-2016-0755`. The `.md` extension of course means that the +document is written using markdown. + +The standard way to go about this is to first write the `VULNERABILITY` +section for the document, so that there is description of the flaw available, +then paste this description into the CVE Id request. + +### `vuln.pm` + +The new issue should be entered at the top of the list in the file `vuln.pm` +in the same directory. It holds a large array with all published curl +vulnerabilities. All fields should be filled in accordingly, separated by a +pipe character (`|`). + +The eleven fields for each CVE in `vuln.pm` are, in order: + + HTML page name, first vulnerable version, last vulnerable version, name of + the issue, CVE Id, announce date (`YYYYMMDD`), report to the project date + (`YYYYMMDD`), CWE, awarded reward amount (USD), area (single word), C-issue + (`-` if not a C issue at all, `OVERFLOW` , `OVERREAD`, `DOUBLE_FREE`, + `USE_AFTER_FREE`, `NULL_MISTAKE`, `UNINIT`) + +### `Makefile` + +The new CVE web page file name needs to be added in the `Makefile`'s `CVELIST` +macro. + +When the markdown is in place and the `Makefile` and `vuln.pm` are updated, +all other files and metadata for all curl advisories and versions get +generated automatically using those files. + +## Document format + +The easy way is to start with a recent previously published advisory and just +blank out old texts and save it using a new name. Save the subtitles and +general layout. + +Some details and metadata will be extracted from this document so it is +important to stick to the existing format. + +The first list must be the title of the issue. + +### VULNERABILITY + +The first subtitle should be `VULNERABILITY`. That should then include a +through and detailed description of the flaw. Including how it can be +triggered and maybe something about what might happen if triggered or +exploited. + +### INFO + +The next section is `INFO` which adds meta data information about the flaw. It +specifically mentions the official CVE Id for the issue and it must list the +CWE Id, starting on its own line. We write CWE identifiers in advisories with +the full (official) explanation on the right side of a colon. Like this: + +`CWE-305: Authentication Bypass by Primary Weakness` + +### AFFECTED VERSIONS + +The third section first lists what versions that are affected, then adds +clarity by stressing what versions that are *not* affected. A third line adds +information about which specific git commit that introduced the vulnerability. + +The `Introduced-in` commit should be a full URL that displays the commit, but +should work as a stand-alone commit hash if everything up to the last slash is +cut out. + +An example using the correct syntax: + +~~~ +- Affected versions: curl 7.16.1 to and including 7.88.1 +- Not affected versions: curl < 7.16.1 and curl >= 8.0.0 +- Introduced-in: https://github.com/curl/curl/commit/2147284cad +~~~ + +### THE SOLUTION + +This section describes and discusses the fix. The only mandatory information +here is the link to the git commit that fixes the problem. + +The `Fixed-in` value should be a full URL that displays the commit, but should +work as a stand-alone commit hash if everything up to the last slash is cut +out. + +Example: + +`- Fixed-in: https://github.com/curl/curl/commit/af369db4d3833272b8ed` + +### RECOMMENDATIONS + +This section lists the recommended actions for the users in a top to bottom +priority order and should ideally contain three items but no less than two. + +The top two are almost always `upgrade curl to version XXX` and `apply the +patch to your local version`. + +### TIMELINE + +Detail when this report was received in the project. When package distributors +were notified (via the distros mailing list or similar) + +When the advisory and fixed version are released. + +### CREDITS + +Mention the reporter and patch author at least, then everyone else involved +you think deserves a mention. + +If you want to mention more than one name, separate the names with comma +(`,`). + +~~~ +- Reported-by: Full Name +- Patched-by: Full Name +~~~ diff --git a/deps/curl/docs/SSL-PROBLEMS.md b/deps/curl/docs/SSL-PROBLEMS.md new file mode 100644 index 0000000..afe4250 --- /dev/null +++ b/deps/curl/docs/SSL-PROBLEMS.md @@ -0,0 +1,97 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + +# SSL problems + + First, let's establish that we often refer to TLS and SSL interchangeably as + SSL here. The current protocol is called TLS, it was called SSL a long time + ago. + + There are several known reasons why a connection that involves SSL might + fail. This is a document that attempts to detail the most common ones and + how to mitigate them. + +## CA certs + + CA certs are used to digitally verify the server's certificate. You need a + "ca bundle" for this. See lots of more details on this in the `SSLCERTS` + document. + +## CA bundle missing intermediate certificates + + When using said CA bundle to verify a server cert, you will experience + problems if your CA store does not contain the certificates for the + intermediates if the server does not provide them. + + The TLS protocol mandates that the intermediate certificates are sent in the + handshake, but as browsers have ways to survive or work around such + omissions, missing intermediates in TLS handshakes still happen that + browser-users will not notice. + + Browsers work around this problem in two ways: they cache intermediate + certificates from previous transfers and some implement the TLS "AIA" + extension that lets the client explicitly download such certificates on + demand. + +## Protocol version + + Some broken servers fail to support the protocol negotiation properly that + SSL servers are supposed to handle. This may cause the connection to fail + completely. Sometimes you may need to explicitly select a SSL version to use + when connecting to make the connection succeed. + + An additional complication can be that modern SSL libraries sometimes are + built with support for older SSL and TLS versions disabled! + + All versions of SSL and the TLS versions before 1.2 are considered insecure + and should be avoided. Use TLS 1.2 or later. + +## Ciphers + + Clients give servers a list of ciphers to select from. If the list does not + include any ciphers the server wants/can use, the connection handshake + fails. + + curl has recently disabled the user of a whole bunch of seriously insecure + ciphers from its default set (slightly depending on SSL backend in use). + + You may have to explicitly provide an alternative list of ciphers for curl + to use to allow the server to use a weak cipher for you. + + Note that these weak ciphers are identified as flawed. For example, this + includes symmetric ciphers with less than 128 bit keys and RC4. + + Schannel in Windows XP is not able to connect to servers that no longer + support the legacy handshakes and algorithms used by those versions, so we + advise against building curl to use Schannel on really old Windows versions. + + Reference: [Prohibiting RC4 Cipher + Suites](https://datatracker.ietf.org/doc/html/draft-popov-tls-prohibiting-rc4-01) + +## Allow BEAST + + BEAST is the name of a TLS 1.0 attack that surfaced 2011. When adding means + to mitigate this attack, it turned out that some broken servers out there in + the wild did not work properly with the BEAST mitigation in place. + + To make such broken servers work, the --ssl-allow-beast option was + introduced. Exactly as it sounds, it re-introduces the BEAST vulnerability + but on the other hand it allows curl to connect to that kind of strange + servers. + +## Disabling certificate revocation checks + + Some SSL backends may do certificate revocation checks (CRL, OCSP, etc) + depending on the OS or build configuration. The --ssl-no-revoke option was + introduced in 7.44.0 to disable revocation checking but currently 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 cannot + be bypassed. This option may have broader support to accommodate other SSL + backends in the future. + + References: + + https://curl.se/docs/ssl-compared.html diff --git a/deps/curl/docs/SSLCERTS.md b/deps/curl/docs/SSLCERTS.md new file mode 100644 index 0000000..4094e2f --- /dev/null +++ b/deps/curl/docs/SSLCERTS.md @@ -0,0 +1,155 @@ +SSL Certificate Verification +============================ + +SSL is TLS +---------- + +SSL is the old name. It is called TLS these days. + +Native SSL +---------- + +If libcurl was built with Schannel or Secure Transport support (the native SSL +libraries included in Windows and Mac OS X), then this does not apply to +you. Scroll down for details on how the OS-native engines handle SSL +certificates. If you are not sure, then run "curl -V" and read the results. If +the version string says `Schannel` in it, then it was built with Schannel +support. + +It is about trust +----------------- + +This system is about trust. In your local CA certificate store you have certs +from *trusted* Certificate Authorities that you then can use to verify that +the server certificates you see are valid. They are signed by one of the +certificate authorities you trust. + +Which certificate authorities do you trust? You can decide to trust the same +set of companies your operating system trusts, or the set one of the known +browsers trust. That is basically trust via someone else you trust. You should +just be aware that modern operating systems and browsers are setup to trust +*hundreds* of companies and in recent years several certificate authorities +have been found untrustworthy. + +Certificate Verification +------------------------ + +libcurl performs peer SSL certificate verification by default. This is done +by using a CA certificate store that the SSL library can use to make sure the +peer's server certificate is valid. + +If you communicate with HTTPS, FTPS or other TLS-using servers using +certificates in the CA store, you can be sure that the remote server really is +the one it claims to be. + +If the remote server uses a self-signed certificate, if you do not install a CA +cert store, if the server uses a certificate signed by a CA that is not +included in the store you use or if the remote host is an impostor +impersonating your favorite site, and you want to transfer files from this +server, do one of the following: + + 1. Tell libcurl to *not* verify the peer. With libcurl you disable this with + `curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, FALSE);` + + With the curl command line tool, you disable this with `-k`/`--insecure`. + + 2. Get a CA certificate that can verify the remote server and use the proper + option to point out this CA cert for verification when connecting. For + libcurl hackers: `curl_easy_setopt(curl, CURLOPT_CAINFO, cacert);` + + With the curl command line tool: `--cacert [file]` + + 3. Add the CA cert for your server to the existing default CA certificate + store. The default CA certificate store can be changed at compile time with + the following configure options: + + `--with-ca-bundle=FILE`: use the specified file as the CA certificate + store. CA certificates need to be concatenated in PEM format into this + file. + + `--with-ca-path=PATH`: use the specified path as CA certificate store. CA + certificates need to be stored as individual PEM files in this directory. + You may need to run c_rehash after adding files there. + + If neither of the two options is specified, configure will try to + auto-detect a setting. It's also possible to explicitly not set any + default store but rely on the built in default the crypto library may + provide instead. You can achieve that by passing both + `--without-ca-bundle` and `--without-ca-path` to the configure script. + + If you use Internet Explorer, this is one way to get extract the CA cert + for a particular server: + + - View the certificate by double-clicking the padlock + - Find out where the CA certificate is kept (Certificate> + Authority Information Access>URL) + - Get a copy of the crt file using curl + - Convert it from crt to PEM using the OpenSSL tool: + `openssl x509 -inform DES -in yourdownloaded.crt -out outcert.pem -text` + - Add the `outcert.pem` to the CA certificate store or use it stand-alone + as described below. + + If you use the `openssl` tool, this is one way to get extract the CA cert + for a particular server: + + - `openssl s_client -showcerts -servername server -connect server:443 > cacert.pem` + - type "quit", followed by the "ENTER" key + - The certificate will have "BEGIN CERTIFICATE" and "END CERTIFICATE" + markers. + - If you want to see the data in the certificate, you can do: `openssl + x509 -inform PEM -in certfile -text -out certdata` where `certfile` is + the cert you extracted from logfile. Look in `certdata`. + - If you want to trust the certificate, you can add it to your CA + certificate store or use it stand-alone as described. Just remember that + the security is no better than the way you obtained the certificate. + + 4. If you are using the curl command line tool, you can specify your own CA + cert file by setting the environment variable `CURL_CA_BUNDLE` to the path + of your choice. + + If you are using the curl command line tool on Windows, curl will search + for a CA cert file named "curl-ca-bundle.crt" in these directories and in + this order: + 1. application's directory + 2. current working directory + 3. Windows System directory (e.g. C:\windows\system32) + 4. Windows Directory (e.g. C:\windows) + 5. all directories along %PATH% + + 5. Get a better/different/newer CA cert bundle! One option is to extract the + one a recent Firefox browser uses by running 'make ca-bundle' in the curl + build tree root, or possibly download a version that was generated this + way for you: [CA Extract](https://curl.se/docs/caextract.html) + +Neglecting to use one of the above methods when dealing with a server using a +certificate that is not signed by one of the certificates in the installed CA +certificate store, will cause SSL to report an error ("certificate verify +failed") during the handshake and SSL will then refuse further communication +with that server. + +Certificate Verification with Schannel and Secure Transport +----------------------------------------------------------- + +If libcurl was built with Schannel (Microsoft's native TLS engine) or Secure +Transport (Apple's native TLS engine) support, then libcurl will still perform +peer certificate verification, but instead of using a CA cert bundle, it will +use the certificates that are built into the OS. These are the same +certificates that appear in the Internet Options control panel (under Windows) +or Keychain Access application (under OS X). Any custom security rules for +certificates will be honored. + +Schannel will run CRL checks on certificates unless peer verification is +disabled. Secure Transport on iOS will run OCSP checks on certificates unless +peer verification is disabled. Secure Transport on OS X will run either OCSP +or CRL checks on certificates if those features are enabled, and this behavior +can be adjusted in the preferences of Keychain Access. + +HTTPS proxy +----------- + +Since version 7.52.0, curl can do HTTPS to the proxy separately from the +connection to the server. This TLS connection is handled separately from the +server connection so instead of `--insecure` and `--cacert` to control the +certificate verification, you use `--proxy-insecure` and `--proxy-cacert`. +With these options, you make sure that the TLS connection and the trust of the +proxy can be kept totally separate from the TLS connection to the server. diff --git a/deps/curl/docs/THANKS b/deps/curl/docs/THANKS new file mode 100644 index 0000000..88d924f --- /dev/null +++ b/deps/curl/docs/THANKS @@ -0,0 +1,3044 @@ + This project has been alive for many years. Countless people have provided + feedback that have improved curl. Here follows a list of people that have + contributed (a-z order). + + If you have contributed but are missing here, please let us know! + +0xee on github +0xflotus on github +12932 on github +1337vt on github +1ocalhost on github +3dyd on github +3eka on github +8U61ife on github +a1346054 on github +Aaro Koskinen +Aaron Oneal +Aaron Orenstein +Aaron Scarisbrick +aasivov on github +Abhinav Singh +Abram Pousada +accountantM on github +AceCrow on Github +ad0p on github +Adam Averay +Adam Barclay +Adam Brown +Adam Coyne +Adam D. Moss +Adam Langley +Adam Light +Adam Marcionek +Adam Piggott +Adam Rosenfield +Adam Sampson +Adam Tkac +Adnan Khan +adnn on github +Adrian Burcea +Adrian Peniak +Adrian Schuur +Adriano Meirelles +afrind on github +Aftab Alam +ahodesuka on github +ajak in #curl +Ajit Dhumale +Akhil Kedia +Aki Koskinen +Akos Pasztory +Akshay Vernekar +Alain Danteny +Alain Miniussi +Alan Jenkins +Alan Pinstein +Albert Chin-A-Young +Albert Choy +Albin Vass +Alejandro Alvarez Ayllon +Alejandro Colomar +Alejandro R. Sedeño +Aleksandar Milivojevic +Aleksander Mazur +Aleksandr Krotov +Aleksey Tulinov +Ales Mlakar +Ales Novak +Alessandro Ghedini +Alessandro Vesely +Alex aka WindEagle +Alex Baines +Alex Bligh +Alex Bozarth +Alex Chan +Alex Crichton +Alex Fishman +Alex Gaynor +Alex Grebenschikov +Alex Gruz +Alex Kiernan +Alex Klyubin +Alex Konev +Alex Malinovich +Alex Mayorga +Alex McLellan +Alex Neblett +Alex Nichols +Alex Potapenko +Alex Rousskov +Alex Samorukov +Alex Suykov +Alex Vinnik +Alex Xu +Alexander Beedie +Alexander Chuykov +Alexander Dyagilev +Alexander Elgert +Alexander Jaeger +Alexander Kanavin +Alexander Klauer +Alexander Kourakos +Alexander Krasnostavsky +Alexander Lazic +Alexander Pepper +Alexander Peslyak +Alexander Sinditskiy +Alexander Traud +Alexander V. Tikhonov +Alexander Zhuravlev +Alexandre Bury +Alexandre Ferrieux +Alexandre Pion +Alexey Borzov +Alexey Eremikhin +Alexey Larikov +Alexey Melnichuk +Alexey Pesternikov +Alexey Savchuk +Alexey Simak +Alexey Zakhlestin +Alexis Carvalho +Alexis La Goutte +Alexis Vachette +Alfonso Martone +Alfred Gebert +Ali Khodkar +Ali Utku Selen +ALittleDruid on github +Allen Pulsifer +Alois Klink +Alona Rossen +Amaury Denoyelle +amishmm on github +Amit Katyal +Ammar Faizi +Amol Pattekar +Amr Shahin +Anatol Belski +Anatoli Tubman +Anders Bakken +Anders Berg +Anders Gustafsson +Anders Havn +Anders Roxell +Anderson Sasaki +Anderson Toshiyuki Sasaki +Andi Jahja +Andre Guibert de Bruet +Andre Heinecke +Andrea Pappacoda +Andreas Damm +Andreas Falkenhahn +Andreas Farber +Andreas Fischer +Andreas Huebner +Andreas Kostyrka +Andreas Malzahn +Andreas Ntaflos +Andreas Olsson +Andreas Rieke +Andreas Roth +Andreas Schneider +Andreas Schuldei +Andreas Sommer +Andreas Streichardt +Andreas Wurf +Andrei Benea +Andrei Bica +Andrei Cipu +Andrei Karas +Andrei Kurushin +Andrei Neculau +Andrei Rybak +Andrei Sedoi +Andrei Valeriu BICA +Andrei Virtosu +Andrej E Baranov +Andrew Barnert +Andrew Barnes +Andrew Benham +Andrew Biggs +Andrew Bushnell +Andrew de los Reyes +Andrew Francis +Andrew Fuller +Andrew Ishchuk +Andrew Krieger +Andrew Kurushin +Andrew Lambert +Andrew Moise +Andrew Potter +Andrew Robbins +Andrew Wansink +Andrey Alifanov +Andrey Gursky +Andrey Labunets +Andrii Moiseiev +Andrius Merkys +Andrés García +Andy Alt +Andy Cedilnik +Andy Fiddaman +Andy Serpa +Andy Stamp +Andy Tsouladze +Angus Mackay +anio on github +anon00000000 on github +anshnd on github +Anssi Kolehmainen +Antarpreet Singh +Anthon Pang +Anthony Avina +Anthony Bryan +Anthony G. Basile +Anthony Hu +Anthony Ramine +Anthony Shaw +Antoine Aubert +Antoine Calando +Antoine du Hamel +Antoine Pietri +Antoine Pitrou +Anton Bychkov +Anton Gerasimov +Anton Kalmykov +Anton Malov +Anton Yabchinskiy +Antoni Villalonga +Antonio Larrosa +Antony74 on github +Antti Hätälä +Anubhav Rai +apparentorder on github +April King +arainchik on github +Archangel_SDY on github +Arkadiusz Miskiewicz +Armel Asselin +Arnaud Compan +Arnaud Ebalard +Arnaud Rebillout +Arne Soete +Aron Bergman +Aron Rotteveel +Artak Galoyan +Arthur Murray +Artur Sinila +Arve Knudsen +Arvid Norberg +arvids-kokins-bidstack on github +asavah on github +Ashish Shukla +Ashwin Metpalli +Ask Bjørn Hansen +Askar Safin +AtariDreams on github +Ates Goral +atjg on github +Augustus Saunders +Austin Green +Avery Fay +awesomenode on github +Axel Chong +Axel Morawietz +Axel Tillequin +Ayesh Karunaratne +Ayoub Boudhar +Ayushman Singh Chauhan +b9a1 on github +Bachue Zhou +Baitinq on github +Balaji Parasuram +Balaji S Rao +Balaji Salunke +Balakrishnan Balasubramanian +Balazs Kovacsics +balikalina on Github +Balint Szilakszi +Barry Abrahamson +Barry Pollard +Bart Whiteley +Baruch Siach +Bas Mevissen +Bas van Schaik +Bastian Krause +Bastien Bouclet +Basuke Suzuki +baumanj on github +bdry on github +beckenc on github +Ben Boeckel +Ben Darnell +Ben Fritz +Ben Greear +Ben Kohler +Ben Madsen +Ben Noordhuis +Ben Van Hof +Ben Voris +Ben Winslow +Benau on github +Benbuck Nason +Benjamin Gerard +Benjamin Gilbert +Benjamin Johnson +Benjamin Kircher +Benjamin Loison +Benjamin Riefenstahl +Benjamin Ritcey +Benjamin Sergeant +Benoit Neil +Benoit Pierre +Benoit Sigoure +Bernard Leak +Bernard Spil +Bernat Mut +Bernd Mueller +Bernhard Iselborn +Bernhard M. Wiedemann +Bernhard Reutner-Fischer +Bernhard Walle +Bert Huijben +Bertrand Demiddelaer +Bertrand Simonnet +beslick5 on github +Bevan Weiss +Bill Doyle +Bill Egert +Bill Hoffman +Bill Middlecamp +Bill Nagel +Bill Pyne +billionai on github +Billyzou0741326 on github +Bin Lan +Bin Meng +Biswapriyo Nath +Bjarni Ingi Gislason +Bjoern Franke +Bjoern Sikora +Bjorn Augustsson +Bjorn Reese +Björn Stenberg +black-desk on github +Blaise Potard +Blake Burkhart +bnfp on github +Bo Anderson +Bob Relyea +Bob Richmond +Bob Schader +bobmitchell1956 on github +Bodo Bergmann +Bogdan Nicula +boilingoden +Boris Kuschel +Boris Okunskiy +Boris Rasin +Boris Verkhovskiy +Brad Burdick +Brad Fitzpatrick +Brad Forschinger +Brad Harder +Brad Hards +Brad King +Brad Spencer +Bradford Bruce +bramus on github +Brandon Casey +Brandon Dong +Brandon Wang +BratSinot on github +Brendan Jurd +Brent Beardsley +Brian Akins +Brian Bergeron +Brian Carpenter +Brian Chaplin +Brian Childs +Brian Chrisman +Brian Dessent +Brian E. Gallew +Brian Green +Brian Inglis +Brian J. Murrell +Brian Lund +Brian Nixon +Brian Prodoehl +Brian R Duffy +Brian Ulm +Brock Noland +Bru Rom +Bruce Mitchener +Bruce Stephens +BrumBrum on hackerone +Bruno Baguette +Bruno de Carvalho +Bruno Grasselli +Bruno Henrique Batista Cruz da Silva +Bruno Thomsen +Bryan Henderson +Bryan Kemp +bsammon on github +bsergean on github +Bubu on github +buzo-ffm on github +bxac on github +Bylon2 on github +Byrial Jensen +Caleb Raitto +Calvin Buckley +calvin2021y on github +Cameron Blomquist +Cameron Cawley +Cameron Kaiser +Cameron MacMinn +Cameron Will +Camille Moncelier +Cao ZhenXiang +Caolan McNamara +Captain Basil +Carie Pointer +Carl Zogheib +Carlo Alberto +Carlo Cannas +Carlo Marcelo Arenas Belón +Carlo Teubner +Carlo Wood +Carlos Henrique Lima Melara +Carlos ORyan +Carsten Lange +Casey Bodley +Casey O'Donnell +Catalin Patulea +causal-agent on github +cbartl on github +cclauss on github +Cering on github +Cesar Eduardo Barros +Chad Monroe +Chandrakant Bagul +Charles Cazabon +Charles Kerr +Charles Romestant +Charlie C +Chen Prog +Cherish98 on github +Chester Liu +Chih-Chung Chang +Chih-Hsuan Yen +Chilledheart on github +Chloe Kudryavtsev +Chris "Bob Bob" +Chris Araman +Chris Carlmar +Chris Combes +Chris Conlon +Chris Deidun +Chris Faherty +Chris Flerackers +Chris Gaukroger +Chris Maltby +Chris Mumford +Chris Paulson-Ellis +Chris Roberts +Chris Smowton +Chris Talbot +Chris Young +Christian Fillion +Christian Grothoff +Christian Heimes +Christian Hesse +Christian Hägele +Christian Krause +Christian Kurz +Christian Robottom Reis +Christian Schmitz +Christian Stewart +Christian Vogt +Christian Weisgerber +Christoph Krey +Christoph M. Becker +Christoph Reiter +Christophe Demory +Christophe Dervieux +Christophe Legry +Christopher Conroy +Christopher Degawa +Christopher Head +Christopher Palow +Christopher R. Palmer +Christopher Reid +Christopher Sauer +Christopher Stone +Chungtsun Li +Ciprian Badescu +civodul on github +Claes Jakobsson +Clarence Gardner +Claudio Neves +claudiusaiz on github +clbr on github +Clemens Gruber +Cliff Crosland +Clifford Wolf +Clint Clayton +Cloudogu Siebels +Clément Notin +cmfrolick on github +codesniffer13 on github +Cody Jones +Cody Mack +COFFEETALES on github +coinhubs on github +Colby Ranger +Colin Blair +Colin Cross +Colin Hogben +Colin Leroy +Colin O'Dell +Colin Watson +Colm Buckley +Colman Mbuya +Constantine Sapuntzakis +consulion on github +coralw on github +correctmost on github +Cory Benfield +Cory Nelson +Costya Shulyupin +Craig A West +Craig Andrews +Craig Davison +Craig de Stigter +Craig Markwardt +crazydef on github +Cris Bailiff +Cristian Greco +Cristian Morales Vega +Cristian Rodríguez +Curt Bogmine +Cynthia Coan +Cyril B +Cyrill Osterwalder +Cédric Connes +Cédric Deltheil +D. Flinkmann +d4d on hackerone +d912e3 on github +Da-Yoon Chung +daboul on github +Dag Ekengren +Dagobert Michelsen +Daiki Ueno +Dair Grant +Dambaev Alexander +Damian Dixon +Damien Adant +Damien Vielpeau +Damien Walsh +Dan Becker +Dan Cristian +Dan Donahue +Dan Fandrich +Dan Johnson +Dan Kenigsberg +Dan Locks +Dan McNulty +Dan Nelson +Dan Petitt +Dan Torop +Dan Zitter +Daniel at touchtunes +Daniel Bankhead +Daniel Black +Daniel Carpenter +Daniel Cater +Daniel Egger +Daniel Faust +Daniel Gustafsson +Daniel Hallberg +Daniel Hwang +Daniel JeliÅ„ski +Daniel Johnson +Daniel Kahn Gillmor +Daniel Katz +Daniel Krügler +Daniel KureÄka +Daniel Lee Hwang +Daniel Lublin +Daniel Marjamäki +Daniel Melani +Daniel Mentz +Daniel Romero +Daniel Schauenberg +Daniel Seither +Daniel Shahaf +Daniel Silverstone +Daniel Steinberg +Daniel Stenberg +Daniel Theron +Daniel Valenzuela +Daniel Woelfel +Daphne Luong +Dario Nieuwenhuis +Dario Weißer +Darryl House +Darshan Mody +Darío Hereñú +dasimx on github +Dave Cottlehuber +Dave Dribin +Dave Halbakken +Dave Hamilton +Dave May +Dave Reisner +Dave Thompson +Dave Vasilevsky +Davey Shafik +David Bau +David Benjamin +David Binderman +David Blaikie +David Bohman +David Byron +David Carlier +David Cohen +David Cook +David Demelier +David E. Narváez +David Earl +David Eriksson +David Garske +David Goerger +David Houlder +David Hu +David Hull +David J Meyer +David James +David Kalnischkies +David Kierznowski +David Kimdon +David L. +David Lang +David LeBlanc +David Lopes +David Lord +David McCreedy +David McLaughlin +David Odin +David Phillips +David Rosenstrauch +David Ryskalczyk +David Sanderson +David Schweikert +David Shaw +David Strauss +David Suter +David Tarendash +David Thiel +David Walser +David Woodhouse +David Wright +David Yan +Davide Cassioli +Davide Masserut +davidedec on github +dbrowndan on github +dEajL3kA on github +Deal(一线çµ) +dekerser on github +dengjfzh on github +Dengminwen +Denis BaruÄić +Denis Chaplygin +Denis Feklushkin +Denis Goleshchikhin +Denis Laxalde +Denis Ollier +Dennis Clarke +Dennis Felsing +Derek Higgins +Derzsi Dániel +Desmond O. Chang +destman on github +Detlef Schmier +Dheeraj Sangamkar +Didier Brisebourg +Diego Bes +Diego Casorran +Dietmar Hauser +Dilyan Palauzov +Dima Barsky +Dima Pasechnik +Dima Tisnek +Dimitar Boevski +Dimitre Dimitrov +Dimitrios Apostolou +Dimitrios Siganos +Dimitris Sarris +Dinar +Diogo Teles Sant'Anna +Dion Williams +Dirk Eddelbuettel +Dirk Feytons +Dirk Manske +Dirk Rosenkranz +Dirk Wetter +Dirkjan Bussink +Diven Qi +divinity76 on github +Divy Le Ray +dkjjr89 on github +dkwolfe4 on github +Dmitri Shubin +Dmitri Tikhonov +Dmitriy Sergeyev +dmitrmax on github +Dmitry Atamanov +Dmitry Bartsevich +Dmitry Eremin-Solenikov +Dmitry Falko +Dmitry Karpov +Dmitry Kostjuchenko +Dmitry Kurochkin +Dmitry Mikhirev +Dmitry Popov +Dmitry Rechkin +Dmitry S. Baikov +Dmitry Wagin +dnivras on github +Dolbneff A.V +Domen Kožar +Domenico Andreoli +Dominick Meglio +Dominik Hölzl +Dominik Klemba +Dominik Thalhammer +Dominique Leuenberger +Don J Olmstead +Dongliang Mu +Doron Behar +Doug Kaufman +Doug Porter +Douglas Creager +Douglas E. Wegscheid +Douglas Kilpatrick +Douglas Mencken +Douglas R. Horner +Douglas R. Reno +Douglas Steinwand +Dov Murik +dpull on github +Drake Arconis +dtmsecurity on github +Duane Cathey +Duncan Mac-Vicar Prett +Duncan Wilcox +Dustin Boswell +Dustin Howett +Dusty Mabe +Duy Phan Thanh +Dwarakanath Yadavalli +Dylan Anthony +Dylan Ellicott +Dylan Salisbury +Dániel Bakai +eaglegai on github +Early Ehlinger +Earnestly on github +Eason-Yu on github +Ebe Janchivdorj +ebejan on github +Ebenezer Ikonne +Ed Morley +ed0d2b2ce19451f2 +Eddie Lumpkin +Edgaras JanuÅ¡auskas +Edin Kadribasic +Edmond Yu +Edoardo Lolletti +Eduard Bloch +Eduard Strehlau +Edward Kimmel +Edward Rudd +Edward Sheldrake +Edward Thomson +Eelco Dolstra +Eetu Ojanen +eeverettrbx on github +Egon Eckert +Egor Pugin +Ehren Bendler +Eldar Zaitov +elelel on github +elephoenix on github +Eli Schwartz +Elia Tufarolo +Elliot Killick +Elliot Saba +Ellis Pritchard +Elmira A Semenova +Elms +Eloy Degen +elsamuko on github +emanruse on github +Emanuele Bovisio +Emanuele Torre +Emil Engler +Emil Lerner +Emil Romanus +Emil Österlund +Emiliano Ida +Emilio Cobos Ãlvarez +Emilio López +Emmanuel Tychon +Enno Boland +Enrico Scholz +Enrik Berkhan +enWILLYado on github +eppesuig +Eramoto Masaya +Eric Cooper +Eric Curtin +Eric Gallager +Eric Hu +Eric Landes +Eric Lavigne +Eric Lubin +Eric Melville +Eric Mertens +Eric Murphy +Eric Musser +Eric Rautman +Eric Rescorla +Eric Ridge +Eric Rosenquist +Eric S. Raymond +Eric Sauvageau +Eric Thelin +Eric Vergnaud +Eric Vigeant +Eric Wong +Eric Wu +Eric Young +Erick Nuwendam +Erik Jacobsen +Erik Janssen +Erik Johansson +Erik Minekus +Erik Olsson +Erik Stenlund +Ernest Beinrohr +Ernst Sjöstrand +Erwan Legrand +Erwin Authried +Esdras de Morais da Silva +Estanislau Augé-Pujadas +Ethan Glasser Camp +Etienne Simard +Eugene Kotlyarov +Evan Jordan +Evangelos Foutras +Even Rouault +Evert Pot +Evgeny Grin (Karlson2k) +Evgeny Turnaev +eXeC64 on github +Eygene Ryabinkin +Eylem Ugurel +Fabian Fischer +Fabian Frank +Fabian Hiernaux +Fabian Keil +Fabian Ruff +Fabian Yamaguchi +Fabrice Fontaine +Fabrizio Ammollo +Fahim Chandurwala +Faizur Rahman +Faraz Fallahi +Farzin on github +Fata Nugraha +Fawad Mirza +FC Stegerman +fds242 on github +Federico Bianchi +Federico Pellegrin +Fedor Karpelevitch +Fedor Korotkov +FeignClaims on github +Feist Josselin +Felipe Gasper +Felix Hädicke +Felix Kaiser +Felix von Leitner +Felix Yan +Feng Tu +Fernando Muñoz +Filip Lundgren +Filip Salomonsson +finkjsc on github +Firefox OS +Flameborn on github +Flavio Medeiros +Florian Kohnhäuser +Florian Pritz +Florian Schoppmann +Florian Van Heghe +Florian Weimer +Florin Petriuc +Forrest Cahoon +Francisco Moraes +Francisco Munoz +Francisco Olarte +Francisco Sedano +Francois Petitjean +Francois Rivard +Frank Denis +Frank Gevaerts +Frank Hempel +Frank Keeney +Frank McGeough +Frank Meier +Frank Ticheler +Frank Van Uffelen +FrantiÅ¡ek KuÄera +François Charlier +François Michel +François Rigault +Frazer Smith +Fred Machado +Fred New +Fred Noz +Fred Stluka +Frederic Lepied +Frederik B +Frederik Wedel-Heinen +Fredrik Thulin +FuccDucc on github +Fujii Hironori +fullincome on github +fundawang on github +Gabriel Corona +Gabriel Kuri +Gabriel Simmer +Gabriel Sjoberg +Gambit Communications +Ganesh Kamath +gaoxingwang on github +Garrett Holmstrom +Garrett Squire +Gary Maxwell +Gaurav Malhotra +Gautam Kachroo +Gautam Mani +Gavin Wong +Gavrie Philipson +Gaz Iqbal +Gaël Portay +gclinch on github +Gealber Morales +Geeknik Labs +Geoff Beier +Georeth Zhou +Georg Horn +Georg Huettenegger +Georg Lippitsch +Georg Wicherski +George Liu +Gerd v. Egidy +Gergely Nagy +Gerhard Herre +Gerome Fournier +Gerrit Bruchhäuser +Gerrit Renker +Ghennadi Procopciuc +Giancarlo Formicuccia +Giaslas Georgios +Gil Weber +Gilad +Gilbert Ramirez Jr. +Gilles Blanc +Gilles Vollant +Giorgos Oikonomou +Gisle Vanem +git-bruh on github +GitYuanQu on github +Giuseppe Attardi +Giuseppe D'Ambrosio +Giuseppe Persico +Gleb Ivanovsky +Glen A Johnson Jr. +Glen Nakamura +Glen Scott +Glenn de boer +Glenn Sheridan +Glenn Strauss +godmar on github +Godwin Stewart +Google Inc. +Gordon Marler +Gorilla Maguila +Goro FUJI +Gou Lingfeng +Graham Campbell +Grant Erickson +Grant Pannell +Greg Hewgill +Greg Morse +Greg Onufer +Greg Pratt +Greg Rowe +Greg Zavertnik +Gregor Jasny +Gregory Jefferis +Gregory Muchka +Gregory Nicholls +Gregory Panakkal +Gregory Szorc +Griffin Downs +Grigory Entin +Grisha Levit +Guenole Bescon +Guido Berhoerster +Guillaume Algis +Guillaume Arluison +guitared on github +Gunamoi Software +Gunter Knauf +guoxinvmware on github +Gustaf Hui +Gustavo Grieco +Guy Poizat +GwanYeong Kim +Gwen Shapira +Gwenole Beauchesne +Gökhan Åžengün +Götz Babin-Ebell +h1zzz on github +H3RSKO on github +Hagai Auro +Haibo Huang +Hakan Sunay Halil +Hamish Mackenzie +hamstergene on github +Han Han +Han Qiao +Hang Kin Lau +Hang Su +Hannah Schierling +Hannes Magnusson +Hanno Böck +Hanno Kranzhoff +Hans Steegers +Hans-Christian Noren Egtvedt +Hans-Jurgen May +Hao Wu +Hardeep Singh +Haris Okanovic +Harold Stuart +Harry Mallon +Harry Sarson +Harry Sintonen +Harshal Pradhan +Hauke Duden +Hayden Roche +He Qin +Heikki Korpela +Heinrich Ko +Heinrich Schaefer +Helge Klein +Helmut K. C. Tessarek +Helwing Lutz +Hendrik Visage +Henning Schild +Henri Gomez +Henrik Gaßmann +Henrik Holst +Henrik Storner +Henry Ludemann +Henry Roeland +Herve Amblard +HexTheDragon +Hide Ishikawa +Hidemoto Nakada +highmtworks on github +Himanshu Gupta +Hind Montassif +Hiroki Kurosawa +Hirotaka Tagawa +Ho-chi Chen +Hoi-Ho Chan +Hongli Lai +Hongyi Zhao +Howard Blaise +Howard Chu +hsiao yi +htasta on github +Hubert Kario +Hugh Macdonald +Hugo van Kemenade +humbleacolyte +Huzaifa Sidhpurwala +huzunhao on github +hydra3333 on github +Hzhijun +iammrtau on github +Ian Blanes +Ian D Allen +Ian Fette +Ian Ford +Ian Gulliver +Ian Lynagh +Ian Spence +Ian Turner +Ian Wilkes +iconoclasthero +icy17 on github +Ignacio Vazquez-Abrams +Igor Franchuk +Igor Khristophorov +Igor Makarov +Igor Novoseltsev +Igor Polyakov +Igor Todorovski +Ihor Karpenko +ihsinme on github +Iida Yosiaki +Ikko Ashimine +Ilguiz Latypov +Ilja van Sprundel +Illarion Taev +illusory-dream on github +Ilmari Lauhakangas +Ilya Kosarev +imilli on github +Immanuel Gregoire +ImpatientHippo on GitHub +Inca R +infinnovation-dev on github +Ingmar Runge +Ingo Ralf Blum +Ingo Wilken +Inho Oh +IonuÈ›-Francisc Oancea +Irfan Adilovic +Ironbars13 on github +Irving Wolfe +Isaac Boukris +Isaiah Norton +Ishan SinghLevett +Ithubg on github +Ivan Avdeev +Ivan Tsybulin +IvanoG on github +Ivo Bellin Salarin +iz8mbw on github +J. Bromley +Jack Boos Yu +Jack Zhang +Jackarain on github +JackBoosY on github +Jacky Lam +Jacob Barthelmeh +Jacob Hoffman-Andrews +Jacob Mealey +Jacob Meuser +Jacob Moshenko +Jacob Tolar +Jactry Zeng +Jad Chamcham +Jaime Fullaondo +jakirkham on github +Jakob Hirsch +Jakub Bochenski +Jakub Jelen +Jakub Wilk +Jakub Zakrzewski +James Atwill +James Brown +James Bursa +James Cheng +James Clancy +James Cone +James Dury +James Fuller +James Gallagher +James Griffiths +James Housley +James Keast +James Knight +James Le Cuirot +James Lucas +James MacMillan +James Slaughter +Jamie Lokier +Jamie Newton +Jamie Wilkinson +Jan Alexander Steffens +Jan Chren +Jan Ehrhardt +Jan Engelhardt +Jan Koen Annot +Jan Kunder +Jan Macku +Jan Mazur +Jan Schaumann +Jan Schmidt +Jan Van Boghout +Jan Venekamp +Jan Verbeek +Jan-Piet Mens +JanB on github +Janne Blomqvist +Janne Johansson +Jared Jennings +Jared Lundell +Jari Aalto +Jari Sundell +jasal82 on github +Jason Baietto +Jason Glasgow +Jason Juang +Jason Lee +Jason Liu +Jason McDonald +Jason S. Priebe +Javier Barroso +Javier Blazquez +Javier G. Sogo +Javier Navarro +Javier Sixto +Jay Austin +Jay Dommaschk +Jayesh A Shah +Jaz Fresh +JazJas on github +jbgoog on github +Jean Fabrice +Jean Gressmann +Jean Jacques Drouin +Jean-Claude Chauve +Jean-Francois Bertrand +Jean-Francois Durand +Jean-Louis Lemaire +Jean-Marc Ranger +Jean-Noël Rouvignac +Jean-Philippe Barrette-LaPierre +Jean-Philippe Menil +Jeff Connelly +Jeff Hodges +Jeff Johnson +Jeff King +Jeff Lawson +Jeff Luszcz +Jeff Mears +Jeff Phillips +Jeff Pohlmeyer +Jeff Weber +Jeffrey Tolar +Jeffrey Walton +jeffrson on github +Jelle van der Waa +Jenny Heino +Jens Finkhaeuser +Jens Rantil +Jens Schleusener +Jeremie Rapin +Jeremy Falcon +Jeremy Friesner +Jeremy Huddleston +Jeremy Lainé +Jeremy Lin +Jeremy Maitin-Shepard +Jeremy Pearson +Jeremy Tan +Jeremy Thibault +Jeroen Koekkoek +Jeroen Ooms +Jerome Mao +Jerome Muffat-Meridol +Jerome Robert +Jerome St-Louis +Jerome Vouillon +Jerry Krinock +Jerry Wu +Jes Badwal +Jesper Jensen +Jesse Chisholm +Jesse Noller +Jesse Tan +jethrogb on github +jhoyla on github +Jie He +Jiehong on github +Jilayne Lovejoy +Jim Beveridge +Jim Drash +Jim Freeman +Jim Fuller +Jim Hollinger +Jim King +Jim Meyering +Jimmy Gaussen +Jiri Dvorak +Jiri Hruska +Jiri Jaburek +Jishan Shaikh +Jiří Malák +jmdavitt on github +jnbr on github +Jocelyn Jaubert +Jochem Broekhoff +Joe Halpin +Joe Malicki +Joe Mason +Joel Chen +Joel Depooter +Joel Jakobsson +Joel Teichroeb +joey-l-us on github +Jofell Gallardo +Johan Anderson +Johan Lantz +Johan Nilsson +Johan van Selst +Johann150 on github +Johannes Bauer +Johannes Ernst +Johannes G. Kristinsson +Johannes Lesr +Johannes Schindelin +John A. Bristor +John Bampton +John Bradshaw +John Butterfield +John Coffey +John Crow +John David Anglin +John DeHelian +John Dennis +John Dunn +John E. Malmberg +John Gardiner Myers +John H. Ayad +John Hascall +John Haugabook +John Hawthorn +John Janssen +John Joseph Bachir +John Kelly +John Kohl +John Lask +John Levon +John Lightsey +John Marino +John Marshall +John McGowan +John P. McCaskey +John Porter +John Schroeder +John Sherrill +John Simpson +John Starks +John Suprock +John V. Chow +John Walker +John Wanghui +John Weismiller +John Wilkinson +John-Mark Bell +Johnny Luong +Jojojov on github +Jon DeVree +Jon Grubbs +Jon Johnson Jr +Jon Nelson +Jon Rumsey +Jon Sargeant +Jon Seymour +Jon Spencer +Jon Torrey +Jon Travis +Jon Turner +Jon Wilkes +Jonas Bülow +Jonas Forsman +Jonas Haag +Jonas Minnberg +Jonas Schnelli +Jonas Vautherin +Jonatan Lander +Jonatan Vela +Jonathan Cardoso Machado +Jonathan Hseu +Jonathan Moerman +Jonathan Nieder +Jonathan Watt +Jonathan Wernberg +Jongki Suwandi +jonny112 on github +Joombalaya on github +Joonas Kuorilehto +Jordan Brown +Jose Alf +Jose Kahan +Josef Wolf +Joseph Chen +Joseph Tharayil +Josh Bialkowski +Josh Brobst +Josh Kapell +Josh McCullough +Josh Soref +joshhe on github +Joshix-1 on github +Joshua Kwan +Joshua Root +Joshua Swink +Josie Huddleston +Josip Medved +Josue Andrade Gomes +José Joaquín Atria +Jozef Kralik +Juan Barreto +Juan Cruz Viotti +Juan F. Codagnone +Juan Ignacio Hervás +Juan RP +Judson Bishop +Juergen Hoetzel +Juergen Wilke +Jukka Pihl +Julian Montes +Julian Noble +Julian Ospald +Julian Romero Nieto +Julian Taylor +Julian Z +Julien Chaffraix +Julien Nabet +Julien Royer +Juliusz Sosinowicz +Jun Tseng +Jun-ichiro itojun Hagino +Jun-ya Kato +jungle-boogie on github +Junho Choi +junsik on github +Jurij Smakov +jurisuk on github +Juro Bystricky +JustAnotherArchivist on github +justchen1369 on github +Justin Clift +Justin Ehlert +Justin Fletcher +Justin Karneges +Justin Maggard +jveazey on github +jvreelanda on github +jvvprasad78 on github +jzinn on github +János Fekete +Jérémy Rabasco +Jérémy Rocher +Jörg Mueller-Tolk +Jörn Hartroth +Jürgen Gmach +K. R. Walker +ka7 on github +Kael1117 on github +Kai Engert +Kai Noda +Kai Pastor +Kai Sommerfeld +Kai-Uwe Rommel +Kalle Vahlman +Kamil Dudka +Kane York +Kang Lin +Kang-Jin Lee +Kantanat Wannapaka +Kareem +Kari Pahula +Karl Chen +Karl Moerder +Karol Pietrzak +Kartatz on Github +Karthikdasari0423 +Karthikdasari0423 on github +Kartik Mahajan +Kaspar Brand +Katie Wang +Katsuhiko YOSHIDA +Kazuho Oku +kchow-FTNT on github +Kees Cook +Kees Dekker +Keitagit-kun on github +Keith MacDonald +Keith McGuigan +Keith Mok +Kelly Kaoudis +Ken Brown +Ken Hirsch +Ken Rastatter +Kenneth Davidson +Kenneth Myhra +Kenny To +Kent Boortz +Kerem Kat +Keshav Krity +Kev Jackson +Kevin Adler +Kevin Baughman +Kevin Burke +Kevin Fisk +Kevin Ji +Kevin Lussier +Kevin R. Bulgrien +Kevin Reed +Kevin Roth +Kevin Ryan +Kevin Smith +Kevin Ushey +Kim Minjoong +Kim Rinnewitz +Kim Vandry +Kimmo Kinnunen +kirbyn17 on hackerone +Kirill Efimov +Kirill Marchuk +Kjell Ericson +Kjetil Jacobsen +Klaus Crusius +Klaus Stein +Klevtsov Vadim +Kobi Gurkan +Koen Dergent +Koichi Shiraishi +kokke on github +Konstantin Isakov +Konstantin Kushnir +KotlinIsland on github +kotoriã®ã­ã“ +kouzhudong on github +Kovalkov Dmitrii +kreshano on github +Kris Kennaway +Krishnendu Majumdar +Krister Johansen +Kristian Gunstone +Kristian Köhntopp +Kristian Mide +Kristiyan Tsaklev +Kristoffer Gleditsch +Kunal Chandarana +Kunal Ekawde +Kurt Fankhauser +Kushal Das +Kvarec Lezki +kwind on github +Kwon-Young Choi +Kyle Abramowitz +Kyle Edwards +Kyle J. McKay +Kyle L. Huff +Kyle Sallee +kyled-dell on github +Kyohei Kadota +Kyselgov E.N +l00p3r on Hackerone +Lachlan O'Dea +Ladar Levison +Lance Ware +Laramie Leavitt +Larry Campbell +Larry Fahnoe +Larry Lin +Larry Stefani +Larry Stone +Lars Buitinck +Lars Francke +Lars Gustafsson +Lars J. Aas +Lars Johannesen +Lars Nilsson +Lars Torben Wilson +Lau +Laurent Bonnans +Laurent Dufresne +Laurent Rabret +Lauri Kasanen +Laurie Clark-Michalek +Lawrence Gripper +Lawrence Matthews +Lawrence Wagerfield +Leah Neukirchen +Leandro Coutinho +Legoff Vincent +Lehel Bernadt +Leif W +Leigh Purdie +Leith Bade +Len Krause +Len Marinaccio +Lenaic Lefever +Lenny Rachitsky +Leo Neat +Leon Breedt +Leon Winter +Leonardo Rosati +Leonardo Taccari +Leszek Kubik +Li Xinwei +Liam Healy +Liam Warfield +LigH-de on github +lijian996 on github +Lijo Antony +lilongyan-huawei on github +Linas Vepstas +Lindley French +Ling Thio +Linos Giannopoulos +Linus Lewandowski +Linus Nielsen Feltzing +Linus Nordberg +Lior Kaplan +Lisa Xu +Litter White +Liviu Chircu +Liza Alenchery +lizhuang0630 on github +lkordos on github +lllaffer on github +Lloyd Fournier +Lluís Batlle i Rossell +locpyl-tidnyd on github +Loganaden Velvindron +Loic Dachary +LoRd_MuldeR +Loren Kirkby +Lorenzo Miniero +Loïc Yhuel +lRoccoon on github +Luan Cestari +Luca Altea +Luca Boccassi +Luca Niccoli +Lucas Adamski +Lucas Clemente Vella +Lucas Holt +Lucas Pardue +Lucas Servén Marín +Lucas Severo +Lucien Zürcher +Ludek Finstrle +Ludovico Cavedon +Ludwig Nussel +Lukas Ruzicka +Lukas Tribus +Lukasz Czekierda +lukaszgn on github +Luke Amery +Luke Call +Luke Dashjr +Luke Granger-Brown +luminixinc on github +Luo Jinghua +Luong Dinh Dung +Luz Paz +Luật Nguyá»…n +lwthiker on github +Lyman Epp +Lyndon Hill +M.R.T on github +Maciej Domanski +Maciej Karpiuk +Maciej Puzio +Maciej W. Rozycki +madblobfish on github +MaeIsBad on github +Mahmoud Samir Fayed +Maks Naumov +Maksim Arhipov +Maksim Kuzevanov +Maksim Sciepanienka +Maksim Stsepanenka +Maksymilian Arciemowicz +Malik Idrees Hasan Khan +Mamoru Tasaka +Mamta Upadhyay +Mandy Wu +Manfred Schwarb +Manuel Massing +Manuj Bhatia +Marc Aldorasi +Marc Boucher +Marc Deslauriers +Marc Doughty +Marc Hesse +Marc Hörsken +Marc Kleine-Budde +Marc Renault +Marc Schlatter +Marc-Antoine Perennou +marc-groundctl on github +Marcel Hernandez +Marcel Raad +Marcel Roelofs +Marcelo Echeverria +Marcelo Juchem +Marcin Adamski +Marcin Gryszkalis +Marcin Konicki +Marcin Rataj +Marco Deckel +Marco G. Salvagno +Marco Kamner +Marco Maggi +Marcos Diazr +Marcus Hoffmann +Marcus Klein +Marcus Sundberg +Marcus T +Marcus Webster +Margu +Marian Klymov +Marin Hannache +Mario Schroeder +Mark Brand +Mark Butler +Mark Davies +Mark Dodgson +Mark Gaiser +Mark Hamilton +Mark Incley +Mark Itzcovitz +Mark Karpeles +Mark Lentczner +Mark Nottingham +Mark Roszko +Mark Salisbury +Mark Seuffert +Mark Snelling +Mark Swaanenburg +Mark Tully +Mark W. Eichin +Mark Wotton +Markus Duft +Markus Elfring +Markus Koetter +Markus Moeller +Markus Oberhumer +Markus Olsson +Markus Sommer +Markus Westerlind +Maros Priputen +Marquis de Muesli +marski on github +Martijn Koster +Martin Ankerl +Martin BaÅ¡ti +Martin C. Martin +Martin D'Aloia +Martin Dorey +Martin Drasar +Martin Dreher +Martin Frodl +Martin Galvan +Martin Gartner +Martin Hager +Martin Halle +Martin Hedenfalk +Martin Howarth +Martin Jansen +Martin Kammerhofer +Martin Kepplinger +Martin Lemke +Martin Schmatz +Martin Skinner +Martin Staael +Martin Storsjö +Martin Strunz +Martin V +Martin Vejnár +Martin Waleczek +Martin Ã…gren +Marty Kuhrt +Maruko +Masaya Suzuki +masbug on github +Massimiliano Fantuzzi +Massimiliano Ziccardi +Massimo Callegari +Master Inspire +MasterInQuestion on github +Mateusz Loskot +Mathew Benson +Mathias Axelsson +Mathias Fuchs +Mathias Gumz +Mathieu Carbonneaux +Mathieu Legare +Matias N. Goldberg +Mats Lidell +Mats Lindestam +Matt Arsenault +Matt Ford +Matt Holt +Matt Jolly +Matt Kraai +Matt McClure +Matt Veenstra +Matt Witherspoon +Matt Wixson +Matteo Baccan +Matteo Bignotti +Matteo Bignottignotti +Matteo Rocco +Matthew Blain +Matthew Clarke +Matthew Hall +Matthew Kerwin +Matthew Thompson +Matthew Whitehead +Matthias Bolte +Matthias Gatto +Matthias Naegler +Mattias Fornander +Matus Uzak +Maurice Barnum +Mauro Iorio +Mauro Rappa +Maurício Meneghini Fauth +Max Dymond +Max Katsev +Max Kellermann +Max Khon +Max Mehl +Max Peal +Max Savenkov +Max Zettlmeißl +Maxim Dzhura +Maxim Ivanov +Maxim Perenesenko +Maxim Prohorov +Maxime Larocque +Maxime Legros +mbeifuss on github +mccormickt12 on github +Median Median Stride +mehatzri on github +Mehmet Bozkurt +Mekonikum +Melissa Mears +Melroy van den Berg +Mert YazıcıoÄŸlu +Mettgut Jamalla +Micah Snyder) +Michael Afanasiev +Michael Anti +Michael Baentsch +Michael Benedict +Michael Brehm +Michael Brown +Michael Calmer +Michael Cronenworth +Michael Curtis +Michael Day +Michael Drake +Michael Felt +Michael Forney +Michael Gmelin +Michael Goffioul +Michael Heimpold +Michael Hordijk +Michael Jahn +Michael Jerris +Michael Kalinin +Michael Kaufmann +Michael Kilburn +Michael Kolechkin +Michael Kujawa +Michael König +Michael Lee +Michael Maltese +Michael Mealling +Michael Mueller +Michael Musset +Michael O'Farrell +Michael Olbrich +Michael Osipov +Michael Schmid +Michael Smith +Michael Stapelberg +Michael Steuer +Michael Stillwell +Michael Trebilcock +Michael Vittiglio +Michael Wallner +Michal Bonino +Michal Marek +Michal Rus +Michal Trybus +Michal ÄŒaplygin +MichaÅ‚ Antoniak +MichaÅ‚ Fita +MichaÅ‚ Górny +MichaÅ‚ Janiszewski +MichaÅ‚ Kowalczyk +MichaÅ‚ Petryka +MichaÅ‚ Piechowski +Michel Promonet +Michele Bini +Miguel Angel +Miguel Diaz +migueljcrum on github +Mihai Ionescu +Mikael Johansson +Mikael Sennerholm +Mikalai Ananenka +Mike Bytnar +Mike Crowe +Mike Dobbs +Mike Dowell +Mike Duglas +Mike Frysinger +Mike Gelfand +Mike Giancola +Mike Hasselberg +Mike Henshaw +Mike Hommey +Mike Mio +Mike Norton +Mike Power +Mike Protts +Mike Revi +Mike Tzou +Mikhail Kuznetsov +Miklos Nemeth +MiloÅ¡ Ljumović +Mingliang Zhu +Mingtao Yang +Miroslav Franc +Miroslav Spousta +Mischa Salle +Mitz Wark +mkzero on github +modbw on github +Mohamed Daahir +Mohamed Lrhazi +Mohamed Osama +Mohammad AlSaleh +Mohammad Hasbini +Mohammed Naser +Mohun Biswas +momala454 on github +Momoka Yamamoto +MonkeybreadSoftware on github +moohoorama on github +Morten Minde Neergaard +Mostyn Bramley-Moore +Moti Avrahami +MrdUkk on github +MrSorcus on github +Muhammad Herdiansyah +Muhammad Hussein Ammari +Muhammed Yavuz Nuzumlalı +Murugan Balraj +musvaage on github +Muz Dima +Myk Taylor +n0name321 on github +Nach M. S. +Nagai H +Nao Yonashiro +naost3rn on github +Natanael Copa +Nate Prewitt +Nathan Coulter +Nathan Moinvaziri +Nathan O'Sullivan +Nathanael Nerode +Nathaniel J. Smith +Nathaniel R. Lewis +Nathaniel Waisbrot +Naveen Chandran +Naveen Noel +Neal McBurnett +Neal Poole +nedres on github +neex on github +Nehal J Wani +neheb on github +Neil Bowers +Neil Dunbar +Neil Kolban +Neil Spring +neutric on github +nevv on HackerOne/curl +Niall McGee +Niall O'Reilly +niallor on github +nian6324 on github +nianxuejie on github +Nic Roets +Nicholas Maniscalco +Nicholas Nethercote +Nick Banks +Nick Coghlan +Nick Draffen +Nick Gimbrone +Nick Humfrey +Nick Miyake +Nick Zitzmann +nick-telia on github +Nicklas Avén +Nico Baggus +Nico Rieck +nico-abram on github +Nicolas Berloquin +Nicolas Croiset +Nicolas François +Nicolas Grekas +Nicolas Guillier +Nicolas Morey-Chaisemartin +Nicolas Noben +Nicolas Sterchele +Nicolás Ojeda Bär +Niels Martignène +Niels van Tongeren +Nikita Schmidt +Nikitinskit Dmitriy +Niklas Angebrand +Niklas Hambüchen +Nikolai Kondrashov +Nikos Mavrogiannopoulos +Nikos Tsipinakis +nimaje on github +niner on github +Ning Dong +Nir Soffer +Niracler Li +Niranjan Hasabnis +Nis Jorgensen +nk +Noam Moshe +nobedee on github +NobodyXu on github +Nobuhiro Ban +Nodak Sodak +nopjmp on github +Norbert Frese +Norbert Kett +Norbert Novotny +norbertmm on github +nosajsnikta on github +NTMan on Github +Nuru on github +Octavio Schroeder +odek86 on github +Ofer +ohyeaah on github +Okhin Vasilij +Ola Mork +Olaf Flebbe +Olaf Hering +Olaf Stüben +Oleg Jukovec +Oleg Pudeyev +Oleguer Llopart +Olen Andoni +olesteban on github +Oli Kingshott +Oliver Chang +Oliver Gondža +Oliver Graute +Oliver Kuckertz +Oliver Roberts +Oliver Schindler +Oliver Urbann +oliverpool on github +Olivier Berger +Olivier Brunel +Omar Ramadan +omau on github +OndÅ™ej KoláÄek +opensignature on github +opensslonzos-github on github +Ophir Lojkine +Orange Tsai +Oren Souroujon +Oren Tirosh +Orgad Shaneh +Ori Avtalion +orycho on github +osabc on github +Osaila on github +Osama Albahrani +Oscar Koeroo +Oscar Norlander +Oskar Liljeblad +Oskar Sigvardsson +Oumph on github +ovidiu-benea on github +P R Schaffner +Pablo Busse +Palo Markovic +pandada8 on github +Paolo Mossino +Paolo Piacentini +Paras Sethia +parazyd on github +Pascal Gaudette +Pascal Terjan +Pasha Kuznetsov +Pasi Karkkainen +Pat Ray +patelvivekv1993 on github +patnyb on github +Patrice Guerin +Patricia Muscalu +Patrick Bihan-Faou +Patrick Dawson +Patrick McManus +Patrick Monnerat +Patrick Rapin +Patrick Schlangen +Patrick Scott +Patrick Smith +Patrick Watson +Patrik Thunstrom +Pau Garcia i Quiles +Paul B. Omta +Paul Donohue +Paul Dreik +Paul Groke +Paul Harrington +Paul Harris +Paul Hoffman +Paul Howarth +Paul Johnson +Paul Joyce +Paul Marks +Paul Marquis +Paul Moore +Paul Nolan +Paul Oliver +Paul Querna +Paul Saab +Paul Seligman +Paul Vixie +Paul Wise +Paulo Roberto Tomasi +Pavel Cenek +Pavel Gushchin +Pavel Kalyugin +Pavel Löbl +Pavel Mayorov +Pavel Orehov +Pavel Pavlov +Pavel Raiskup +Pavel Rochnyak +Pavel Volgarev +Pavol Markovic +Pawel A. Gajda +Pawel Kierski +PaweÅ‚ Kowalski +PaweÅ‚ Wegner +PBudmark on github +Pedro Henrique +Pedro Larroy +Pedro Monreal +Pedro Neves +pendrek at hackerone +Peng Li +Peng-Yu Chen +Per Jensen +Per Lundberg +Per Malmberg +Per Nilsson +Pete Lomax +Peter Bray +Peter Forret +Peter Frühberger +Peter Gal +Peter Goodman +Peter Heuchert +Peter Hjalmarsson +Peter Korsgaard +Peter Körner +Peter Lamare +Peter Lamberg +Peter Laser +Peter O'Gorman +Peter Pentchev +Peter Piekarski +Peter Silva +Peter Simonyi +Peter Su +Peter Sumatra +Peter Sylvester +Peter Todd +Peter Varga +Peter Verhas +Peter Wang +Peter Wu +Peter Wullinger +Peteris Krumins +Petr Bahula +Petr Novak +Petr Pisar +Petr Voytsik +Petr Å tetiar +Phil Blundell +Phil Crump +Phil E. Taylor +Phil Karn +Phil Lisiecki +Phil Pellouchoud +Philip Chan +Philip Craig +Philip Gladstone +Philip Heiduck +Philip Langdale +Philip Prindeville +Philip Sanetra +Philipp Engel +Philipp Klaus Krause +Philipp Waehnert +Philippe Antoine on HackerOne +Philippe Hameau +Philippe Marguinaud +Philippe Raoult +Philippe Vaucher +Pierre +Pierre Brico +Pierre Chapuis +Pierre Joye +Pierre Yager +Pierre Ynard +Pierre-Yves Bigourdan +Pierrick Charron +Piotr Dobrogost +Piotr Komborski +Po-Chuan Hsieh +Pontakorn Prasertsuk +Pontus Lundkvist +Pooyan McSporran +Poul T Lomholt +Pramod Sharma +Prash Dush +Praveen Pvs +Prithvi MK +privetryan on github +Priyanka Shah +ProceduralMan on github +Pronyushkin Petr +PrzemysÅ‚aw Tomaszewski +pszemus on github +pszlazak on github +puckipedia on github +Puneet Pawaia +qiandu2006 on github +Quagmire +Quanah Gibson-Mount +Quentin Balland +Quinn Slack +r-a-sattarov on github +R. Dennis Steed +Radek Brich +Radek Zajic +Radoslav Georgiev +Radu Hociung +Radu Simionescu +Rafa Muyo +Rafael Antonio +Rafael Sagula +Rafayel Mkrtchyan +Rafaël Carré +RafaÅ‚ Mikrut +Rainer Canavan +Rainer Jung +Rainer Koenig +Rainer Müller +Raito Bezarius +Rajesh Naganathan +Rajkumar Mandal +Ralf S. Engelschall +Ralph Beckmann +Ralph Langendam +Ralph Mitchell +Ram Krushna Mishra +ramsay-jones on github +Ran Mozes +RanBarLavie on github +Randall S. Becker +Randolf J +Randy Armstrong +Randy McMurchy +Raphael Gozzo +Rasmus Melchior Jacobsen +Raul Onitza-Klugman +Ravi Pratap +Ray Dassen +Ray Pekowski +Ray Satiro +Razvan Cojocaru +rcombs on github +Red Hat Product Security +Reed Loden +Reinhard Max +Reinout van Schouwen +RekGRpth on github +Remco van Hooff +Remi Gacogne +Remo E +Renato Botelho +Renaud Allard +Renaud Chaillat +Renaud Duhaut +Renaud Guillard +Renaud Lehoux +Rene Bernhardt +Rene Rebe +Reuven Wachtfogel +Reza Arbab +Rianov Viacheslav +Ricardo Cadime +Ricardo Gomes +Ricardo M. Correia +Ricardo Martins +Rich Burridge +Rich FitzJohn +Rich Gray +Rich Mirch +Rich Rauenzahn +Rich Salz +Rich Turner +Richard Adams +Richard Alcock +Richard Archer +Richard Atterer +Richard Bowker +Richard Bramante +Richard Clayton +Richard Cooper +Richard Gorton +Richard Gray +Richard Hosking +Richard Hsu +Richard Marion +Richard Michael +Richard Moore +Richard Prescott +Richard Silverman +Richard van den Berg +Richard W.M. Jones +Richard Whitehouse +Richy Kim +Rici Lake +Rick Deist +Rick Jones +Rick Lane +Rick Richardson +Rick Welykochy +Rickard Hallerbäck +Ricki Hirner +Ricky Leverence +Ricky-Tigg on github +Rider Linden +RiderALT on github +Rikard Falkeborn +rilysh +rl1987 on github +Rob Boeckermann +Rob Cotrone +Rob Crittenden +Rob Davies +Rob de Wit +Rob Jones +Rob Sanders +Rob Stanzel +Rob Ward +RobBotic1 on github +Robby Simpson +Robert A. Monat +Robert B. Harris +Robert Brose +Robert Charles Muir +Robert D. Young +Robert Dunaj +Robert Foreman +Robert Iakobashvili +Robert Kolcun +Robert Linden +Robert Olson +Robert Prag +Robert Ronto +Robert Schumann +Robert Simpson +Robert Southee +Robert Weaver +Robert Wruck +Robin A. Meade +Robin Cornelius +Robin Douine +Robin Johnson +Robin Kay +Robin Marx +Robson Braga Araujo +Rod Widdowson +Rodger Combs +Rodney Simmons +Rodric Glaser +Rodrigo Silva +Roger Leigh +Roger Orr +Roger Young +Roland Blom +Roland Hieber +Roland Krikava +Roland Zimmermann +Rolf Eike Beer +Rolland Dudemaine +Romain Coltel +Romain Fliedel +Romain Geissler +romamik om github +Roman Koifman +Roman Mamedov +Romulo A. Ceccon +Ron Eldor +Ron Parker +Ron Zapp +Ronan Pigott +Ronnie Mose +Rosen Penev +Rosimildo da Silva +Ross Burton +roughtex on github +Roy Bellingan +Roy Li +Roy Shan +Rui LIU +Rui Pinheiro +Rune Kleveland +Ruslan Baratov +Ruslan Gazizov +Rutger Broekhoff +Rutger Hofman +Ruurd Beerstra +RuurdBeerstra on github +rwmjones on github +Ryan Beck-Buysse +Ryan Braud +Ryan Chan +Ryan Mast +Ryan Nelson +Ryan Schmidt +Ryan Scott +Ryan Sleevi +Ryan Winograd +ryancaicse on github +Ryuichi KAWAMATA +rzrymiak on github +Rémy Léone +S. Moonesamy +s0urc3_ on hackerone +Sai Ram Kunala +Salah-Eddin Shaban +Saleem Abdulrasool +SaltyMilk +Salvador Dávila +Salvatore Sorrentino +Sam Deane +Sam Hurst +Sam James +Sam Roth +Sam Schanken +Samanta Navarro +Sampo Kellomaki +Samuel Chiang +Samuel Díaz García +Samuel Henrique +Samuel Listopad +Samuel Marks +Samuel Surtees +Samuel Thibault +Samuel Tranchet +SandakovMM on github +Sander Gates +Sandor Feldi +Sandro Jaeckel +Santhana Todatry +Santino Keupp +Saqib Ali +Sara Golemon +Saran Neti +Sascha Swiercy +Sascha Zengler +Satadru Pramanik +Satana de Sant'Ana +Saul good +Saurav Babu +sayrer on github +SBKarr on github +Scott Bailey +Scott Barrett +Scott Cantor +Scott Davis +Scott McCreary +sd0 on hackerone +Sean Boudreau +Sean Burford +Sean MacLennan +Sean McArthur +Sean Miller +Sean Molenaar +Sebastiaan van Erk +Sebastian Haglund +Sebastian Mundry +Sebastian Pohlschmidt +Sebastian Rasmussen +Sebastian Sterk +selmelc on hackerone +SendSonS on github +Senthil Raja Velu +Sergei Kuzmin +Sergei Nikulov +Sergey +Sergey Alirzaev +Sergey Bronnikov +Sergey Fionov +Sergey Markelov +Sergey Ogryzkov +Sergey Ryabinin +Sergey Tatarincev +Sergii Kavunenko +Sergii Pylypenko +Sergio Ballestrero +Sergio Barresi +Sergio Borghese +Sergio Durigan Junior +Sergio Mijatovic +Sergio-IME on github +sergio-nsk on github +Serj Kalichev +SerusDev on github +Seshubabu Pasam +Seth Mos +Sevan Janiyan +Sgharat on github +Sh Diao +Shachaf Ben-Kiki +ShadowZzj on github +Shailesh Kapse +Shankar Jadhavar +Shao Shuchao +Sharad Gupta +Shard +Sharon Brizinov +Shaun Jackman +Shaun Mirani +Shawn Landden +Shawn Poulson +Sheshadri.V +Shikha Sharma +Shine Fan +Shiraz Kanga +shithappens2016 on github +Shlomi Fish +Shmulik Regev +Shohei Maeda +Siddhartha Prakash Jain +siddharthchhabrap on github +Sidney San Martín +Siegfried Gyuricsko +silveja1 on github +Simon Berger +Simon Chalifoux +Simon Dick +Simon H. +Simon Josefsson +Simon Legner +Simon Liu +Simon Warta +simplerobot on github +Siva Sivaraman +SLDiggie on github +Smackd0wn +Smackd0wn on github +smuellerDD on github +sn on hackerone +sofaboss on github +Sohom Datta +Somnath Kundu +Song Ma +Sonia Subramanian +Spacen Jasset +Spezifant on github +Spiridonoff A.V +Spoon Man +Spork Schivago +ssdbest on github +sspiri on github +sstruchtrup on github +Stadler Stephan +Stan Hu +Stan van de Burgt +Stanislav Ivochkin +Stanislav Zidek +Stanley Wucw +Stathis Kapnidis +Stav Nir +steelman on github +Stefan Agner +Stefan Bühler +Stefan Eissing +Stefan Esser +Stefan Grether +Stefan Huber +Stefan Kanthak +Stefan Karpinski +Stefan Krause +Stefan Neis +Stefan Strogin +Stefan Talpalaru +Stefan Teleman +Stefan Tomanek +Stefan Ulrich +Stefan Yohansson +Stefano Simonelli +Steinar H. Gunderson +steini2000 on github +Stepan Broz +Stepan Efremov +Stephan Bergmann +Stephan Guilloux +Stephan Lagerholm +Stephan Mühlstrasser +Stephan Szabo +Stephane Pellegrino +Stephen Boost +Stephen Brokenshire +Stephen Collyer +Stephen Kick +Stephen M. Coakley +Stephen More +Stephen Toub +Sterling Hughes +Steve Green +Steve H Truong +Steve Havelka +Steve Herrell +Steve Holme +Steve Lhomme +Steve Little +Steve Marx +Steve Oliphant +Steve Roskowski +Steve Walch +Steven Allen +Steven Bazyl +Steven G. Johnson +Steven Gu +Steven M. Schweda +Steven Parkes +Steven Penny +Stewart Gebbie +Stian Soiland-Reyes +Stoned Elipot +stootill on github +Stuart Henderson +Sukanya Hanumanthu +SumatraPeter on github +Sune Ahlgren +Sunny Bean +Sunny Purushe +SuperIlu on github +Sven Anders +Sven Blumenstein +Sven Neuhaus +Sven Wegener +Svyatoslav Mishyn +swalkaus at yahoo.com +sylgal on github +Sylvestre Ledru +Symeon Paraschoudis +Sébastien Helleu +Sébastien Willemijns +T. Bharath +T. Yamada +T200proX7 on github +Tadej Vengust +Tae Hyoung Ahn +Taiyu Len +Taneli Vähäkangas +Tanguy Fautre +Taras Kushnir +tarek112 on github +Tatsuhiro Tsujikawa +tawmoto on github +tbugfinder on github +Ted Lyngmo +Teemu Yli-Elsila +Temprimus +Terri Oda +Terry Wu +thanhchungbtc on github +The Infinnovation team +TheAssassin on github +TheKnarf on github +Theodore Dubois +therealhirudo on github +Thiago Suchorski +tholin on github +Thomas Bouzerar +Thomas Braun +Thomas Danielsson +Thomas Gamper +Thomas Glanzmann +Thomas Guillem +Thomas J. Moore +Thomas Klausner +Thomas L. Shinnick +Thomas Lopatic +Thomas M. DuBuisson +Thomas Petazzoni +Thomas Ruecker +Thomas Schwinge +Thomas Taylor +Thomas Tonino +Thomas van Hesteren +Thomas Vegas +Thomas Weißschuh +Thomas1664 on github +Thorsten Klein +Thorsten Schöning +Tiit Pikma +Till Maas +Tim Ansell +Tim Baker +Tim Bartley +Tim Chen +Tim Costello +Tim Harder +Tim Heckman +Tim Hill +Tim Mcdonough +Tim Newsome +Tim Rühsen +Tim Sedlmeyer +Tim Sneddon +Tim Stack +Tim Starling +Tim Tassonis +Tim Verhoeven +Timmy Schierling +Timo Lange +Timo Sirainen +Timotej Lazar +Timothe Litt +Timothy Gu +Timothy Polich +Timur Artikov +Tinus van den Berg +TJ Saunders +Tk Xiong +tlahn on github +tmkk on github +Tobias Blomberg +Tobias Gabriel +Tobias Hieta +Tobias Hintze +Tobias Lindgren +Tobias Markus +Tobias Nießen +Tobias Nygren +Tobias Nyholm +Tobias Rundström +Tobias Schaefer +Tobias Stoeckmann +Toby Peterson +Todd A Ouska +Todd Kaufmann +Todd Kulesza +Todd Short +Todd Vierling +Tom Benoist +Tom Donovan +Tom Eccles +Tom G. Christensen +Tom Grace +Tom Greenslade +Tom Lee +Tom Mattison +Tom Moers +Tom Mueller +Tom Regner +Tom Seddon +Tom Sparrow +Tom van der Woerdt +Tom Wright +Tom Zerucha +Tomas Berger +Tomas Hoger +Tomas Jakobsson +Tomas Mlcoch +Tomas Mraz +Tomas Pospisek +Tomas Szepe +Tomas Tomecek +Tomasz Kojm +Tomasz Lacki +Tommie Gannert +tommink[at]post.pl +Tommy Chiang +Tommy Odom +Tommy Petty +Tommy Tam +Ton Voon +Toni Moreno +Tony Kelman +tonystz on Github +Toon Verwaest +Tor Arntsen +Torben Dannhauer +Torben Dury +Torsten Foertsch +Toshio Kuratomi +Toshiyuki Maezawa +tpaukrt on github +Traian Nicolescu +Trail of Bits +Travis Burtrum +Travis Obenhaus +Trivikram Kamat +Troels Walsted Hansen +Troy Engel +trrui-huawei +Tseng Jun +Tuomas Siipola +Tuomo Rinne +Tupone Alfredo +Turiiya +Tyler Hall +Török Edwin +u20221022 on github +Ulf Härnhammar +Ulf Samuelsson +Ulrich Doehner +Ulrich Telle +Ulrich Zadow +UnicornZhang on Github +updatede on github +UrsusArctos on github +User Sg +ustcqidi on github +Vadim Grinshpun +Valentin David +Valentin Richter +Valentyn Korniienko +Valentín Gutiérrez +Valerii Zapodovnikov +vanillajonathan on github +Varnavas Papaioannou +Vasiliy Faronov +Vasiliy Ulyanov +Vasily Lobaskin +Vasy Okhin +Venkat Akella +Venkataramana Mokkapati +Vicente Garcia +Victor Magierski +Victor Snezhko +Victor Vieux +VictorVG on github +Vijay Panghal +Vikram Saxena +Viktor Szakats +Vilhelm Prytz +Ville Skyttä +Vilmos Nebehaj +Vincas Razma +Vincent Bronner +Vincent Grande +Vincent Le Normand +Vincent Penquerc'h +Vincent Sanders +Vincent Torri +violetlige on github +vitaha85 on github +Vitaly Varyvdin +vl409 on github +Vlad Grachov +Vlad Ureche +Vladimir Grishchenko +Vladimir Kotal +Vladimir Lazarenko +Vladimir Panteleev +Vladimir Varlamov +Vlastimil OvÄáÄík +vlkl-sap on github +vlubart on github +Vojtech Janota +Vojtech Minarik +VojtÄ›ch Král +Volker Schmid +Vsevolod Novikov +vshmuk on hackerone +vvb2060 +vvb2060 on github +Vyron Tsingaras +Vítor Galvão +W. Mark Kubacki +w0x42 on hackerone +Waldek Kozba +Walter J. Mack +wangzhikun +Ward Willats +Warren Menzer +Wayne Haigh +Wei Chong Tan +Wenchao Li +Wenxiang Qian +Werner Koch +Werner Stolz +Wes Hinsley +wesinator on github +Wesley Laxton +Wesley Miaw +Wez Furlong +Wham Bang +Wilfredo Sanchez +Wilhelm von Thiele +Will Dietz +Will Roberts +Willem Hoek +Willem Sparreboom +William A. Rowe Jr +William Ahern +William Desportes +William Tang +wmsch on github +wncboy on github +Wojciech Zwiefka +Wolf Vollprecht +Wouter Van Rooy +Wu Yongzheng +Wu Zheng +Wyatt O'Day +Wyatt OʼDay +x2018 on github +Xavier Bouchoux +XhmikosR on github +XhstormR on github +Xiang Xiao +Xiangbin Li +xianghongai on github +Xiaoke Wang +Xiaoyin Liu +XmiliaH on github +xnynx on github +xtonik on github +xwxbug on github +Xì Gà +Yaakov Selkowitz +Yair Lenga +Yang Tse +Yaobin Wen +Yarram Sunil +Yasuharu Yamada +Yasuhiro Matsumoto +Yechiel Kalmenson +Yehezkel Horowitz +Yehoshua Hershberg +ygthien on github +Yi Huang +Yiming Jing +Yingwei Liu +yiyuaner on github +Ymir1711 on github +Yonggang Luo +Yongkang Huang +Younes El-karama +youngchopin on github +Yousuke Kimoto +Yu Xin +Yukihiro Kawada +Yun SangHo +Yuri Slobodyanyuk +Yurii Rashkovskii +Yuriy Chernyshov +Yuriy Sosov +yushicheng7788 on github +Yusuke Nakamura +Yves Arrouye +Yves Lejeune +YX Hao +z2-2z on github +z2_ on hackerone +Zachary Seguin +Zdenek Pavlas +Zekun Ni +zelinchen on github +Zenju on github +Zero King +Zespre Schmidt +Zhang Xiuhua +zhanghu on xiaomi +Zhao Yisha +Zhaoyang Wu +zhengqwe on github +Zhibiao Wu +zhihaoy on github +Zhouyihai Ding +ZimCodes on github +zloi-user on github +Zmey Petroff +Zvi Har'El +zzq1015 on github +Ãdler Jonas Gross +Érico Nogueira +Érico Nogueira Rolim +Ä°smail Dönmez +Åukasz Domeradzki +Å tefan Kremeň +Ð‘Ð¾Ñ€Ð¸Ñ Ð’ÐµÑ€Ñ…Ð¾Ð²Ñкий +Коваленко Ðнатолий Викторович +Ðикита Дорохин +ウã•ã‚“ +ä¸ç¡®å®š +加藤éƒä¹‹ +å—å®«é›ªçŠ +左潇峰 +梦终无痕 +ç©ä¸¹å°¼ Dan Jacobson diff --git a/deps/curl/docs/THANKS-filter b/deps/curl/docs/THANKS-filter new file mode 100644 index 0000000..732ccfe --- /dev/null +++ b/deps/curl/docs/THANKS-filter @@ -0,0 +1,139 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# +# This is a list of names we have recorded that already are thanked +# appropriately in THANKS. This list contains variations of their names and +# their "canonical" name. This file is used for scripting purposes to avoid +# duplicate entries and will not be included in release tarballs. +# When removing dupes that are not identical names from THANKS, add a line +# here! +# +# Used-by: contributors.sh +s/Andres Garcia/Andrés García/ +s/Chris Conroy/Christopher Conroy/ +s/Francois Charlier/François Charlier/ +s/Gokhan Sengun/Gökhan Åžengün/ +s/John Malmberg/John E. Malmberg/ +s/Luca Alteas/Luca Altea/ +s/Michal Gorny/MichaÅ‚ Górny/ +s/Michal Górny/MichaÅ‚ Górny/ +s/^Moonesamy$/S. Moonesamy/ +s/Pete Su$/Peter Su/ +s/Sam Listopad/Samuel Listopad/ +s/Sebastien Willemijns/Sébastien Willemijns/ +s/YAMADA Yasuharu/Yasuharu Yamada/ +s/Karl M$/Karl Moerder/ +s/Bjorn Stenberg/Björn Stenberg/ +s/upstream tests 305 and 404// +s/Gaël PORTAY/Gaël Portay/ +s/Romulo Ceccon/Romulo A. Ceccon/ +s/Nach M. S$/Nach M. S./ +s/Ja[yt] Satiro/Ray Satiro/ +s/Richard J. Moore/Richard Moore/ +s/Sergey Nikulov/Sergei Nikulov/ +s/Petr PísaÅ™/Petr Pisar/ +s/Nick Zitzmann (originally)/Nick Zitzmann/ +s/product-security at Apple// +s/IT DOES NOT WORK// +s/Albert Chin$/Albert Chin-A-Young/ +s/Paras S\z/Paras Sethia/ +s/Paras Sethiaethia/Paras Sethia/ +s/Дмитрий Фалько/Dmitry Falko/ +s/byte_bucket in the #curl IRC channel// +s/Michal Górny and Anthony G. Basile// +s/Alejandro Alvarez$/Alejandro Alvarez Ayllon/ +s/Ant Bryan/Anthony Bryan/ +s/CeÌdric Deltheil/Cédric Deltheil/ +s/Christian Hagele/Christian Hägele/ +s/douglas steinwand/Douglas Steinwand/ +s/Frank Van Uffelen and Fabian Hiernaux// +s/Rodrigo Silva (MestreLion)/Rodrigo Silva/ +s/tetetest tetetest// +s/Jiří HruÅ¡ka/Jiri Hruska/ +s/Viktor Szakáts/Viktor Szakats/ +s/Jonathan Cardoso$/Jonathan Cardoso Machado/ +s/Linus Nielsen$/Linus Nielsen Feltzing/ +s/Todd Ouska$/Todd A Ouska/ +s/Tim Ruehsen/Tim Rühsen/ +s/Michael Koenig/Michael König/ +s/moparisthebest/Travis Burtrum/ +s/Jan-E/Jan Ehrhardt/ +s/Paras S$/Paras Sethia/ +s/Cristian Rodr\xEDguez$/Cristian Rodríguez/ +s/Sidney San Mart\xEDn$/Sidney San Martín/ +s/Sidney San Martin$/Sidney San Martín/ +s/Taneli V\xE4h\xE4kangas$/Taneli Vähäkangas/ +s/Taneli Vahakangas$/Taneli Vähäkangas/ +s/Ðикита Дорохин./Ðикита Дорохин/ +s/upstream tests 305// +s/ (edited)// +s/Jean-Philippe Barette-LaPierre$/Jean-Philippe Barrette-LaPierre/ +s/Joern Hartroth$/Jörn Hartroth/ +s/Hongli Lai (Phusion)$/Hongli Lai/ +s/github user 'kreshano'$/kreshano on github/ +s/Marc Hoersken$/Marc Hörsken/ +s/Martin Storsjo$/Martin Storsjö/ +s/Jiri Malak$/Jiří Malák/ +s/JDepooter$/Joel Depooter/ +s/ERAMOTO Masaya$/Eramoto Masaya/ +s/shachaf on github$/Shachaf Ben-Kiki/ +s/CarloCannas on github$/Carlo Cannas/ +s/Henrik S. Gaßmann$/Henrik Gaßmann/ +s/moteus on github/Alexey Melnichuk/ +s/Rich Moore/Richard Moore/ +s/kdekker/Kees Dekker/ +s/Daniel Jelinski/Daniel JeliÅ„ski/ +s/Dario Weisser/Dario Weißer/ +s/Github user @jakirkham/jakirkham on github/ +s/Guenter Knauf/Gunter Knauf/ +s/Matteo B.$/Matteo Bignotti/ +s/Dan C$/Dan Cristian/ +s/Mark Eichin/Mark W. Eichin/ +s/Andreas Faerber/Andreas Farber/ +s/paulharris on github/Paul Harris/ +s/Warp Kawada/Yukihiro Kawada/ +s/Lau Hang Kin/Hang Kin Lau/ +s/Jonathan Cardoso Machado Machado/Jonathan Cardoso Machado/ +s/David Meyer/David J Meyer/ +s/Ramana Mokkapati/Venkataramana Mokkapati/ +s/wyattoday on github/Wyatt O'Day/ +s/Jason Priebe/Jason S. Priebe/ +s/Ale Vesely/Alessandro Vesely/ +s/Yamada Yasuharu/Yasuharu Yamada/ +s/Jim Gallagher/James Gallagher/ +s/Steve Brokenshire/Stephen Brokenshire/ +s/wangp on github/Peter Wang/ +s# *autobuild https://.*## +s/William A Rowe Jr/William A. Rowe Jr/ +s/jonrumsey on github/Jon Rumsey/ +s/Travis Burtrum on github// +s/i-ky on github/Gleb Ivanovsky/ +s/ *via curl-library *// +s/Evgeny Grin$/Evgeny Grin (Karlson2k)/ +s/Karlson2k on github/Evgeny Grin (Karlson2k)/ +s/Dan Frandrich/Dan Fandrich/ +s/Dan Fandrich\./Dan Fandrich/ +s/GitHub$// +s/pszlazak$/pszlazak on github/ +s/Randall$/Randall S. Becker/ diff --git a/deps/curl/docs/TODO b/deps/curl/docs/TODO new file mode 100644 index 0000000..06162c8 --- /dev/null +++ b/deps/curl/docs/TODO @@ -0,0 +1,1394 @@ + _ _ ____ _ + ___| | | | _ \| | + / __| | | | |_) | | + | (__| |_| | _ <| |___ + \___|\___/|_| \_\_____| + + Things that could be nice to do in the future + + Things to do in project curl. Please tell us what you think, contribute and + send us patches that improve things. + + Be aware that these are things that we could do, or have once been considered + things we could do. If you want to work on any of these areas, please + consider bringing it up for discussions first on the mailing list so that we + all agree it is still a good idea for the project. + + All bugs documented in the KNOWN_BUGS document are subject for fixing. + + 1. libcurl + 1.1 TFO support on Windows + 1.2 Consult %APPDATA% also for .netrc + 1.3 struct lifreq + 1.4 alt-svc sharing + 1.5 get rid of PATH_MAX + 1.6 native IDN support on macOS + 1.8 CURLOPT_RESOLVE for any port number + 1.9 Cache negative name resolves + 1.10 auto-detect proxy + 1.11 minimize dependencies with dynamically loaded modules + 1.12 updated DNS server while running + 1.13 c-ares and CURLOPT_OPENSOCKETFUNCTION + 1.15 Monitor connections in the connection pool + 1.16 Try to URL encode given URL + 1.17 Add support for IRIs + 1.18 try next proxy if one does not work + 1.19 provide timing info for each redirect + 1.20 SRV and URI DNS records + 1.21 netrc caching and sharing + 1.22 CURLINFO_PAUSE_STATE + 1.23 Offer API to flush the connection pool + 1.25 Expose tried IP addresses that failed + 1.28 FD_CLOEXEC + 1.29 WebSocket read callback + 1.30 config file parsing + 1.31 erase secrets from heap/stack after use + 1.32 add asynch getaddrinfo support + 1.33 make DoH inherit more transfer properties + + 2. libcurl - multi interface + 2.1 More non-blocking + 2.2 Better support for same name resolves + 2.3 Non-blocking curl_multi_remove_handle() + 2.4 Split connect and authentication process + 2.5 Edge-triggered sockets should work + 2.6 multi upkeep + 2.7 Virtual external sockets + 2.8 dynamically decide to use socketpair + + 3. Documentation + 3.1 Improve documentation about fork safety + 3.2 Provide cmake config-file + + 4. FTP + 4.1 HOST + 4.2 Alter passive/active on failure and retry + 4.3 Earlier bad letter detection + 4.4 Support CURLOPT_PREQUOTE for dir listings too + 4.5 ASCII support + 4.6 GSSAPI via Windows SSPI + 4.7 STAT for LIST without data connection + 4.8 Passive transfer could try other IP addresses + + 5. HTTP + 5.1 Provide the error body from a CONNECT response + 5.2 Obey Retry-After in redirects + 5.3 Rearrange request header order + 5.4 Allow SAN names in HTTP/2 server push + 5.5 auth= in URLs + 5.6 alt-svc should fallback if alt-svc does not work + 5.7 Require HTTP version X or higher + + 6. TELNET + 6.1 ditch stdin + 6.2 ditch telnet-specific select + 6.3 feature negotiation debug data + 6.4 exit immediately upon connection if stdin is /dev/null + + 7. SMTP + 7.1 Passing NOTIFY option to CURLOPT_MAIL_RCPT + 7.2 Enhanced capability support + 7.3 Add CURLOPT_MAIL_CLIENT option + + 8. POP3 + 8.2 Enhanced capability support + + 9. IMAP + 9.1 Enhanced capability support + + 10. LDAP + 10.1 SASL based authentication mechanisms + 10.2 CURLOPT_SSL_CTX_FUNCTION for LDAPS + 10.3 Paged searches on LDAP server + 10.4 Certificate-Based Authentication + + 11. SMB + 11.1 File listing support + 11.2 Honor file timestamps + 11.3 Use NTLMv2 + 11.4 Create remote directories + + 12. FILE + 12.1 Directory listing for FILE: + + 13. TLS + 13.1 TLS-PSK with OpenSSL + 13.2 Provide mutex locking API + 13.3 Defeat TLS fingerprinting + 13.4 Cache/share OpenSSL contexts + 13.5 Export session ids + 13.6 Provide callback for cert verification + 13.7 Less memory massaging with Schannel + 13.8 Support DANE + 13.9 TLS record padding + 13.10 Support Authority Information Access certificate extension (AIA) + 13.11 Some TLS options are not offered for HTTPS proxies + 13.12 Reduce CA certificate bundle reparsing + 13.13 Make sure we forbid TLS 1.3 post-handshake authentication + 13.14 Support the clienthello extension + + 14. GnuTLS + 14.2 check connection + + 15. Schannel + 15.1 Extend support for client certificate authentication + 15.2 Extend support for the --ciphers option + 15.4 Add option to allow abrupt server closure + + 16. SASL + 16.1 Other authentication mechanisms + 16.2 Add QOP support to GSSAPI authentication + + 17. SSH protocols + 17.1 Multiplexing + 17.2 Handle growing SFTP files + 17.3 Read keys from ~/.ssh/id_ecdsa, id_ed25519 + 17.4 Support CURLOPT_PREQUOTE + 17.5 SSH over HTTPS proxy with more backends + 17.6 SFTP with SCP:// + + 18. Command line tool + 18.1 sync + 18.2 glob posts + 18.4 --proxycommand + 18.5 UTF-8 filenames in Content-Disposition + 18.6 Option to make -Z merge lined based outputs on stdout + 18.8 Consider convenience options for JSON and XML? + 18.9 Choose the name of file in braces for complex URLs + 18.10 improve how curl works in a windows console window + 18.11 Windows: set attribute 'archive' for completed downloads + 18.12 keep running, read instructions from pipe/socket + 18.13 Ratelimit or wait between serial requests + 18.14 --dry-run + 18.15 --retry should resume + 18.16 send only part of --data + 18.17 consider file name from the redirected URL with -O ? + 18.18 retry on network is unreachable + 18.19 expand ~/ in config files + 18.20 host name sections in config files + 18.21 retry on the redirected-to URL + 18.23 Set the modification date on an uploaded file + 18.24 Use multiple parallel transfers for a single download + 18.25 Prevent terminal injection when writing to terminal + 18.26 Custom progress meter update interval + 18.27 -J and -O with %-encoded file names + 18.28 -J with -C - + 18.29 --retry and transfer timeouts + + 19. Build + 19.1 roffit + 19.2 Enable PIE and RELRO by default + 19.3 Do not use GNU libtool on OpenBSD + 19.4 Package curl for Windows in a signed installer + 19.5 make configure use --cache-file more and better + 19.6 build curl with Windows Unicode support + + 20. Test suite + 20.1 SSL tunnel + 20.2 nicer lacking perl message + 20.3 more protocols supported + 20.4 more platforms supported + 20.5 Add support for concurrent connections + 20.6 Use the RFC 6265 test suite + 20.7 Support LD_PRELOAD on macOS + 20.8 Run web-platform-tests URL tests + + 21. MQTT + 21.1 Support rate-limiting + +============================================================================== + +1. libcurl + +1.1 TFO support on Windows + + libcurl supports the CURLOPT_TCP_FASTOPEN option since 7.49.0 for Linux and + Mac OS. Windows supports TCP Fast Open starting with Windows 10, version 1607 + and we should add support for it. + + TCP Fast Open is supported on several platforms but not on Windows. Work on + this was once started but never finished. + + See https://github.com/curl/curl/pull/3378 + +1.2 Consult %APPDATA% also for .netrc + + %APPDATA%\.netrc is not considered when running on Windows. should not it? + + See https://github.com/curl/curl/issues/4016 + +1.3 struct lifreq + + Use 'struct lifreq' and SIOCGLIFADDR instead of 'struct ifreq' and + SIOCGIFADDR on newer Solaris versions as they claim the latter is obsolete. + To support IPv6 interface addresses for network interfaces properly. + +1.4 Better and more sharing + + The share interface could benefit from allowing the alt-svc cache to be + possible to share between easy handles. + + See https://github.com/curl/curl/issues/4476 + + The share interface offers CURL_LOCK_DATA_CONNECT to have multiple easy + handle share a connection cache, but due to how connections are used they are + still not thread-safe when used shared. + + See https://github.com/curl/curl/issues/4915 and lib1541.c + + The share interface offers CURL_LOCK_DATA_HSTS to have multiple easy handle + share a HSTS cache, but this is not thread-safe. + +1.5 get rid of PATH_MAX + + Having code use and rely on PATH_MAX is not nice: + https://insanecoding.blogspot.com/2007/11/pathmax-simply-isnt.html + + Currently the libssh2 SSH based code uses it, but to remove PATH_MAX from + there we need libssh2 to properly tell us when we pass in a too small buffer + and its current API (as of libssh2 1.2.7) does not. + +1.6 native IDN support on macOS + + On recent macOS versions, the getaddrinfo() function itself has built-in IDN + support. By setting the AI_CANONNAME flag, the function will return the + encoded name in the ai_canonname struct field in the returned information. + This could be used by curl on macOS when built without a separate IDN library + and an IDN host name is used in a URL. + + See initial work in https://github.com/curl/curl/pull/5371 + +1.8 CURLOPT_RESOLVE for any port number + + This option allows applications to set a replacement IP address for a given + host + port pair. Consider making support for providing a replacement address + for the host name on all port numbers. + + See https://github.com/curl/curl/issues/1264 + +1.9 Cache negative name resolves + + A name resolve that has failed is likely to fail when made again within a + short period of time. Currently we only cache positive responses. + +1.10 auto-detect proxy + + libcurl could be made to detect the system proxy setup automatically and use + that. On Windows, macOS and Linux desktops for example. + + The pull-request to use libproxy for this was deferred due to doubts on the + reliability of the dependency and how to use it: + https://github.com/curl/curl/pull/977 + + libdetectproxy is a (C++) library for detecting the proxy on Windows + https://github.com/paulharris/libdetectproxy + +1.11 minimize dependencies with dynamically loaded modules + + We can create a system with loadable modules/plug-ins, where these modules + would be the ones that link to 3rd party libs. That would allow us to avoid + having to load ALL dependencies since only the necessary ones for this + app/invoke/used protocols would be necessary to load. See + https://github.com/curl/curl/issues/349 + +1.12 updated DNS server while running + + If /etc/resolv.conf gets updated while a program using libcurl is running, it + is may cause name resolves to fail unless res_init() is called. We should + consider calling res_init() + retry once unconditionally on all name resolve + failures to mitigate against this. Firefox works like that. Note that Windows + does not have res_init() or an alternative. + + https://github.com/curl/curl/issues/2251 + +1.13 c-ares and CURLOPT_OPENSOCKETFUNCTION + + curl will create most sockets via the CURLOPT_OPENSOCKETFUNCTION callback and + close them with the CURLOPT_CLOSESOCKETFUNCTION callback. However, c-ares + does not use those functions and instead opens and closes the sockets + itself. This means that when curl passes the c-ares socket to the + CURLMOPT_SOCKETFUNCTION it is not owned by the application like other sockets. + + See https://github.com/curl/curl/issues/2734 + +1.15 Monitor connections in the connection pool + + libcurl's connection cache or pool holds a number of open connections for the + purpose of possible subsequent connection reuse. It may contain a few up to a + significant amount of connections. Currently, libcurl leaves all connections + as they are and first when a connection is iterated over for matching or + reuse purpose it is verified that it is still alive. + + Those connections may get closed by the server side for idleness or they may + get an HTTP/2 ping from the peer to verify that they are still alive. By + adding monitoring of the connections while in the pool, libcurl can detect + dead connections (and close them) better and earlier, and it can handle + HTTP/2 pings to keep such ones alive even when not actively doing transfers + on them. + +1.16 Try to URL encode given URL + + Given a URL that for example contains spaces, libcurl could have an option + that would try somewhat harder than it does now and convert spaces to %20 and + perhaps URL encoded byte values over 128 etc (basically do what the redirect + following code already does). + + https://github.com/curl/curl/issues/514 + +1.17 Add support for IRIs + + IRIs (RFC 3987) allow localized, non-ascii, names in the URL. To properly + support this, curl/libcurl would need to translate/encode the given input + from the input string encoding into percent encoded output "over the wire". + + To make that work smoothly for curl users even on Windows, curl would + probably need to be able to convert from several input encodings. + +1.18 try next proxy if one does not work + + Allow an application to specify a list of proxies to try, and failing to + connect to the first go on and try the next instead until the list is + exhausted. Browsers support this feature at least when they specify proxies + using PACs. + + https://github.com/curl/curl/issues/896 + +1.19 provide timing info for each redirect + + curl and libcurl provide timing information via a set of different + time-stamps (CURLINFO_*_TIME). When curl is following redirects, those + returned time value are the accumulated sums. An improvement could be to + offer separate timings for each redirect. + + https://github.com/curl/curl/issues/6743 + +1.20 SRV and URI DNS records + + Offer support for resolving SRV and URI DNS records for libcurl to know which + server to connect to for various protocols (including HTTP). + +1.21 netrc caching and sharing + + The netrc file is read and parsed each time a connection is setup, which + means that if a transfer needs multiple connections for authentication or + redirects, the file might be reread (and parsed) multiple times. This makes + it impossible to provide the file as a pipe. + +1.22 CURLINFO_PAUSE_STATE + + Return information about the transfer's current pause state, in both + directions. https://github.com/curl/curl/issues/2588 + +1.23 Offer API to flush the connection pool + + Sometimes applications want to flush all the existing connections kept alive. + An API could allow a forced flush or just a forced loop that would properly + close all connections that have been closed by the server already. + +1.25 Expose tried IP addresses that failed + + When libcurl fails to connect to a host, it could offer the application the + addresses that were used in the attempt. Source + dest IP, source + dest port + and protocol (UDP or TCP) for each failure. Possibly as a callback. Perhaps + also provide "reason". + + https://github.com/curl/curl/issues/2126 + +1.28 FD_CLOEXEC + + It sets the close-on-exec flag for the file descriptor, which causes the file + descriptor to be automatically (and atomically) closed when any of the + exec-family functions succeed. Should probably be set by default? + + https://github.com/curl/curl/issues/2252 + +1.29 WebSocket read callback + + Call the read callback once the connection is established to allow sending + the first message in the connection. + + https://github.com/curl/curl/issues/11402 + +1.30 config file parsing + + Consider providing an API, possibly in a separate companion library, for + parsing a config file like curl's -K/--config option to allow applications to + get the same ability to read curl options from files. + + See https://github.com/curl/curl/issues/3698 + +1.31 erase secrets from heap/stack after use + + Introducing a concept and system to erase secrets from memory after use, it + could help mitigate and lessen the impact of (future) security problems etc. + However: most secrets are passed to libcurl as clear text from the + application and then clearing them within the library adds nothing... + + https://github.com/curl/curl/issues/7268 + +1.32 add asynch getaddrinfo support + + Use getaddrinfo_a() to provide an asynch name resolver backend to libcurl + that does not use threads and does not depend on c-ares. The getaddrinfo_a + function is (probably?) glibc specific but that is a widely used libc among + our users. + + https://github.com/curl/curl/pull/6746 + +1.33 make DoH inherit more transfer properties + + Some options are not inherited because they are not relevant for the DoH SSL + connections, or inheriting the option may result in unexpected behavior. For + example the user's debug function callback is not inherited because it would + be unexpected for internal handles (ie DoH handles) to be passed to that + callback. + + If an option is not inherited then it is not possible to set it separately + for DoH without a DoH-specific option. For example: + CURLOPT_DOH_SSL_VERIFYHOST, CURLOPT_DOH_SSL_VERIFYPEER and + CURLOPT_DOH_SSL_VERIFYSTATUS. + + See https://github.com/curl/curl/issues/6605 + +2. libcurl - multi interface + +2.1 More non-blocking + + Make sure we do not ever loop because of non-blocking sockets returning + EWOULDBLOCK or similar. Blocking cases include: + + - Name resolves on non-windows unless c-ares or the threaded resolver is used. + + - The threaded resolver may block on cleanup: + https://github.com/curl/curl/issues/4852 + + - file:// transfers + + - TELNET transfers + + - GSSAPI authentication for FTP transfers + + - The "DONE" operation (post transfer protocol-specific actions) for the + protocols SFTP, SMTP, FTP. Fixing multi_done() for this is a worthy task. + + - curl_multi_remove_handle for any of the above. See section 2.3. + +2.2 Better support for same name resolves + + If a name resolve has been initiated for name NN and a second easy handle + wants to resolve that name as well, make it wait for the first resolve to end + up in the cache instead of doing a second separate resolve. This is + especially needed when adding many simultaneous handles using the same host + name when the DNS resolver can get flooded. + +2.3 Non-blocking curl_multi_remove_handle() + + The multi interface has a few API calls that assume a blocking behavior, like + add_handle() and remove_handle() which limits what we can do internally. The + multi API need to be moved even more into a single function that "drives" + everything in a non-blocking manner and signals when something is done. A + remove or add would then only ask for the action to get started and then + multi_perform() etc still be called until the add/remove is completed. + +2.4 Split connect and authentication process + + The multi interface treats the authentication process as part of the connect + phase. As such any failures during authentication will not trigger the relevant + QUIT or LOGOFF for protocols such as IMAP, POP3 and SMTP. + +2.5 Edge-triggered sockets should work + + The multi_socket API should work with edge-triggered socket events. One of + the internal actions that need to be improved for this to work perfectly is + the 'maxloops' handling in transfer.c:readwrite_data(). + +2.6 multi upkeep + + In libcurl 7.62.0 we introduced curl_easy_upkeep. It unfortunately only works + on easy handles. We should introduces a version of that for the multi handle, + and also consider doing "upkeep" automatically on connections in the + connection pool when the multi handle is in used. + + See https://github.com/curl/curl/issues/3199 + +2.7 Virtual external sockets + + libcurl performs operations on the given file descriptor that presumes it is + a socket and an application cannot replace them at the moment. Allowing an + application to fully replace those would allow a larger degree of freedom and + flexibility. + + See https://github.com/curl/curl/issues/5835 + +2.8 dynamically decide to use socketpair + + For users who do not use curl_multi_wait() or do not care for + curl_multi_wakeup(), we could introduce a way to make libcurl NOT + create a socketpair in the multi handle. + + See https://github.com/curl/curl/issues/4829 + +3. Documentation + +3.1 Improve documentation about fork safety + + See https://github.com/curl/curl/issues/6968 + +3.2 Provide cmake config-file + + A config-file package is a set of files provided by us to allow applications + to write cmake scripts to find and use libcurl easier. See + https://github.com/curl/curl/issues/885 + +4. FTP + +4.1 HOST + + HOST is a command for a client to tell which host name to use, to offer FTP + servers named-based virtual hosting: + + https://datatracker.ietf.org/doc/html/rfc7151 + +4.2 Alter passive/active on failure and retry + + When trying to connect passively to a server which only supports active + connections, libcurl returns CURLE_FTP_WEIRD_PASV_REPLY and closes the + connection. There could be a way to fallback to an active connection (and + vice versa). https://curl.se/bug/feature.cgi?id=1754793 + +4.3 Earlier bad letter detection + + Make the detection of (bad) %0d and %0a codes in FTP URL parts earlier in the + process to avoid doing a resolve and connect in vain. + +4.4 Support CURLOPT_PREQUOTE for dir listings too + + The lack of support is mostly an oversight and requires the FTP state machine + to get updated to get fixed. + + https://github.com/curl/curl/issues/8602 + +4.5 ASCII support + + FTP ASCII transfers do not follow RFC 959. They do not convert the data + accordingly. + +4.6 GSSAPI via Windows SSPI + + In addition to currently supporting the SASL GSSAPI mechanism (Kerberos V5) + via third-party GSS-API libraries, such as Heimdal or MIT Kerberos, also add + support for GSSAPI authentication via Windows SSPI. + +4.7 STAT for LIST without data connection + + Some FTP servers allow STAT for listing directories instead of using LIST, + and the response is then sent over the control connection instead of as the + otherwise usedw data connection: https://www.nsftools.com/tips/RawFTP.htm#STAT + + This is not detailed in any FTP specification. + +4.8 Passive transfer could try other IP addresses + + When doing FTP operations through a proxy at localhost, the reported spotted + that curl only tried to connect once to the proxy, while it had multiple + addresses and a failed connect on one address should make it try the next. + + After switching to passive mode (EPSV), curl could try all IP addresses for + "localhost". Currently it tries ::1, but it should also try 127.0.0.1. + + See https://github.com/curl/curl/issues/1508 + +5. HTTP + +5.1 Provide the error body from a CONNECT response + + When curl receives a body response from a CONNECT request to a proxy, it will + always just read and ignore it. It would make some users happy if curl + instead optionally would be able to make that responsible available. Via a new + callback? Through some other means? + + See https://github.com/curl/curl/issues/9513 + +5.2 Obey Retry-After in redirects + + The Retry-After is said to dicate "the minimum time that the user agent is + asked to wait before issuing the redirected request" and libcurl does not + obey this. + + See https://github.com/curl/curl/issues/11447 + +5.3 Rearrange request header order + + Server implementers often make an effort to detect browser and to reject + clients it can detect to not match. One of the last details we cannot yet + control in libcurl's HTTP requests, which also can be exploited to detect + that libcurl is in fact used even when it tries to impersonate a browser, is + the order of the request headers. I propose that we introduce a new option in + which you give headers a value, and then when the HTTP request is built it + sorts the headers based on that number. We could then have internally created + headers use a default value so only headers that need to be moved have to be + specified. + +5.4 Allow SAN names in HTTP/2 server push + + curl only allows HTTP/2 push promise if the provided :authority header value + exactly matches the host name given in the URL. It could be extended to allow + any name that would match the Subject Alternative Names in the server's TLS + certificate. + + See https://github.com/curl/curl/pull/3581 + +5.5 auth= in URLs + + Add the ability to specify the preferred authentication mechanism to use by + using ;auth= in the login part of the URL. + + For example: + + http://test:pass;auth=NTLM@example.com would be equivalent to specifying + --user test:pass;auth=NTLM or --user test:pass --ntlm from the command line. + + Additionally this should be implemented for proxy base URLs as well. + +5.6 alt-svc should fallback if alt-svc does not work + + The alt-svc: header provides a set of alternative services for curl to use + instead of the original. If the first attempted one fails, it should try the + next etc and if all alternatives fail go back to the original. + + See https://github.com/curl/curl/issues/4908 + +5.7 Require HTTP version X or higher + + curl and libcurl provide options for trying higher HTTP versions (for example + HTTP/2) but then still allows the server to pick version 1.1. We could + consider adding a way to require a minimum version. + + See https://github.com/curl/curl/issues/7980 + +6. TELNET + +6.1 ditch stdin + + Reading input (to send to the remote server) on stdin is a crappy solution + for library purposes. We need to invent a good way for the application to be + able to provide the data to send. + +6.2 ditch telnet-specific select + + Move the telnet support's network select() loop go away and merge the code + into the main transfer loop. Until this is done, the multi interface will not + work for telnet. + +6.3 feature negotiation debug data + + Add telnet feature negotiation data to the debug callback as header data. + +6.4 exit immediately upon connection if stdin is /dev/null + + If it did, curl could be used to probe if there is an server there listening + on a specific port. That is, the following command would exit immediately + after the connection is established with exit code 0: + + curl -s --connect-timeout 2 telnet://example.com:80 NOTIFY=SUCCESS,FAILURE" ); + + https://github.com/curl/curl/issues/8232 + +7.2 Enhanced capability support + + Add the ability, for an application that uses libcurl, to obtain the list of + capabilities returned from the EHLO command. + +7.3 Add CURLOPT_MAIL_CLIENT option + + Rather than use the URL to specify the mail client string to present in the + HELO and EHLO commands, libcurl should support a new CURLOPT specifically for + specifying this data as the URL is non-standard and to be honest a bit of a + hack ;-) + + Please see the following thread for more information: + https://curl.se/mail/lib-2012-05/0178.html + + +8. POP3 + +8.2 Enhanced capability support + + Add the ability, for an application that uses libcurl, to obtain the list of + capabilities returned from the CAPA command. + +9. IMAP + +9.1 Enhanced capability support + + Add the ability, for an application that uses libcurl, to obtain the list of + capabilities returned from the CAPABILITY command. + +10. LDAP + +10.1 SASL based authentication mechanisms + + Currently the LDAP module only supports ldap_simple_bind_s() in order to bind + to an LDAP server. However, this function sends username and password details + using the simple authentication mechanism (as clear text). However, it should + be possible to use ldap_bind_s() instead specifying the security context + information ourselves. + +10.2 CURLOPT_SSL_CTX_FUNCTION for LDAPS + + CURLOPT_SSL_CTX_FUNCTION works perfectly for HTTPS and email protocols, but + it has no effect for LDAPS connections. + + https://github.com/curl/curl/issues/4108 + +10.3 Paged searches on LDAP server + + https://github.com/curl/curl/issues/4452 + +10.4 Certificate-Based Authentication + + LDAPS not possible with MAC and Windows with Certificate-Based Authentication + + https://github.com/curl/curl/issues/9641 + +11. SMB + +11.1 File listing support + + Add support for listing the contents of a SMB share. The output should + probably be the same as/similar to FTP. + +11.2 Honor file timestamps + + The timestamp of the transferred file should reflect that of the original + file. + +11.3 Use NTLMv2 + + Currently the SMB authentication uses NTLMv1. + +11.4 Create remote directories + + Support for creating remote directories when uploading a file to a directory + that does not exist on the server, just like --ftp-create-dirs. + + +12. FILE + +12.1 Directory listing for FILE: + + Add support for listing the contents of a directory accessed with FILE. The + output should probably be the same as/similar to FTP. + + +13. TLS + +13.1 TLS-PSK with OpenSSL + + Transport Layer Security pre-shared key ciphersuites (TLS-PSK) is a set of + cryptographic protocols that provide secure communication based on pre-shared + keys (PSKs). These pre-shared keys are symmetric keys shared in advance among + the communicating parties. + + https://github.com/curl/curl/issues/5081 + +13.2 Provide mutex locking API + + Provide a libcurl API for setting mutex callbacks in the underlying SSL + library, so that the same application code can use mutex-locking + independently of OpenSSL or GnutTLS being used. + +13.3 Defeat TLS fingerprinting + + By changing the order of TLS extensions provided in the TLS handshake, it is + sometimes possible to circumvent TLS fingerprinting by servers. The TLS + extension order is of course not the only way to fingerprint a client. + + See https://github.com/curl/curl/issues/8119 + +13.4 Cache/share OpenSSL contexts + + "Look at SSL cafile - quick traces look to me like these are done on every + request as well, when they should only be necessary once per SSL context (or + once per handle)". The major improvement we can rather easily do is to make + sure we do not create and kill a new SSL "context" for every request, but + instead make one for every connection and reuse that SSL context in the same + style connections are reused. It will make us use slightly more memory but it + will libcurl do less creations and deletions of SSL contexts. + + Technically, the "caching" is probably best implemented by getting added to + the share interface so that easy handles who want to and can reuse the + context specify that by sharing with the right properties set. + + https://github.com/curl/curl/issues/1110 + +13.5 Export session ids + + Add an interface to libcurl that enables "session IDs" to get + exported/imported. Cris Bailiff said: "OpenSSL has functions which can + serialise the current SSL state to a buffer of your choice, and recover/reset + the state from such a buffer at a later date - this is used by mod_ssl for + apache to implement and SSL session ID cache". + +13.6 Provide callback for cert verification + + OpenSSL supports a callback for customised verification of the peer + certificate, but this does not seem to be exposed in the libcurl APIs. Could + it be? There is so much that could be done if it were. + +13.7 Less memory massaging with Schannel + + The Schannel backend does a lot of custom memory management we would rather + avoid: the repeated alloc + free in sends and the custom memory + realloc + system for encrypted and decrypted data. That should be avoided and reduced + for 1) efficiency and 2) safety. + +13.8 Support DANE + + DNS-Based Authentication of Named Entities (DANE) is a way to provide SSL + keys and certs over DNS using DNSSEC as an alternative to the CA model. + https://www.rfc-editor.org/rfc/rfc6698.txt + + An initial patch was posted by Suresh Krishnaswamy on March 7th 2013 + (https://curl.se/mail/lib-2013-03/0075.html) but it was a too simple + approach. See Daniel's comments: + https://curl.se/mail/lib-2013-03/0103.html . libunbound may be the + correct library to base this development on. + + Björn Stenberg wrote a separate initial take on DANE that was never + completed. + +13.9 TLS record padding + + TLS (1.3) offers optional record padding and OpenSSL provides an API for it. + I could make sense for libcurl to offer this ability to applications to make + traffic patterns harder to figure out by network traffic observers. + + See https://github.com/curl/curl/issues/5398 + +13.10 Support Authority Information Access certificate extension (AIA) + + AIA can provide various things like CRLs but more importantly information + about intermediate CA certificates that can allow validation path to be + fulfilled when the HTTPS server does not itself provide them. + + Since AIA is about downloading certs on demand to complete a TLS handshake, + it is probably a bit tricky to get done right. + + See https://github.com/curl/curl/issues/2793 + +13.11 Some TLS options are not offered for HTTPS proxies + + Some TLS related options to the command line tool and libcurl are only + provided for the server and not for HTTPS proxies. --proxy-tls-max, + --proxy-tlsv1.3, --proxy-curves and a few more.a + + https://github.com/curl/curl/issues/12286 + +13.12 Reduce CA certificate bundle reparsing + + When using the OpenSSL backend, curl will load and reparse the CA bundle at + the creation of the "SSL context" when it sets up a connection to do a TLS + handshake. A more effective way would be to somehow cache the CA bundle to + avoid it having to be repeatedly reloaded and reparsed. + + See https://github.com/curl/curl/issues/9379 + +13.13 Make sure we forbid TLS 1.3 post-handshake authentication + + RFC 8740 explains how using HTTP/2 must forbid the use of TLS 1.3 + post-handshake authentication. We should make sure to live up to that. + + See https://github.com/curl/curl/issues/5396 + +13.14 Support the clienthello extension + + Certain stupid networks and middle boxes have a problem with SSL handshake + packets that are within a certain size range because how that sets some bits + that previously (in older TLS version) were not set. The clienthello + extension adds padding to avoid that size range. + + https://datatracker.ietf.org/doc/html/rfc7685 + https://github.com/curl/curl/issues/2299 + +14. GnuTLS + +14.2 check connection + + Add a way to check if the connection seems to be alive, to correspond to the + SSL_peak() way we use with OpenSSL. + +15. Schannel + +15.1 Extend support for client certificate authentication + + The existing support for the -E/--cert and --key options could be + extended by supplying a custom certificate and key in PEM format, see: + - Getting a Certificate for Schannel + https://msdn.microsoft.com/en-us/library/windows/desktop/aa375447.aspx + +15.2 Extend support for the --ciphers option + + The existing support for the --ciphers option could be extended + by mapping the OpenSSL/GnuTLS cipher suites to the Schannel APIs, see + - Specifying Schannel Ciphers and Cipher Strengths + https://msdn.microsoft.com/en-us/library/windows/desktop/aa380161.aspx + +15.4 Add option to allow abrupt server closure + + libcurl w/schannel will error without a known termination point from the + server (such as length of transfer, or SSL "close notify" alert) to prevent + against a truncation attack. Really old servers may neglect to send any + termination point. An option could be added to ignore such abrupt closures. + + https://github.com/curl/curl/issues/4427 + +16. SASL + +16.1 Other authentication mechanisms + + Add support for other authentication mechanisms such as OLP, + GSS-SPNEGO and others. + +16.2 Add QOP support to GSSAPI authentication + + Currently the GSSAPI authentication only supports the default QOP of auth + (Authentication), whilst Kerberos V5 supports both auth-int (Authentication + with integrity protection) and auth-conf (Authentication with integrity and + privacy protection). + + +17. SSH protocols + +17.1 Multiplexing + + SSH is a perfectly fine multiplexed protocols which would allow libcurl to do + multiple parallel transfers from the same host using the same connection, + much in the same spirit as HTTP/2 does. libcurl however does not take + advantage of that ability but will instead always create a new connection for + new transfers even if an existing connection already exists to the host. + + To fix this, libcurl would have to detect an existing connection and "attach" + the new transfer to the existing one. + +17.2 Handle growing SFTP files + + The SFTP code in libcurl checks the file size *before* a transfer starts and + then proceeds to transfer exactly that amount of data. If the remote file + grows while the transfer is in progress libcurl will not notice and will not + adapt. The OpenSSH SFTP command line tool does and libcurl could also just + attempt to download more to see if there is more to get... + + https://github.com/curl/curl/issues/4344 + +17.3 Read keys from ~/.ssh/id_ecdsa, id_ed25519 + + The libssh2 backend in curl is limited to only reading keys from id_rsa and + id_dsa, which makes it fail connecting to servers that use more modern key + types. + + https://github.com/curl/curl/issues/8586 + +17.4 Support CURLOPT_PREQUOTE + + The two other QUOTE options are supported for SFTP, but this was left out for + unknown reasons. + +17.5 SSH over HTTPS proxy with more backends + + The SSH based protocols SFTP and SCP did not work over HTTPS proxy at + all until PR https://github.com/curl/curl/pull/6021 brought the + functionality with the libssh2 backend. Presumably, this support + can/could be added for the other backends as well. + +17.6 SFTP with SCP:// + + OpenSSH 9 switched their 'scp' tool to speak SFTP under the hood. Going + forward it might be worth having curl or libcurl attempt SFTP if SCP fails to + follow suite. + +18. Command line tool + +18.1 sync + + "curl --sync http://example.com/feed[1-100].rss" or + "curl --sync http://example.net/{index,calendar,history}.html" + + Downloads a range or set of URLs using the remote name, but only if the + remote file is newer than the local file. A Last-Modified HTTP date header + should also be used to set the mod date on the downloaded file. + +18.2 glob posts + + Globbing support for -d and -F, as in 'curl -d "name=foo[0-9]" URL'. + This is easily scripted though. + +18.4 --proxycommand + + Allow the user to make curl run a command and use its stdio to make requests + and not do any network connection by itself. Example: + + curl --proxycommand 'ssh pi@raspberrypi.local -W 10.1.1.75 80' \ + http://some/otherwise/unavailable/service.php + + See https://github.com/curl/curl/issues/4941 + +18.5 UTF-8 filenames in Content-Disposition + + RFC 6266 documents how UTF-8 names can be passed to a client in the + Content-Disposition header, and curl does not support this. + + https://github.com/curl/curl/issues/1888 + +18.6 Option to make -Z merge lined based outputs on stdout + + When a user requests multiple lined based files using -Z and sends them to + stdout, curl will not "merge" and send complete lines fine but may send + partial lines from several sources. + + https://github.com/curl/curl/issues/5175 + +18.8 Consider convenience options for JSON and XML? + + Could we add `--xml` or `--json` to add headers needed to call rest API: + + `--xml` adds -H 'Content-Type: application/xml' -H "Accept: application/xml" and + `--json` adds -H 'Content-Type: application/json' -H "Accept: application/json" + + Setting Content-Type when doing a GET or any other method without a body + would be a bit strange I think - so maybe only add CT for requests with body? + Maybe plain `--xml` and ` --json` are a bit too brief and generic. Maybe + `--http-json` etc? + + See https://github.com/curl/curl/issues/5203 + +18.9 Choose the name of file in braces for complex URLs + + When using braces to download a list of URLs and you use complicated names + in the list of alternatives, it could be handy to allow curl to use other + names when saving. + + Consider a way to offer that. Possibly like + {partURL1:name1,partURL2:name2,partURL3:name3} where the name following the + colon is the output name. + + See https://github.com/curl/curl/issues/221 + +18.10 improve how curl works in a windows console window + + If you pull the scrollbar when transferring with curl in a Windows console + window, the transfer is interrupted and can get disconnected. This can + probably be improved. See https://github.com/curl/curl/issues/322 + +18.11 Windows: set attribute 'archive' for completed downloads + + The archive bit (FILE_ATTRIBUTE_ARCHIVE, 0x20) separates files that shall be + backed up from those that are either not ready or have not changed. + + Downloads in progress are neither ready to be backed up, nor should they be + opened by a different process. Only after a download has been completed it's + sensible to include it in any integer snapshot or backup of the system. + + See https://github.com/curl/curl/issues/3354 + +18.12 keep running, read instructions from pipe/socket + + Provide an option that makes curl not exit after the last URL (or even work + without a given URL), and then make it read instructions passed on a pipe or + over a socket to make further instructions so that a second subsequent curl + invoke can talk to the still running instance and ask for transfers to get + done, and thus maintain its connection pool, DNS cache and more. + +18.13 Ratelimit or wait between serial requests + + Consider a command line option that can make curl do multiple serial requests + slow, potentially with a (random) wait between transfers. There is also a + proposed set of standard HTTP headers to let servers let the client adapt to + its rate limits: + https://www.ietf.org/id/draft-polli-ratelimit-headers-02.html + + See https://github.com/curl/curl/issues/5406 + +18.14 --dry-run + + A command line option that makes curl show exactly what it would do and send + if it would run for real. + + See https://github.com/curl/curl/issues/5426 + +18.15 --retry should resume + + When --retry is used and curl actually retries transfer, it should use the + already transferred data and do a resumed transfer for the rest (when + possible) so that it does not have to transfer the same data again that was + already transferred before the retry. + + See https://github.com/curl/curl/issues/1084 + +18.16 send only part of --data + + When the user only wants to send a small piece of the data provided with + --data or --data-binary, like when that data is a huge file, consider a way + to specify that curl should only send a piece of that. One suggested syntax + would be: "--data-binary @largefile.zip!1073741823-2147483647". + + See https://github.com/curl/curl/issues/1200 + +18.17 consider file name from the redirected URL with -O ? + + When a user gives a URL and uses -O, and curl follows a redirect to a new + URL, the file name is not extracted and used from the newly redirected-to URL + even if the new URL may have a much more sensible file name. + + This is clearly documented and helps for security since there is no surprise + to users which file name that might get overwritten. But maybe a new option + could allow for this or maybe -J should imply such a treatment as well as -J + already allows for the server to decide what file name to use so it already + provides the "may overwrite any file" risk. + + This is extra tricky if the original URL has no file name part at all since + then the current code path will error out with an error message, and we cannot + *know* already at that point if curl will be redirected to a URL that has a + file name... + + See https://github.com/curl/curl/issues/1241 + +18.18 retry on network is unreachable + + The --retry option retries transfers on "transient failures". We later added + --retry-connrefused to also retry for "connection refused" errors. + + Suggestions have been brought to also allow retry on "network is unreachable" + errors and while totally reasonable, maybe we should consider a way to make + this more configurable than to add a new option for every new error people + want to retry for? + + https://github.com/curl/curl/issues/1603 + +18.19 expand ~/ in config files + + For example .curlrc could benefit from being able to do this. + + See https://github.com/curl/curl/issues/2317 + +18.20 host name sections in config files + + config files would be more powerful if they could set different + configurations depending on used URLs, host name or possibly origin. Then a + default .curlrc could a specific user-agent only when doing requests against + a certain site. + +18.21 retry on the redirected-to URL + + When curl is told to --retry a failed transfer and follows redirects, it + might get an HTTP 429 response from the redirected-to URL and not the + original one, which then could make curl decide to rather retry the transfer + on that URL only instead of the original operation to the original URL. + + Perhaps extra emphasized if the original transfer is a large POST that + redirects to a separate GET, and that GET is what gets the 529 + + See https://github.com/curl/curl/issues/5462 + +18.23 Set the modification date on an uploaded file + + For SFTP and possibly FTP, curl could offer an option to set the + modification time for the uploaded file. + + See https://github.com/curl/curl/issues/5768 + +18.24 Use multiple parallel transfers for a single download + + To enhance transfer speed, downloading a single URL can be split up into + multiple separate range downloads that get combined into a single final + result. + + An ideal implementation would not use a specified number of parallel + transfers, but curl could: + - First start getting the full file as transfer A + - If after N seconds have passed and the transfer is expected to continue for + M seconds or more, add a new transfer (B) that asks for the second half of + A's content (and stop A at the middle). + - If splitting up the work improves the transfer rate, it could then be done + again. Then again, etc up to a limit. + + This way, if transfer B fails (because Range: is not supported) it will let + transfer A remain the single one. N and M could be set to some sensible + defaults. + + See https://github.com/curl/curl/issues/5774 + +18.25 Prevent terminal injection when writing to terminal + + curl could offer an option to make escape sequence either non-functional or + avoid cursor moves or similar to reduce the risk of a user getting tricked by + clever tricks. + + See https://github.com/curl/curl/issues/6150 + +18.26 Custom progress meter update interval + + Users who are for example doing large downloads in CI or remote setups might + want the occasional progress meter update to see that the transfer is + progressing and has not stuck, but they may not appreciate the + many-times-a-second frequency curl can end up doing it with now. + +18.27 -J and -O with %-encoded file names + + -J/--remote-header-name does not decode %-encoded file names. RFC 6266 details + how it should be done. The can of worm is basically that we have no charset + handling in curl and ascii >=128 is a challenge for us. Not to mention that + decoding also means that we need to check for nastiness that is attempted, + like "../" sequences and the like. Probably everything to the left of any + embedded slashes should be cut off. + https://curl.se/bug/view.cgi?id=1294 + + -O also does not decode %-encoded names, and while it has even less + information about the charset involved the process is similar to the -J case. + + Note that we will not add decoding to -O without the user asking for it with + some other means as well, since -O has always been documented to use the name + exactly as specified in the URL. + +18.28 -J with -C - + + When using -J (with -O), automatically resumed downloading together with "-C + -" fails. Without -J the same command line works. This happens because the + resume logic is worked out before the target file name (and thus its + pre-transfer size) has been figured out. This can be improved. + + https://curl.se/bug/view.cgi?id=1169 + +18.29 --retry and transfer timeouts + + If using --retry and the transfer timeouts (possibly due to using -m or + -y/-Y) the next attempt does not resume the transfer properly from what was + downloaded in the previous attempt but will truncate and restart at the + original position where it was at before the previous failed attempt. See + https://curl.se/mail/lib-2008-01/0080.html and Mandriva bug report + https://qa.mandriva.com/show_bug.cgi?id=22565 + + + +19. Build + +19.1 roffit + + Consider extending 'roffit' to produce decent ASCII output, and use that + instead of (g)nroff when building src/tool_hugehelp.c + +19.2 Enable PIE and RELRO by default + + Especially when having programs that execute curl via the command line, PIE + renders the exploitation of memory corruption vulnerabilities a lot more + difficult. This can be attributed to the additional information leaks being + required to conduct a successful attack. RELRO, on the other hand, masks + different binary sections like the GOT as read-only and thus kills a handful + of techniques that come in handy when attackers are able to arbitrarily + overwrite memory. A few tests showed that enabling these features had close + to no impact, neither on the performance nor on the general functionality of + curl. + +19.3 Do not use GNU libtool on OpenBSD + When compiling curl on OpenBSD with "--enable-debug" it will give linking + errors when you use GNU libtool. This can be fixed by using the libtool + provided by OpenBSD itself. However for this the user always needs to invoke + make with "LIBTOOL=/usr/bin/libtool". It would be nice if the script could + have some magic to detect if this system is an OpenBSD host and then use the + OpenBSD libtool instead. + + See https://github.com/curl/curl/issues/5862 + +19.4 Package curl for Windows in a signed installer + + See https://github.com/curl/curl/issues/5424 + +19.5 make configure use --cache-file more and better + + The configure script can be improved to cache more values so that repeated + invokes run much faster. + + See https://github.com/curl/curl/issues/7753 + +19.6 build curl with Windows Unicode support + + The user wants an easier way to tell autotools to build curl with Windows + Unicode support, like ./configure --enable-windows-unicode + + See https://github.com/curl/curl/issues/7229 + +20. Test suite + +20.1 SSL tunnel + + Make our own version of stunnel for simple port forwarding to enable HTTPS + and FTP-SSL tests without the stunnel dependency, and it could allow us to + provide test tools built with either OpenSSL or GnuTLS + +20.2 nicer lacking perl message + + If perl was not found by the configure script, do not attempt to run the tests + but explain something nice why it does not. + +20.3 more protocols supported + + Extend the test suite to include more protocols. The telnet could just do FTP + or http operations (for which we have test servers). + +20.4 more platforms supported + + Make the test suite work on more platforms. OpenBSD and Mac OS. Remove + fork()s and it should become even more portable. + +20.5 Add support for concurrent connections + + Tests 836, 882 and 938 were designed to verify that separate connections are + not used when using different login credentials in protocols that should not + reuse a connection under such circumstances. + + Unfortunately, ftpserver.pl does not appear to support multiple concurrent + connections. The read while() loop seems to loop until it receives a + disconnect from the client, where it then enters the waiting for connections + loop. When the client opens a second connection to the server, the first + connection has not been dropped (unless it has been forced - which we + should not do in these tests) and thus the wait for connections loop is never + entered to receive the second connection. + +20.6 Use the RFC 6265 test suite + + A test suite made for HTTP cookies (RFC 6265) by Adam Barth is available at + https://github.com/abarth/http-state/tree/master/tests + + It'd be really awesome if someone would write a script/setup that would run + curl with that test suite and detect deviances. Ideally, that would even be + incorporated into our regular test suite. + +20.7 Support LD_PRELOAD on macOS + + LD_RELOAD does not work on macOS, but there are tests which require it to run + properly. Look into making the preload support in runtests.pl portable such + that it uses DYLD_INSERT_LIBRARIES on macOS. + +20.8 Run web-platform-tests URL tests + + Run web-platform-tests URL tests and compare results with browsers on wpt.fyi + + It would help us find issues to fix and help us document where our parser + differs from the WHATWG URL spec parsers. + + See https://github.com/curl/curl/issues/4477 + +21. MQTT + +21.1 Support rate-limiting + + The rate-limiting logic is done in the PERFORMING state in multi.c but MQTT + is not (yet) implemented to use that. diff --git a/deps/curl/docs/TheArtOfHttpScripting.md b/deps/curl/docs/TheArtOfHttpScripting.md new file mode 100644 index 0000000..43f13e2 --- /dev/null +++ b/deps/curl/docs/TheArtOfHttpScripting.md @@ -0,0 +1,712 @@ +# The Art Of Scripting HTTP Requests Using Curl + +## Background + + This document assumes that you are familiar with HTML and general networking. + + The increasing amount of applications moving to the web has made "HTTP + Scripting" more frequently requested and wanted. To be able to automatically + extract information from the web, to fake users, to post or upload data to + web servers are all important tasks today. + + Curl is a command line tool for doing all sorts of URL manipulations and + transfers, but this particular document will focus on how to use it when + doing HTTP requests for fun and profit. This documents assumes that you know + how to invoke `curl --help` or `curl --manual` to get basic information about + it. + + Curl is not written to do everything for you. It makes the requests, it gets + the data, it sends data and it retrieves the information. You probably need + to glue everything together using some kind of script language or repeated + manual invokes. + +## The HTTP Protocol + + HTTP is the protocol used to fetch data from web servers. It is a simple + protocol that is built upon TCP/IP. The protocol also allows information to + get sent to the server from the client using a few different methods, as will + be shown here. + + HTTP is plain ASCII text lines being sent by the client to a server to + request a particular action, and then the server replies a few text lines + before the actual requested content is sent to the client. + + The client, curl, sends an HTTP request. The request contains a method (like + GET, POST, HEAD etc), a number of request headers and sometimes a request + body. The HTTP server responds with a status line (indicating if things went + well), response headers and most often also a response body. The "body" part + is the plain data you requested, like the actual HTML or the image etc. + +## See the Protocol + + Using curl's option [`--verbose`](https://curl.se/docs/manpage.html#-v) + (`-v` as a short option) will display what kind of commands curl sends to the + server, as well as a few other informational texts. + + `--verbose` is the single most useful option when it comes to debug or even + understand the curl<->server interaction. + + Sometimes even `--verbose` is not enough. Then + [`--trace`](https://curl.se/docs/manpage.html#-trace) and + [`--trace-ascii`](https://curl.se/docs/manpage.html#--trace-ascii) + offer even more details as they show **everything** curl sends and + receives. Use it like this: + + curl --trace-ascii debugdump.txt http://www.example.com/ + +## See the Timing + + Many times you may wonder what exactly is taking all the time, or you just + want to know the amount of milliseconds between two points in a transfer. For + those, and other similar situations, the + [`--trace-time`](https://curl.se/docs/manpage.html#--trace-time) option + is what you need. It will prepend the time to each trace output line: + + curl --trace-ascii d.txt --trace-time http://example.com/ + +## See which Transfer + + When doing parallel transfers, it is relevant to see which transfer is + doing what. When response headers are received (and logged) you need to + know which transfer these are for. + [`--trace-ids`](https://curl.se/docs/manpage.html#--trace-ids) option + is what you need. It will prepend the transfer and connection identifier + to each trace output line: + + curl --trace-ascii d.txt --trace-ids http://example.com/ + +## See the Response + + By default curl sends the response to stdout. You need to redirect it + somewhere to avoid that, most often that is done with `-o` or `-O`. + +# URL + +## Spec + + The Uniform Resource Locator format is how you specify the address of a + particular resource on the Internet. You know these, you have seen URLs like + https://curl.se or https://example.com a million times. RFC 3986 is the + canonical spec. And yeah, the formal name is not URL, it is URI. + +## Host + + The host name is usually resolved using DNS or your /etc/hosts file to an IP + address and that is what curl will communicate with. Alternatively you specify + the IP address directly in the URL instead of a name. + + For development and other trying out situations, you can point to a different + IP address for a host name than what would otherwise be used, by using curl's + [`--resolve`](https://curl.se/docs/manpage.html#--resolve) option: + + curl --resolve www.example.org:80:127.0.0.1 http://www.example.org/ + +## Port number + + Each protocol curl supports operates on a default port number, be it over TCP + or in some cases UDP. Normally you do not have to take that into + consideration, but at times you run test servers on other ports or + similar. Then you can specify the port number in the URL with a colon and a + number immediately following the host name. Like when doing HTTP to port + 1234: + + curl http://www.example.org:1234/ + + The port number you specify in the URL is the number that the server uses to + offer its services. Sometimes you may use a proxy, and then you may + need to specify that proxy's port number separately from what curl needs to + connect to the server. Like when using an HTTP proxy on port 4321: + + curl --proxy http://proxy.example.org:4321 http://remote.example.org/ + +## User name and password + + Some services are setup to require HTTP authentication and then you need to + provide name and password which is then transferred to the remote site in + various ways depending on the exact authentication protocol used. + + You can opt to either insert the user and password in the URL or you can + provide them separately: + + curl http://user:password@example.org/ + + or + + curl -u user:password http://example.org/ + + You need to pay attention that this kind of HTTP authentication is not what + is usually done and requested by user-oriented websites these days. They tend + to use forms and cookies instead. + +## Path part + + The path part is just sent off to the server to request that it sends back + the associated response. The path is what is to the right side of the slash + that follows the host name and possibly port number. + +# Fetch a page + +## GET + + The simplest and most common request/operation made using HTTP is to GET a + URL. The URL could itself refer to a web page, an image or a file. The client + issues a GET request to the server and receives the document it asked for. + If you issue the command line + + curl https://curl.se + + you get a web page returned in your terminal window. The entire HTML document + that that URL holds. + + All HTTP replies contain a set of response headers that are normally hidden, + use curl's [`--include`](https://curl.se/docs/manpage.html#-i) (`-i`) + option to display them as well as the rest of the document. + +## HEAD + + You can ask the remote server for ONLY the headers by using the + [`--head`](https://curl.se/docs/manpage.html#-I) (`-I`) option which + will make curl issue a HEAD request. In some special cases servers deny the + HEAD method while others still work, which is a particular kind of annoyance. + + The HEAD method is defined and made so that the server returns the headers + exactly the way it would do for a GET, but without a body. It means that you + may see a `Content-Length:` in the response headers, but there must not be an + actual body in the HEAD response. + +## Multiple URLs in a single command line + + A single curl command line may involve one or many URLs. The most common case + is probably to just use one, but you can specify any amount of URLs. Yes + any. No limits. You will then get requests repeated over and over for all the + given URLs. + + Example, send two GET requests: + + curl http://url1.example.com http://url2.example.com + + If you use [`--data`](https://curl.se/docs/manpage.html#-d) to POST to + the URL, using multiple URLs means that you send that same POST to all the + given URLs. + + Example, send two POSTs: + + curl --data name=curl http://url1.example.com http://url2.example.com + + +## Multiple HTTP methods in a single command line + + Sometimes you need to operate on several URLs in a single command line and do + different HTTP methods on each. For this, you will enjoy the + [`--next`](https://curl.se/docs/manpage.html#-:) option. It is basically + a separator that separates a bunch of options from the next. All the URLs + before `--next` will get the same method and will get all the POST data + merged into one. + + When curl reaches the `--next` on the command line, it will sort of reset the + method and the POST data and allow a new set. + + Perhaps this is best shown with a few examples. To send first a HEAD and then + a GET: + + curl -I http://example.com --next http://example.com + + To first send a POST and then a GET: + + curl -d score=10 http://example.com/post.cgi --next http://example.com/results.html + +# HTML forms + +## Forms explained + + Forms are the general way a website can present an HTML page with fields for + the user to enter data in, and then press some kind of 'OK' or 'Submit' + button to get that data sent to the server. The server then typically uses + the posted data to decide how to act. Like using the entered words to search + in a database, or to add the info in a bug tracking system, display the + entered address on a map or using the info as a login-prompt verifying that + the user is allowed to see what it is about to see. + + Of course there has to be some kind of program on the server end to receive + the data you send. You cannot just invent something out of the air. + +## GET + + A GET-form uses the method GET, as specified in HTML like: + +```html +
+ + +
+``` + + In your favorite browser, this form will appear with a text box to fill in + and a press-button labeled "OK". If you fill in '1905' and press the OK + button, your browser will then create a new URL to get for you. The URL will + get `junk.cgi?birthyear=1905&press=OK` appended to the path part of the + previous URL. + + If the original form was seen on the page `www.example.com/when/birth.html`, + the second page you will get will become + `www.example.com/when/junk.cgi?birthyear=1905&press=OK`. + + Most search engines work this way. + + To make curl do the GET form post for you, just enter the expected created + URL: + + curl "http://www.example.com/when/junk.cgi?birthyear=1905&press=OK" + +## POST + + The GET method makes all input field names get displayed in the URL field of + your browser. That is generally a good thing when you want to be able to + bookmark that page with your given data, but it is an obvious disadvantage if + you entered secret information in one of the fields or if there are a large + amount of fields creating a long and unreadable URL. + + The HTTP protocol then offers the POST method. This way the client sends the + data separated from the URL and thus you will not see any of it in the URL + address field. + + The form would look similar to the previous one: + +```html +
+ + +
+``` + + And to use curl to post this form with the same data filled in as before, we + could do it like: + + curl --data "birthyear=1905&press=%20OK%20" http://www.example.com/when/junk.cgi + + This kind of POST will use the Content-Type + `application/x-www-form-urlencoded` and is the most widely used POST kind. + + The data you send to the server MUST already be properly encoded, curl will + not do that for you. For example, if you want the data to contain a space, + you need to replace that space with `%20`, etc. Failing to comply with this will + most likely cause your data to be received wrongly and messed up. + + Recent curl versions can in fact url-encode POST data for you, like this: + + curl --data-urlencode "name=I am Daniel" http://www.example.com + + If you repeat `--data` several times on the command line, curl will + concatenate all the given data pieces - and put a `&` symbol between each + data segment. + +## File Upload POST + + Back in late 1995 they defined an additional way to post data over HTTP. It + is documented in the RFC 1867, why this method sometimes is referred to as + RFC 1867-posting. + + This method is mainly designed to better support file uploads. A form that + allows a user to upload a file could be written like this in HTML: + +```html +
+ + +
+``` + + This clearly shows that the Content-Type about to be sent is + `multipart/form-data`. + + To post to a form like this with curl, you enter a command line like: + + curl --form upload=@localfilename --form press=OK [URL] + +## Hidden Fields + + A common way for HTML based applications to pass state information between + pages is to add hidden fields to the forms. Hidden fields are already filled + in, they are not displayed to the user and they get passed along just as all + the other fields. + + A similar example form with one visible field, one hidden field and one + submit button could look like: + +```html +
+ + + +
+``` + + To POST this with curl, you will not have to think about if the fields are + hidden or not. To curl they are all the same: + + curl --data "birthyear=1905&press=OK&person=daniel" [URL] + +## Figure Out What A POST Looks Like + + When you are about to fill in a form and send it to a server by using curl + instead of a browser, you are of course interested in sending a POST exactly + the way your browser does. + + An easy way to get to see this, is to save the HTML page with the form on + your local disk, modify the 'method' to a GET, and press the submit button + (you could also change the action URL if you want to). + + You will then clearly see the data get appended to the URL, separated with a + `?`-letter as GET forms are supposed to. + +# HTTP upload + +## PUT + + Perhaps the best way to upload data to an HTTP server is to use PUT. Then + again, this of course requires that someone put a program or script on the + server end that knows how to receive an HTTP PUT stream. + + Put a file to an HTTP server with curl: + + curl --upload-file uploadfile http://www.example.com/receive.cgi + +# HTTP Authentication + +## Basic Authentication + + HTTP Authentication is the ability to tell the server your username and + password so that it can verify that you are allowed to do the request you are + doing. The Basic authentication used in HTTP (which is the type curl uses by + default) is **plain text** based, which means it sends username and password + only slightly obfuscated, but still fully readable by anyone that sniffs on + the network between you and the remote server. + + To tell curl to use a user and password for authentication: + + curl --user name:password http://www.example.com + +## Other Authentication + + The site might require a different authentication method (check the headers + returned by the server), and then + [`--ntlm`](https://curl.se/docs/manpage.html#--ntlm), + [`--digest`](https://curl.se/docs/manpage.html#--digest), + [`--negotiate`](https://curl.se/docs/manpage.html#--negotiate) or even + [`--anyauth`](https://curl.se/docs/manpage.html#--anyauth) might be + options that suit you. + +## Proxy Authentication + + Sometimes your HTTP access is only available through the use of an HTTP + proxy. This seems to be especially common at various companies. An HTTP proxy + may require its own user and password to allow the client to get through to + the Internet. To specify those with curl, run something like: + + curl --proxy-user proxyuser:proxypassword curl.se + + If your proxy requires the authentication to be done using the NTLM method, + use [`--proxy-ntlm`](https://curl.se/docs/manpage.html#--proxy-ntlm), if + it requires Digest use + [`--proxy-digest`](https://curl.se/docs/manpage.html#--proxy-digest). + + If you use any one of these user+password options but leave out the password + part, curl will prompt for the password interactively. + +## Hiding credentials + + Do note that when a program is run, its parameters might be possible to see + when listing the running processes of the system. Thus, other users may be + able to watch your passwords if you pass them as plain command line + options. There are ways to circumvent this. + + It is worth noting that while this is how HTTP Authentication works, many + websites will not use this concept when they provide logins etc. See the Web + Login chapter further below for more details on that. + +# More HTTP Headers + +## Referer + + An HTTP request may include a 'referer' field (yes it is misspelled), which + can be used to tell from which URL the client got to this particular + resource. Some programs/scripts check the referer field of requests to verify + that this was not arriving from an external site or an unknown page. While + this is a stupid way to check something so easily forged, many scripts still + do it. Using curl, you can put anything you want in the referer-field and + thus more easily be able to fool the server into serving your request. + + Use curl to set the referer field with: + + curl --referer http://www.example.come http://www.example.com + +## User Agent + + Similar to the referer field, all HTTP requests may set the User-Agent + field. It names what user agent (client) that is being used. Many + applications use this information to decide how to display pages. Silly web + programmers try to make different pages for users of different browsers to + make them look the best possible for their particular browsers. They usually + also do different kinds of JavaScript etc. + + At times, you will see that getting a page with curl will not return the same + page that you see when getting the page with your browser. Then you know it + is time to set the User Agent field to fool the server into thinking you are + one of those browsers. + + To make curl look like Internet Explorer 5 on a Windows 2000 box: + + curl --user-agent "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)" [URL] + + Or why not look like you are using Netscape 4.73 on an old Linux box: + + curl --user-agent "Mozilla/4.73 [en] (X11; U; Linux 2.2.15 i686)" [URL] + +## Redirects + +## Location header + + When a resource is requested from a server, the reply from the server may + include a hint about where the browser should go next to find this page, or a + new page keeping newly generated output. The header that tells the browser to + redirect is `Location:`. + + Curl does not follow `Location:` headers by default, but will simply display + such pages in the same manner it displays all HTTP replies. It does however + feature an option that will make it attempt to follow the `Location:` + pointers. + + To tell curl to follow a Location: + + curl --location http://www.example.com + + If you use curl to POST to a site that immediately redirects you to another + page, you can safely use + [`--location`](https://curl.se/docs/manpage.html#-L) (`-L`) and + `--data`/`--form` together. Curl will only use POST in the first request, and + then revert to GET in the following operations. + +## Other redirects + + Browsers typically support at least two other ways of redirects that curl + does not: first the html may contain a meta refresh tag that asks the browser + to load a specific URL after a set number of seconds, or it may use + JavaScript to do it. + +# Cookies + +## Cookie Basics + + The way the web browsers do "client side state control" is by using + cookies. Cookies are just names with associated contents. The cookies are + sent to the client by the server. The server tells the client for what path + and host name it wants the cookie sent back, and it also sends an expiration + date and a few more properties. + + When a client communicates with a server with a name and path as previously + specified in a received cookie, the client sends back the cookies and their + contents to the server, unless of course they are expired. + + Many applications and servers use this method to connect a series of requests + into a single logical session. To be able to use curl in such occasions, we + must be able to record and send back cookies the way the web application + expects them. The same way browsers deal with them. + +## Cookie options + + The simplest way to send a few cookies to the server when getting a page with + curl is to add them on the command line like: + + curl --cookie "name=Daniel" http://www.example.com + + Cookies are sent as common HTTP headers. This is practical as it allows curl + to record cookies simply by recording headers. Record cookies with curl by + using the [`--dump-header`](https://curl.se/docs/manpage.html#-D) (`-D`) + option like: + + curl --dump-header headers_and_cookies http://www.example.com + + (Take note that the + [`--cookie-jar`](https://curl.se/docs/manpage.html#-c) option described + below is a better way to store cookies.) + + Curl has a full blown cookie parsing engine built-in that comes in use if you + want to reconnect to a server and use cookies that were stored from a + previous connection (or hand-crafted manually to fool the server into + believing you had a previous connection). To use previously stored cookies, + you run curl like: + + curl --cookie stored_cookies_in_file http://www.example.com + + Curl's "cookie engine" gets enabled when you use the + [`--cookie`](https://curl.se/docs/manpage.html#-b) option. If you only + want curl to understand received cookies, use `--cookie` with a file that + does not exist. Example, if you want to let curl understand cookies from a + page and follow a location (and thus possibly send back cookies it received), + you can invoke it like: + + curl --cookie nada --location http://www.example.com + + Curl has the ability to read and write cookie files that use the same file + format that Netscape and Mozilla once used. It is a convenient way to share + cookies between scripts or invokes. The `--cookie` (`-b`) switch + automatically detects if a given file is such a cookie file and parses it, + and by using the `--cookie-jar` (`-c`) option you will make curl write a new + cookie file at the end of an operation: + + curl --cookie cookies.txt --cookie-jar newcookies.txt \ + http://www.example.com + +# HTTPS + +## HTTPS is HTTP secure + + There are a few ways to do secure HTTP transfers. By far the most common + protocol for doing this is what is generally known as HTTPS, HTTP over + SSL. SSL encrypts all the data that is sent and received over the network and + thus makes it harder for attackers to spy on sensitive information. + + SSL (or TLS as the current version of the standard is called) offers a set of + advanced features to do secure transfers over HTTP. + + Curl supports encrypted fetches when built to use a TLS library and it can be + built to use one out of a fairly large set of libraries - `curl -V` will show + which one your curl was built to use (if any!). To get a page from an HTTPS + server, simply run curl like: + + curl https://secure.example.com + +## Certificates + + In the HTTPS world, you use certificates to validate that you are the one + you claim to be, as an addition to normal passwords. Curl supports client- + side certificates. All certificates are locked with a pass phrase, which you + need to enter before the certificate can be used by curl. The pass phrase + can be specified on the command line or if not, entered interactively when + curl queries for it. Use a certificate with curl on an HTTPS server like: + + curl --cert mycert.pem https://secure.example.com + + curl also tries to verify that the server is who it claims to be, by + verifying the server's certificate against a locally stored CA cert + bundle. Failing the verification will cause curl to deny the connection. You + must then use [`--insecure`](https://curl.se/docs/manpage.html#-k) + (`-k`) in case you want to tell curl to ignore that the server cannot be + verified. + + More about server certificate verification and ca cert bundles can be read in + the [`SSLCERTS` document](https://curl.se/docs/sslcerts.html). + + At times you may end up with your own CA cert store and then you can tell + curl to use that to verify the server's certificate: + + curl --cacert ca-bundle.pem https://example.com/ + +# Custom Request Elements + +## Modify method and headers + + Doing fancy stuff, you may need to add or change elements of a single curl + request. + + For example, you can change the POST method to `PROPFIND` and send the data + as `Content-Type: text/xml` (instead of the default `Content-Type`) like + this: + + curl --data "" --header "Content-Type: text/xml" \ + --request PROPFIND example.com + + You can delete a default header by providing one without content. Like you + can ruin the request by chopping off the `Host:` header: + + curl --header "Host:" http://www.example.com + + You can add headers the same way. Your server may want a `Destination:` + header, and you can add it: + + curl --header "Destination: http://nowhere" http://example.com + +## More on changed methods + + It should be noted that curl selects which methods to use on its own + depending on what action to ask for. `-d` will do POST, `-I` will do HEAD and + so on. If you use the + [`--request`](https://curl.se/docs/manpage.html#-X) / `-X` option you + can change the method keyword curl selects, but you will not modify curl's + behavior. This means that if you for example use -d "data" to do a POST, you + can modify the method to a `PROPFIND` with `-X` and curl will still think it + sends a POST . You can change the normal GET to a POST method by simply + adding `-X POST` in a command line like: + + curl -X POST http://example.org/ + + ... but curl will still think and act as if it sent a GET so it will not send + any request body etc. + +# Web Login + +## Some login tricks + + While not strictly just HTTP related, it still causes a lot of people + problems so here's the executive run-down of how the vast majority of all + login forms work and how to login to them using curl. + + It can also be noted that to do this properly in an automated fashion, you + will most certainly need to script things and do multiple curl invokes etc. + + First, servers mostly use cookies to track the logged-in status of the + client, so you will need to capture the cookies you receive in the + responses. Then, many sites also set a special cookie on the login page (to + make sure you got there through their login page) so you should make a habit + of first getting the login-form page to capture the cookies set there. + + Some web-based login systems feature various amounts of JavaScript, and + sometimes they use such code to set or modify cookie contents. Possibly they + do that to prevent programmed logins, like this manual describes how to... + Anyway, if reading the code is not enough to let you repeat the behavior + manually, capturing the HTTP requests done by your browsers and analyzing the + sent cookies is usually a working method to work out how to shortcut the + JavaScript need. + + In the actual `
` tag for the login, lots of sites fill-in + random/session or otherwise secretly generated hidden tags and you may need + to first capture the HTML code for the login form and extract all the hidden + fields to be able to do a proper login POST. Remember that the contents need + to be URL encoded when sent in a normal POST. + +# Debug + +## Some debug tricks + + Many times when you run curl on a site, you will notice that the site does not + seem to respond the same way to your curl requests as it does to your + browser's. + + Then you need to start making your curl requests more similar to your + browser's requests: + + - Use the `--trace-ascii` option to store fully detailed logs of the requests + for easier analyzing and better understanding + + - Make sure you check for and use cookies when needed (both reading with + `--cookie` and writing with `--cookie-jar`) + + - Set user-agent (with [`-A`](https://curl.se/docs/manpage.html#-A)) to + one like a recent popular browser does + + - Set referer (with [`-E`](https://curl.se/docs/manpage.html#-E)) like + it is set by the browser + + - If you use POST, make sure you send all the fields and in the same order as + the browser does it. + +## Check what the browsers do + + A good helper to make sure you do this right, is the web browsers' developers + tools that let you view all headers you send and receive (even when using + HTTPS). + + A more raw approach is to capture the HTTP traffic on the network with tools + such as Wireshark or tcpdump and check what headers that were sent and + received by the browser. (HTTPS forces you to use `SSLKEYLOGFILE` to do + that.) diff --git a/deps/curl/docs/URL-SYNTAX.md b/deps/curl/docs/URL-SYNTAX.md new file mode 100644 index 0000000..ddd9945 --- /dev/null +++ b/deps/curl/docs/URL-SYNTAX.md @@ -0,0 +1,391 @@ +# URL syntax and their use in curl + +## Specifications + +The official "URL syntax" is primarily defined in these two different +specifications: + + - [RFC 3986](https://datatracker.ietf.org/doc/html/rfc3986) (although URL is called + "URI" in there) + - [The WHATWG URL Specification](https://url.spec.whatwg.org/) + +RFC 3986 is the earlier one, and curl has always tried to adhere to that one +(since it shipped in January 2005). + +The WHATWG URL spec was written later, is incompatible with the RFC 3986 and +changes over time. + +## Variations + +URL parsers as implemented in browsers, libraries and tools usually opt to +support one of the mentioned specifications. Bugs, differences in +interpretations and the moving nature of the WHATWG spec does however make it +unlikely that multiple parsers treat URLs the same way. + +## Security + +Due to the inherent differences between URL parser implementations, it is +considered a security risk to mix different implementations and assume the +same behavior! + +For example, if you use one parser to check if a URL uses a good host name or +the correct auth field, and then pass on that same URL to a *second* parser, +there will always be a risk it treats the same URL differently. There is no +right and wrong in URL land, only differences of opinions. + +libcurl offers a separate API to its URL parser for this reason, among others. + +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 curl. Getting a +URL from an external untrusted party and using it with curl brings several +security concerns: + +1. If you have an application that runs as or in a server application, getting + an unfiltered URL can trick your application to access a local resource + instead of a remote resource. Protecting yourself against localhost accesses + is hard when accepting user provided URLs. + +2. Such custom URLs can 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. + +3. Such a URL might use other schemes than you thought of or planned for. + +## "RFC 3986 plus" + +curl recognizes a URL syntax that we call "RFC 3986 plus". It is grounded on +the well established RFC 3986 to make sure previously written command lines and +curl using scripts will remain working. + +curl's URL parser allows a few deviations from the spec in order to +inter-operate better with URLs that appear in the wild. + +### spaces + +A URL provided to curl cannot contain spaces. They need to be provided URL +encoded to be accepted in a URL by curl. + +An exception to this rule: `Location:` response headers that indicate to a +client where a resource has been redirected to, sometimes contain spaces. This +is a violation of RFC 3986 but is fine in the WHATWG spec. curl handles these +by re-encoding them to `%20`. + +### non-ASCII + +Byte values in a provided URL that are outside of the printable ASCII range +are percent-encoded by curl. + +### multiple slashes + +An absolute URL always starts with a "scheme" followed by a colon. For all the +schemes curl supports, the colon must be followed by two slashes according to +RFC 3986 but not according to the WHATWG spec - which allows one to infinity +amount. + +curl allows one, two or three slashes after the colon to still be considered a +valid URL. + +### "scheme-less" + +curl supports "URLs" that do not start with a scheme. This is not supported by +any of the specifications. This is a shortcut to entering URLs that was +supported by browsers early on and has been mimicked by curl. + +Based on what the host name starts with, curl will "guess" what protocol to +use: + + - `ftp.` means FTP + - `dict.` means DICT + - `ldap.` means LDAP + - `imap.` means IMAP + - `smtp.` means SMTP + - `pop3.` means POP3 + - all other means HTTP + +### globbing letters + +The curl command line tool supports "globbing" of URLs. It means that you can +create ranges and lists using `[N-M]` and `{one,two,three}` sequences. The +letters used for this (`[]{}`) are reserved in RFC 3986 and can therefore not +legitimately be part of such a URL. + +They are however not reserved or special in the WHATWG specification, so +globbing can mess up such URLs. Globbing can be turned off for such occasions +(using `--globoff`). + +# URL syntax details + +A URL may consist of the following components - many of them are optional: + + [scheme][divider][userinfo][hostname][port number][path][query][fragment] + +Each component is separated from the following component with a divider +character or string. + +For example, this could look like: + + http://user:password@www.example.com:80/index.html?foo=bar#top + +## Scheme + +The scheme specifies the protocol to use. A curl build can support a few or +many different schemes. You can limit what schemes curl should accept. + +curl supports the following schemes on URLs specified to transfer. They are +matched case insensitively: + +`dict`, `file`, `ftp`, `ftps`, `gopher`, `gophers`, `http`, `https`, `imap`, +`imaps`, `ldap`, `ldaps`, `mqtt`, `pop3`, `pop3s`, `rtmp`, `rtmpe`, `rtmps`, +`rtmpt`, `rtmpte`, `rtmpts`, `rtsp`, `smb`, `smbs`, `smtp`, `smtps`, `telnet`, +`tftp` + +When the URL is specified to identify a proxy, curl recognizes the following +schemes: + +`http`, `https`, `socks4`, `socks4a`, `socks5`, `socks5h`, `socks` + +## Userinfo + +The userinfo field can be used to set user name and password for +authentication purposes in this transfer. The use of this field is discouraged +since it often means passing around the password in plain text and is thus a +security risk. + +URLs for IMAP, POP3 and SMTP also support *login options* as part of the +userinfo field. They are provided as a semicolon after the password and then +the options. + +## Hostname + +The hostname 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 (within +brackets). For example: + + http://www.example.com/ + + http://hostname/ + + http://192.168.0.1/ + + http://[2001:1890:1112:1::20]/ + +### "localhost" + +Starting in curl 7.77.0, curl uses loopback IP addresses for the name +`localhost`: `127.0.0.1` and `::1`. It does not resolve the name using the +resolver functions. + +This is done to make sure the host accessed is truly the localhost - the local +machine. + +### IDNA + +If curl was built with International Domain Name (IDN) support, it can also +handle host names using non-ASCII characters. + +When built with libidn2, curl uses the IDNA 2008 standard. This is equivalent +to the WHATWG URL spec, but differs from certain browsers that use IDNA 2003 +Transitional Processing. The two standards have a huge overlap but differ +slightly, perhaps most famously in how they deal with the German "double s" +(`ß`). + +When winidn is used, curl uses IDNA 2003 Transitional Processing, like the rest +of Windows. + +## Port number + +If there is a colon after the hostname, that should be followed by the port +number to use. 1 - 65535. curl also supports a blank port number field - but +only if the URL starts with a scheme. + +If the port number is not specified in the URL, curl will used a default port +based on the provide scheme: + +DICT 2628, FTP 21, FTPS 990, GOPHER 70, GOPHERS 70, HTTP 80, HTTPS 443, +IMAP 132, IMAPS 993, LDAP 369, LDAPS 636, MQTT 1883, POP3 110, POP3S 995, +RTMP 1935, RTMPS 443, RTMPT 80, RTSP 554, SCP 22, SFTP 22, SMB 445, SMBS 445, +SMTP 25, SMTPS 465, TELNET 23, TFTP 69 + +# Scheme specific behaviors + +## FTP + +The path part of an FTP request specifies the file to retrieve and from which +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 servers typically put the user in its "home directory" after login, which +then differs between users. To explicitly specify the root directory of an FTP +server, start the path with double slash `//` or `/%2f` (2F is the hexadecimal +value of the ascii code for the slash). + +## 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. + +curl only allows the hostname part of a FILE URL to be one out of these three +alternatives: `localhost`, `127.0.0.1` or blank ("", zero characters). +Anything else will make curl fail to parse the URL. + +### Windows-specific FILE details + +curl accepts that the FILE URL's path starts with a "drive letter". That is a +single letter `a` to `z` followed by a colon or a pipe character (`|`). + +The Windows operating system itself will convert some file accesses to perform +network accesses over SMB/CIFS, through several different file path patterns. +This way, a `file://` URL passed to curl *might* be converted into a network +access inadvertently and unknowingly to curl. This is a Windows feature curl +cannot control or disable. + +## IMAP + +The path part of an IMAP request not only specifies the mailbox to list or +select, but can also be used to check the `UIDVALIDITY` of the mailbox, to +specify the `UID`, `SECTION` and `PARTIAL` octets of the message to fetch and +to specify what messages to search for. + +A top level folder list: + + imap://user:password@mail.example.com + +A folder list on the user's inbox: + + imap://user:password@mail.example.com/INBOX + +Select the user's inbox and fetch message with `uid = 1`: + + imap://user:password@mail.example.com/INBOX/;UID=1 + +Select the user's inbox and fetch the first message in the mail box: + + imap://user:password@mail.example.com/INBOX/;MAILINDEX=1 + +Select the user's inbox, check the `UIDVALIDITY` of the mailbox is 50 and +fetch message 2 if it is: + + imap://user:password@mail.example.com/INBOX;UIDVALIDITY=50/;UID=2 + +Select the user's inbox and fetch the text portion of message 3: + + imap://user:password@mail.example.com/INBOX/;UID=3/;SECTION=TEXT + +Select the user's inbox and fetch the first 1024 octets of message 4: + + imap://user:password@mail.example.com/INBOX/;UID=4/;PARTIAL=0.1024 + +Select the user's inbox and check for NEW messages: + + imap://user:password@mail.example.com/INBOX?NEW + +Select the user's inbox and search for messages containing "shadows" in the +subject line: + + imap://user:password@mail.example.com/INBOX?SUBJECT%20shadows + +Searching via the query part of the URL `?` is a search request for the +results to be returned as message sequence numbers (`MAILINDEX`). It is +possible to make a search request for results to be returned as unique ID +numbers (`UID`) by using a custom curl request via `-X`. `UID` numbers are +unique per session (and multiple sessions when `UIDVALIDITY` is the same). For +example, if you are searching for `"foo bar"` in header+body (`TEXT`) and you +want the matching `MAILINDEX` numbers returned then you could search via URL: + + imap://user:password@mail.example.com/INBOX?TEXT%20%22foo%20bar%22 + +If you want matching `UID` numbers you have to use a custom request: + + imap://user:password@mail.example.com/INBOX -X "UID SEARCH TEXT \"foo bar\"" + +For more information about IMAP commands please see RFC 9051. For more +information about the individual components of an IMAP URL please see RFC 5092. + +* Note old curl versions would `FETCH` by message sequence number when `UID` +was specified in the URL. That was a bug fixed in 7.62.0, which added +`MAILINDEX` to `FETCH` by mail sequence number. + +## 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. + +Search for the `DN` as `My Organization`: + + ldap://ldap.example.com/o=My%20Organization + +the same search but will only return `postalAddress` attributes: + + ldap://ldap.example.com/o=My%20Organization?postalAddress + +Search for an empty `DN` and request information about the +`rootDomainNamingContext` attribute for an Active Directory server: + + ldap://ldap.example.com/?rootDomainNamingContext + +For more information about the individual components of a LDAP URL please +see [RFC 4516](https://datatracker.ietf.org/doc/html/rfc4516). + +## 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. + +## SCP + +The path part of an SCP URL specifies the path and file to retrieve or +upload. 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. + +## SFTP + +The path part of an SFTP URL specifies the file to retrieve or upload. If the +path ends with a slash (`/`) 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. + +## 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 embedded in the URL then it must contain the domain name +and as such, the backslash must be URL encoded as %2f. + +When uploading to SMB, the size of the file needs to be known ahead of time, +meaning that you can upload a file passed to curl over a pipe like stdin. + +curl supports SMB version 1 (only) + +## 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. + +The default smtp port is 25. Some servers use port 587 as an alternative. + +## RTMP + +There is 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`. diff --git a/deps/curl/docs/VERSIONS.md b/deps/curl/docs/VERSIONS.md new file mode 100644 index 0000000..0ec9cd5 --- /dev/null +++ b/deps/curl/docs/VERSIONS.md @@ -0,0 +1,57 @@ +Version Numbers and Releases +============================ + + Curl is not only curl. Curl is also libcurl. They are actually individually + versioned, but they usually follow each other closely. + + The version numbering is always built up using the same system: + + X.Y.Z + + - X is main version number + - Y is release number + - Z is patch number + +## Bumping numbers + + One of these numbers will get bumped in each new release. The numbers to the + right of a bumped number will be reset to zero. + + The main version number will get bumped when *really* big, world colliding + changes are made. The release number is bumped when changes are performed or + things/features are added. The patch number is bumped when the changes are + mere bugfixes. + + It means that after release 1.2.3, we can release 2.0.0 if something really + big has been made, 1.3.0 if not that big changes were made or 1.2.4 if only + bugs were fixed. + + Bumping, as in increasing the number with 1, is unconditionally only + affecting one of the numbers (except the ones to the right of it, that may be + set to zero). 1 becomes 2, 3 becomes 4, 9 becomes 10, 88 becomes 89 and 99 + becomes 100. So, after 1.2.9 comes 1.2.10. After 3.99.3, 3.100.0 might come. + + All original curl source release archives are named according to the libcurl + version (not according to the curl client version that, as said before, might + differ). + + As a service to any application that might want to support new libcurl + features while still being able to build with older versions, all releases + have the libcurl version stored in the `curl/curlver.h` file using a static + numbering scheme that can be used for comparison. The version number is + defined as: + +```c +#define LIBCURL_VERSION_NUM 0xXXYYZZ +``` + + Where `XX`, `YY` and `ZZ` are the main version, release and patch numbers in + hexadecimal. All three number fields are always represented using two digits + (eight bits each). 1.2 would appear as "0x010200" while version 9.11.7 + appears as `0x090b07`. + + This 6-digit hexadecimal number is always a greater number in a more recent + release. It makes comparisons with greater than and less than work. + + This number is also available as three separate defines: + `LIBCURL_VERSION_MAJOR`, `LIBCURL_VERSION_MINOR` and `LIBCURL_VERSION_PATCH`. diff --git a/deps/curl/docs/VULN-DISCLOSURE-POLICY.md b/deps/curl/docs/VULN-DISCLOSURE-POLICY.md new file mode 100644 index 0000000..6505993 --- /dev/null +++ b/deps/curl/docs/VULN-DISCLOSURE-POLICY.md @@ -0,0 +1,293 @@ +# curl vulnerability disclosure policy + +This document describes how security vulnerabilities are handled in the curl +project. + +## Publishing Information + +All known and public curl or libcurl related vulnerabilities are listed on +[the curl website security page](https://curl.se/docs/security.html). + +Security vulnerabilities **should not** be entered in the project's public bug +tracker. + +## Vulnerability Handling + +The typical process for handling a new security vulnerability is as follows. + +No information should be made public about a vulnerability until it is +formally announced at the end of this process. That means, for example, that a +bug tracker entry must NOT be created to track the issue since that will make +the issue public and it should not be discussed on any of the project's public +mailing lists. Messages associated with any commits should not make any +reference to the security nature of the commit if done prior to the public +announcement. + +- The person discovering the issue, the reporter, reports the vulnerability on + [HackerOne](https://hackerone.com/curl). Issues filed there reach a handful + of selected and trusted people. + +- Messages that do not relate to the reporting or managing of an undisclosed + security vulnerability in curl or libcurl are ignored and no further action + is required. + +- A person in the security team responds to the original report to acknowledge + that a human has seen the report. + +- The security team investigates the report and either rejects it or accepts + it. See below for examples of problems that are not considered + vulnerabilities. + +- If the report is rejected, the team writes to the reporter to explain why. + +- If the report is accepted, the team writes to the reporter to let them + know it is accepted and that they are working on a fix. + +- The security team discusses the problem, works out a fix, considers the + impact of the problem and suggests a release schedule. This discussion + should involve the reporter as much as possible. + +- The release of the information should be "as soon as possible" and is most + often synchronized with an upcoming release that contains the fix. If the + reporter, or anyone else involved, thinks the next planned release is too + far away, then a separate earlier release should be considered. + +- Write a security advisory draft about the problem that explains what the + problem is, its impact, which versions it affects, solutions or workarounds, + when the release is out and make sure to credit all contributors properly. + Figure out the CWE (Common Weakness Enumeration) number for the flaw. See + [SECURITY-ADVISORY](https://curl.se/dev/advisory.html) for help on creating + the advisory. + +- Request a CVE number from HackerOne + +- Update the "security advisory" with the CVE number. + +- The security team commits the fix in a private branch. The commit message + should ideally contain the CVE number. If the severity level of the issue is + set to Low or Medium, the fix is allowed to get merged into the master + repository via a normal PR - but without mentioning it being a security + vulnerability. + +- The monetary reward part of the bug-bounty is managed by the Internet Bug + Bounty team and the reporter is asked to request the reward from them after + the issue has been completely handled and published by curl. + +- No more than 10 days before release, inform + [distros@openwall](https://oss-security.openwall.org/wiki/mailing-lists/distros) + to prepare them about the upcoming public security vulnerability + announcement - attach the advisory draft for information with CVE and + current patch. 'distros' does not accept an embargo longer than 14 days and + they do not care for Windows-specific flaws. + +- No more than 48 hours before the release, the private branch is merged into + the master branch and pushed. Once pushed, the information is accessible to + the public and the actual release should follow suit immediately afterwards. + The time between the push and the release is used for final tests and + reviews. + +- The project team creates a release that includes the fix. + +- The project team announces the release and the vulnerability to the world in + the same manner we always announce releases. It gets sent to the + curl-announce, curl-library and curl-users mailing lists. + +- The security web page on the website should get the new vulnerability + mentioned. + +## security (at curl dot se) + +This is a private mailing list for discussions on and about curl security +issues. + +Who is on this list? There are a couple of criteria you must meet, and then we +might ask you to join the list or you can ask to join it. It really is not a +formal process. We basically only require that you have a long-term presence +in the curl project and you have shown an understanding for the project and +its way of working. You must have been around for a good while and you should +have no plans of vanishing in the near future. + +We do not make the list of participants public mostly because it tends to vary +somewhat over time and a list somewhere will only risk getting outdated. + +## Publishing Security Advisories + +1. Write up the security advisory, using markdown syntax. Use the same + subtitles as last time to maintain consistency. + +2. Name the advisory file after the allocated CVE id. + +3. Add a line on the top of the array in `curl-www/docs/vuln.pm`. + +4. Put the new advisory markdown file in the `curl-www/docs/` directory. Add it + to the git repository. + +5. Run `make` in your local web checkout and verify that things look fine. + +6. On security advisory release day, push the changes on the curl-www + repository's remote master branch. + +## HackerOne + +Request the issue to be disclosed. If there are sensitive details present in +the report and discussion, those should be redacted from the disclosure. The +default policy is to disclose as much as possible as soon as the vulnerability +has been published. + +## Bug Bounty + +See [BUG-BOUNTY](https://curl.se/docs/bugbounty.html) for details on the +bug bounty program. + +# Severity levels + +The curl project's security team rates security problems using four severity +levels depending how serious we consider the problem to be. We use **Low**, +**Medium**, **High** and **Critical**. We refrain from using numerical scoring +of vulnerabilities. + +When deciding severity level on a particular issue, we take all the factors +into account: attack vector, attack complexity, required privileges, necessary +build configuration, protocols involved, platform specifics and also what +effects a possible exploit or trigger of the issue can lead do, including +confidentiality, integrity or availability problems. + +## Low + +This is a security problem that is truly hard or unlikely to exploit or +trigger. Due to timing, platform requirements or the fact that options or +protocols involved are rare etc. [Past +example](https://curl.se/docs/CVE-2022-43552.html) + +## Medium + +This is a security problem that is less hard than **Low** to exploit or +trigger. Less strict timing, wider platforms availability or involving more +widely used options or protocols. A problem that usually needs something else +to also happen to become serious. [Past +example](https://curl.se/docs/CVE-2022-32206.html) + +## High + +This issue in itself a serious problem with real world impact. Flaws that can +easily compromise the confidentiality, integrity or availability of resources. +Exploiting or triggering this problem is not hard. [Past +example](https://curl.se/docs/CVE-2019-3822.html) + +## Critical + +Easily exploitable by a remote unauthenticated attacker and lead to system +compromise (arbitrary code execution) without requiring user interaction, with +a common configuration on a popular platform. This issue has few restrictions +and requirements and can be exploited easily using most curl configurations. +[Past example](https://curl.se/docs/CVE-2000-0973.html) + +# Not security issues + +This is an incomplete list of issues that are not considered vulnerabilities. + +## Small memory leaks + +We do not consider a small memory leak a security problem; even if the amount +of allocated memory grows by a small amount every now and then. Long-living +applications and services already need to have counter-measures and deal with +growing memory usage, be it leaks or just increased use. A small memory or +resource leak is then expected to *not* cause a security problem. + +Of course there can be a discussion if a leak is small or not. A large leak +can be considered a security problem due to the DOS risk. If leaked memory +contains sensitive data it might also qualify as a security problem. + +## Never-ending transfers + +We do not consider flaws that cause a transfer to never end to be a security +problem. There are already several benign and likely reasons for transfers to +stall and never end, so applications that cannot deal with never-ending +transfers already need to have counter-measures established. + +If the problem avoids the regular counter-measures when it causes a never- +ending transfer, it might be a security problem. + +## Not practically possible + +If the flaw or vulnerability cannot practically get executed on existing +hardware it is not a security problem. + +## API misuse + +If a reported issue only triggers by an application using the API in a way +that is not documented to work or even documented to not work, it is probably +not going to be considered a security problem. We only guarantee secure and +proper functionality when the APIs are used as expected and documented. + +There can be a discussion about what the documentation actually means and how +to interpret the text, which might end up with us still agreeing that it is a +security problem. + +## Local attackers already present + +When an issue can only be attacked or misused by an attacker present on the +local system or network, the bar is raised. If a local user wrongfully has +elevated rights on your system enough to attack curl, they can probably +already do much worse harm and the problem is not really in curl. + +## Experiments + +Vulnerabilities in features which are off by default (in the build) and +documented as experimental, are not eligible for a reward and we do not +consider them security problems. + +## URL inconsistencies + +URL parser inconsistencies between browsers and curl are expected and are not +considered security vulnerabilities. The WHATWG URL Specification and RFC +3986+ (the plus meaning that it is an extended version) [are not completely +interoperable](https://github.com/bagder/docs/blob/master/URL-interop.md). + +Obvious parser bugs can still be vulnerabilities of course. + +## Visible command line arguments + +The curl command blanks the contents of a number of command line arguments to +prevent them from appearing in process listings. It does not blank all +arguments even if some of them that are not blanked might contain sensitive +data. We consider this functionality a best-effort and omissions are not +security vulnerabilities. + + - not all systems allow the arguments to be blanked in the first place + - since curl blanks the argument itself they will be readable for a short + moment no matter what + - virtually every argument can contain sensitive data, depending on use + - blanking all arguments would make it impractical for users to differentiate + curl command lines in process listings + +## Busy-loops + +Busy-loops that consume 100% CPU time but eventually end (perhaps due to a set +timeout value or otherwise) are not considered security problems. Applications +are supposed to already handle situations when the transfer loop legitimately +consumes 100% CPU time, so while a prolonged such busy-loop is a nasty bug, we +do not consider it a security problem. + +## Saving files + +curl cannot protect against attacks where an attacker has write access to the +same directory where curl is directed to save files. + +## Tricking a user to run a command line + +A creative, misleading or funny looking command line is not a security +problem. The curl command line tool takes options and URLs on the command line +and if an attacker can trick the user to run a specifically crafted curl +command line, all bets are off. Such an attacker can just as well have the +user run a much worse command that can do something fatal (like +`sudo rm -rf /`). + +## Terminal output and escape sequences + +Content that is transferred from a server and gets displayed in a terminal by +curl may contain escape sequences or use other tricks to fool the user. This +is curl working as designed and is not a curl security problem. Escape +sequences, moving cursor, changing color etc, is also frequently used for +good. To reduce the risk of getting fooled, save files and browse them after +download using a display method that minimizes risks. diff --git a/deps/curl/docs/WEBSOCKET.md b/deps/curl/docs/WEBSOCKET.md new file mode 100644 index 0000000..ba84c22 --- /dev/null +++ b/deps/curl/docs/WEBSOCKET.md @@ -0,0 +1,136 @@ + + +# WebSocket in curl + +## URL + +WebSocket communication with libcurl is done by setting up a transfer to a URL +using the `ws://` or `wss://` URL schemes. The latter one being the secure +version done over HTTPS. + +When using `wss://` to do WebSocket over HTTPS, the standard TLS and HTTPS +options will be acknowledged for the CA, verification of server certificate +etc. + +WebSocket communication is done by upgrading a connection from either HTTP or +HTTPS. When given a WebSocket URL to work with, libcurl considers it a +transfer failure if the upgrade procedure fails. This means that a plain HTTP +200 response code is considered an error for this work. + +## API + +The WebSocket API is described in the individual man pages for the new API. + +WebSocket with libcurl can be done two ways. + +1. Get the WebSocket frames from the server sent to the write callback. You + can then respond with `curl_ws_send()` from within the callback (or outside + of it). + +2. Set `CURLOPT_CONNECT_ONLY` to 2L (new for WebSocket), which makes libcurl + do an HTTP GET + `Upgrade:` request plus response in the + `curl_easy_perform()` call before it returns and then you can use + `curl_ws_recv()` and `curl_ws_send()` to receive and send WebSocket frames + from and to the server. + +The new options to `curl_easy_setopt()`: + + `CURLOPT_WS_OPTIONS` - to control specific behavior. `CURLWS_RAW_MODE` makes + libcurl provide all WebSocket traffic raw in the callback. + +The new function calls: + + `curl_ws_recv()` - receive a WebSocket frame + + `curl_ws_send()` - send a WebSocket frame + + `curl_ws_meta()` - return WebSocket metadata within a write callback + +## Max frame size + +The current implementation only supports frame sizes up to a max (64K right +now). This is because the API delivers full frames and it then cannot manage +the full 2^63 bytes size. + +If we decide we need to support (much) larger frames than 64K, we need to +adjust the API accordingly to be able to deliver partial frames in both +directions. + +## Errors + +If the given WebSocket URL (using `ws://` or `wss://`) fails to get upgraded +via a 101 response code and instead gets another response code back from the +HTTP server - the transfer will return `CURLE_HTTP_RETURNED_ERROR` for that +transfer. Note then that even 2xx response codes are then considered error +since it failed to provide a WebSocket transfer. + +## Test suite + +I looked for an existing small WebSocket server implementation with maximum +flexibility to dissect and cram into the test suite but I ended up deciding +that extending the existing test suite server sws to deal with WebSocket +might be the better way. + +- This server is already integrated and working in the test suite + +- We want maximum control and ability to generate broken protocol and negative + tests as well. A dumber and simpler TCP server could then be easier to + massage into this than a "proper" WebSocket server. + +## Command line tool WebSocket + +The plan is to make curl do WebSocket similar to telnet/nc. That part of the +work has not been started. + +Ideas: + + - Read stdin and send off as messages. Consider newline as end of fragment. + (default to text? offer option to set binary) + - Respond to PINGs automatically + - Issue PINGs at some default interval (option to switch off/change interval?) + - Allow `-d` to specify (initial) data to send (should the format allow for + multiple separate frames?) + - Exit after N messages received, where N can be zero. + +## Future work + +- Verify the Sec-WebSocket-Accept response. It requires a sha-1 function. +- Verify Sec-WebSocket-Extensions and Sec-WebSocket-Protocol in the response +- Make WebSocket work with hyper +- Consider a `curl_ws_poll()` +- Make sure WebSocket code paths are fuzzed +- Add client-side PING interval +- Provide option to disable PING-PONG automation +- Support compression (`CURLWS_COMPRESS`) + +## Why not libWebSocket + +[libWebSocket](https://libWebSockets.org/) is said to be a solid, fast and +efficient WebSocket library with a vast amount of users. My plan was +originally to build upon it to skip having to implement the low level parts of +WebSocket myself. + +Here are the reasons why I have decided to move forward with WebSocket in +curl **without using libWebSocket**: + +- doxygen generated docs only makes them hard to navigate. No tutorial, no + clearly written explanatory pages for specific functions. + +- seems (too) tightly integrated with a specific TLS library, while we want to + support WebSocket with whatever TLS library libcurl was already made to + work with. + +- seems (too) tightly integrated with event libraries + +- the references to threads and thread-pools in code and APIs indicate too + much logic for our purposes + +- "bloated" - it is a *huge* library that is actually more lines of code than + libcurl itself + +- WebSocket is a fairly simple protocol on the network/framing layer so + making a homegrown handling of it should be fine diff --git a/deps/curl/docs/cmdline-opts/CMakeLists.txt b/deps/curl/docs/cmdline-opts/CMakeLists.txt new file mode 100644 index 0000000..3dd8be4 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/CMakeLists.txt @@ -0,0 +1,35 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +set(MANPAGE "${CURL_BINARY_DIR}/docs/curl.1") + +# Load DPAGES and OTHERPAGES from shared file +transform_makefile_inc("Makefile.inc" "${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") +include("${CMAKE_CURRENT_BINARY_DIR}/Makefile.inc.cmake") + +add_custom_command(OUTPUT "${MANPAGE}" + COMMAND "${PERL_EXECUTABLE}" "${CMAKE_CURRENT_SOURCE_DIR}/gen.pl" mainpage "${CMAKE_CURRENT_SOURCE_DIR}" > "${MANPAGE}" + DEPENDS ${DPAGES} ${OTHERPAGES} + VERBATIM +) +add_custom_target(generate-curl.1 DEPENDS "${MANPAGE}") diff --git a/deps/curl/docs/cmdline-opts/MANPAGE.md b/deps/curl/docs/cmdline-opts/MANPAGE.md new file mode 100644 index 0000000..6de32da --- /dev/null +++ b/deps/curl/docs/cmdline-opts/MANPAGE.md @@ -0,0 +1,73 @@ + + +# curl man page generator + +This is the curl man page generator. It generates a single nroff man page +output from the set of sources files in this directory. + +There is one source file for each supported command line option. The output +gets `page-header` prepended and `page-footer` appended. The format is +described below. + +## Option files + +Each command line option is described in a file named `.d`, where +option name is written without any prefixing dashes. Like the file name for +the -v, --verbose option is named `verbose.d`. + +Each file has a set of meta-data and a body of text. + +### Meta-data + + Added: (version number in which this was added) + Arg: (the argument the option takes) + c: (copyright line) + Example: (example command line, without "curl" and can use `$URL`) + Experimental: yes (if so) + Help: (short text for the --help output for this option) + Long: (long form name, without dashes) + Magic: (description of "magic" options) + Multi: single/append/boolean/mutex/custom (if used more than once) + Mutexed: (space separated list of options this overrides, no dashes) + Protocols: (space separated list for which protocols this option works) + Requires: (space separated list of features this requires, no dashes) + Scope: global (if the option is global) + See-also: (space separated list of related options, no dashes) + Short: (single letter, without dash) + SPDX-License-Identifier: curl + Tags: (space separated list) + --- (end of meta-data) + +### Body + +The body of the description. Only refer to options with their long form option +version, like `--verbose`. The output generator replaces such option with the +correct markup that shows both short and long version. + +Text written within `*asterisks*` is shown using italics. Text within two +`**asterisks**` is shown using bold. + +Text that is prefixed with a space is treated like an "example" and gets +output in monospace. + +## Header and footer + +`page-header` is the file that is output before the generated options output +for the master man page. + +`page-footer` is appended after all the individual options. + +## Generate + +`./gen.pl mainpage` + +This command outputs a single huge nroff file, meant to become `curl.1`. The +full curl man page. + +`./gen.pl listhelp` + +Generates a full `curl --help` output for all known command line options. diff --git a/deps/curl/docs/cmdline-opts/Makefile.am b/deps/curl/docs/cmdline-opts/Makefile.am new file mode 100644 index 0000000..5a8996b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/Makefile.am @@ -0,0 +1,41 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +AUTOMAKE_OPTIONS = foreign no-dependencies + +MANPAGE = $(top_builddir)/docs/curl.1 + +include Makefile.inc + +EXTRA_DIST = $(DPAGES) MANPAGE.md gen.pl $(OTHERPAGES) CMakeLists.txt + +GEN = $(GN_$(V)) +GN_0 = @echo " GENERATE" $@; +GN_1 = +GN_ = $(GN_0) + +all: $(MANPAGE) + +$(MANPAGE): $(DPAGES) $(OTHERPAGES) Makefile.inc gen.pl + $(GEN)(rm -f $(MANPAGE) && cd $(srcdir) && @PERL@ ./gen.pl mainpage $(DPAGES) > $(builddir)/manpage.tmp && mv $(builddir)/manpage.tmp $(MANPAGE)) diff --git a/deps/curl/docs/cmdline-opts/Makefile.inc b/deps/curl/docs/cmdline-opts/Makefile.inc new file mode 100644 index 0000000..a7c92f2 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/Makefile.inc @@ -0,0 +1,286 @@ +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### +# Shared between Makefile.am and CMakeLists.txt + +DPAGES = \ + abstract-unix-socket.d \ + alt-svc.d \ + anyauth.d \ + append.d \ + aws-sigv4.d \ + basic.d \ + ca-native.d \ + cacert.d \ + capath.d \ + cert-status.d \ + cert-type.d \ + cert.d \ + ciphers.d \ + compressed-ssh.d \ + compressed.d \ + config.d \ + connect-timeout.d \ + connect-to.d \ + continue-at.d \ + cookie-jar.d \ + cookie.d \ + create-dirs.d \ + create-file-mode.d \ + crlf.d \ + crlfile.d \ + curves.d \ + data-ascii.d \ + data-binary.d \ + data-raw.d \ + data-urlencode.d \ + data.d \ + delegation.d \ + digest.d \ + disable-eprt.d \ + disable-epsv.d \ + disable.d \ + disallow-username-in-url.d \ + dns-interface.d \ + dns-ipv4-addr.d \ + dns-ipv6-addr.d \ + dns-servers.d \ + doh-cert-status.d \ + doh-insecure.d \ + doh-url.d \ + dump-header.d \ + egd-file.d \ + engine.d \ + etag-compare.d \ + etag-save.d \ + expect100-timeout.d \ + fail-early.d \ + fail-with-body.d \ + fail.d \ + false-start.d \ + form-escape.d \ + form-string.d \ + form.d \ + ftp-account.d \ + ftp-alternative-to-user.d \ + ftp-create-dirs.d \ + ftp-method.d \ + ftp-pasv.d \ + ftp-port.d \ + ftp-pret.d \ + ftp-skip-pasv-ip.d \ + ftp-ssl-ccc-mode.d \ + ftp-ssl-ccc.d \ + ftp-ssl-control.d \ + get.d \ + globoff.d \ + happy-eyeballs-timeout-ms.d \ + haproxy-protocol.d \ + haproxy-clientip.d \ + head.d \ + header.d \ + help.d \ + hostpubmd5.d \ + hostpubsha256.d \ + hsts.d \ + http0.9.d \ + http1.0.d \ + http1.1.d \ + http2-prior-knowledge.d \ + http2.d \ + http3.d \ + http3-only.d \ + ignore-content-length.d \ + include.d \ + insecure.d \ + interface.d \ + ipfs-gateway.d \ + ipv4.d \ + ipv6.d \ + json.d \ + junk-session-cookies.d \ + keepalive-time.d \ + key-type.d \ + key.d \ + krb.d \ + libcurl.d \ + limit-rate.d \ + list-only.d \ + local-port.d \ + location-trusted.d \ + location.d \ + login-options.d \ + mail-auth.d \ + mail-from.d \ + mail-rcpt-allowfails.d \ + mail-rcpt.d \ + manual.d \ + max-filesize.d \ + max-redirs.d \ + max-time.d \ + metalink.d \ + negotiate.d \ + netrc-file.d \ + netrc-optional.d \ + netrc.d \ + next.d \ + no-alpn.d \ + no-buffer.d \ + no-clobber.d \ + no-keepalive.d \ + no-npn.d \ + no-progress-meter.d \ + no-sessionid.d \ + noproxy.d \ + ntlm-wb.d \ + ntlm.d \ + oauth2-bearer.d \ + output-dir.d \ + output.d \ + parallel-immediate.d \ + parallel-max.d \ + parallel.d \ + pass.d \ + path-as-is.d \ + pinnedpubkey.d \ + post301.d \ + post302.d \ + post303.d \ + preproxy.d \ + progress-bar.d \ + proto-default.d \ + proto-redir.d \ + proto.d \ + proxy-anyauth.d \ + proxy-basic.d \ + proxy-ca-native.d \ + proxy-cacert.d \ + proxy-capath.d \ + proxy-cert-type.d \ + proxy-cert.d \ + proxy-ciphers.d \ + proxy-crlfile.d \ + proxy-digest.d \ + proxy-header.d \ + proxy-http2.d \ + proxy-insecure.d \ + proxy-key-type.d \ + proxy-key.d \ + proxy-negotiate.d \ + proxy-ntlm.d \ + proxy-pass.d \ + proxy-pinnedpubkey.d \ + proxy-service-name.d \ + proxy-ssl-allow-beast.d \ + proxy-ssl-auto-client-cert.d \ + proxy-tls13-ciphers.d \ + proxy-tlsauthtype.d \ + proxy-tlspassword.d \ + proxy-tlsuser.d \ + proxy-tlsv1.d \ + proxy-user.d \ + proxy.d \ + proxy1.0.d \ + proxytunnel.d \ + pubkey.d \ + quote.d \ + random-file.d \ + range.d \ + rate.d \ + raw.d \ + referer.d \ + remote-header-name.d \ + remote-name-all.d \ + remote-name.d \ + remote-time.d \ + remove-on-error.d \ + request-target.d \ + request.d \ + resolve.d \ + retry-all-errors.d \ + retry-connrefused.d \ + retry-delay.d \ + retry-max-time.d \ + retry.d \ + sasl-authzid.d \ + sasl-ir.d \ + service-name.d \ + show-error.d \ + silent.d \ + socks4.d \ + socks4a.d \ + socks5-basic.d \ + socks5-gssapi-nec.d \ + socks5-gssapi-service.d \ + socks5-gssapi.d \ + socks5-hostname.d \ + socks5.d \ + speed-limit.d \ + speed-time.d \ + ssl-allow-beast.d \ + ssl-auto-client-cert.d \ + ssl-no-revoke.d \ + ssl-reqd.d \ + ssl-revoke-best-effort.d \ + ssl.d \ + sslv2.d \ + sslv3.d \ + stderr.d \ + styled-output.d \ + suppress-connect-headers.d \ + tcp-fastopen.d \ + tcp-nodelay.d \ + telnet-option.d \ + tftp-blksize.d \ + tftp-no-options.d \ + time-cond.d \ + tls-max.d \ + tls13-ciphers.d \ + tlsauthtype.d \ + tlspassword.d \ + tlsuser.d \ + tlsv1.0.d \ + tlsv1.1.d \ + tlsv1.2.d \ + tlsv1.3.d \ + tlsv1.d \ + tr-encoding.d \ + trace-ascii.d \ + trace-config.d \ + trace-ids.d \ + trace-time.d \ + trace.d \ + unix-socket.d \ + upload-file.d \ + url.d \ + url-query.d \ + use-ascii.d \ + user-agent.d \ + user.d \ + variable.d \ + verbose.d \ + version.d \ + write-out.d \ + xattr.d + +OTHERPAGES = page-footer page-header diff --git a/deps/curl/docs/cmdline-opts/abstract-unix-socket.d b/deps/curl/docs/cmdline-opts/abstract-unix-socket.d new file mode 100644 index 0000000..5c2fd4a --- /dev/null +++ b/deps/curl/docs/cmdline-opts/abstract-unix-socket.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: abstract-unix-socket +Arg: +Help: Connect via abstract Unix domain socket +Added: 7.53.0 +Protocols: HTTP +Category: connection +See-also: unix-socket +Example: --abstract-unix-socket socketpath $URL +Multi: single +--- +Connect through an abstract Unix domain socket, instead of using the network. +Note: netstat shows the path of an abstract socket prefixed with '@', however +the argument should not have this leading character. diff --git a/deps/curl/docs/cmdline-opts/alt-svc.d b/deps/curl/docs/cmdline-opts/alt-svc.d new file mode 100644 index 0000000..276ac1b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/alt-svc.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: alt-svc +Arg: +Protocols: HTTPS +Help: Enable alt-svc with this cache file +Added: 7.64.1 +Category: http +See-also: resolve connect-to +Example: --alt-svc svc.txt $URL +Multi: append +--- +This option enables the alt-svc parser in curl. If the file name points to an +existing alt-svc cache file, that gets used. After a completed transfer, the +cache is saved to the file name again if it has been modified. + +Specify a "" file name (zero length) to avoid loading/saving and make curl +just handle the cache in memory. + +If this option is used several times, curl loads contents from all the +files but the last one is used for saving. diff --git a/deps/curl/docs/cmdline-opts/anyauth.d b/deps/curl/docs/cmdline-opts/anyauth.d new file mode 100644 index 0000000..2498bdc --- /dev/null +++ b/deps/curl/docs/cmdline-opts/anyauth.d @@ -0,0 +1,22 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: anyauth +Help: Pick any authentication method +Protocols: HTTP +See-also: proxy-anyauth basic digest +Category: http proxy auth +Example: --anyauth --user me:pwd $URL +Added: 7.10.6 +Multi: mutex +--- +Tells curl to figure out authentication method by itself, and use the most +secure one the remote site claims to support. This is done by first doing a +request and checking the response-headers, thus possibly inducing an extra +network round-trip. This is used instead of setting a specific authentication +method, which you can do with --basic, --digest, --ntlm, and --negotiate. + +Using --anyauth is not recommended if you do uploads from stdin, since it may +require data to be sent twice and then the client must be able to rewind. If +the need should arise when uploading from stdin, the upload operation fails. + +Used together with --user. diff --git a/deps/curl/docs/cmdline-opts/append.d b/deps/curl/docs/cmdline-opts/append.d new file mode 100644 index 0000000..7561c95 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/append.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: a +Long: append +Help: Append to target file when uploading +Protocols: FTP SFTP +Category: ftp sftp +See-also: range continue-at +Example: --upload-file local --append ftp://example.com/ +Added: 4.8 +Multi: boolean +--- +When used in an upload, this option makes curl append to the target file +instead of overwriting it. If the remote file does not exist, it is +created. Note that this flag is ignored by some SFTP servers (including +OpenSSH). diff --git a/deps/curl/docs/cmdline-opts/aws-sigv4.d b/deps/curl/docs/cmdline-opts/aws-sigv4.d new file mode 100644 index 0000000..b771eee --- /dev/null +++ b/deps/curl/docs/cmdline-opts/aws-sigv4.d @@ -0,0 +1,22 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: aws-sigv4 +Arg: +Help: Use AWS V4 signature authentication +Category: auth http +Added: 7.75.0 +See-also: basic user +Example: --aws-sigv4 "aws:amz:us-east-2:es" --user "key:secret" $URL +Multi: single +--- +Use AWS V4 signature authentication in the transfer. + +The provider argument is a string that is used by the algorithm when creating +outgoing authentication headers. + +The region argument is a string that points to a geographic area of +a resources collection (region-code) when the region name is omitted from +the endpoint. + +The service argument is a string that points to a function provided by a cloud +(service-code) when the service name is omitted from the endpoint. diff --git a/deps/curl/docs/cmdline-opts/basic.d b/deps/curl/docs/cmdline-opts/basic.d new file mode 100644 index 0000000..cb06426 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/basic.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: basic +Help: Use HTTP Basic Authentication +See-also: proxy-basic +Protocols: HTTP +Category: auth +Example: -u name:password --basic $URL +Added: 7.10.6 +Multi: mutex +--- +Tells curl to use HTTP Basic authentication with the remote host. This is the +default and this option is usually pointless, unless you use it to override a +previously set option that sets a different authentication method (such as +--ntlm, --digest, or --negotiate). + +Used together with --user. diff --git a/deps/curl/docs/cmdline-opts/ca-native.d b/deps/curl/docs/cmdline-opts/ca-native.d new file mode 100644 index 0000000..51e3691 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ca-native.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ca-native +Help: Use CA certificates from the native OS +Protocols: TLS +Category: tls +See-also: cacert capath insecure +Example: --ca-native $URL +Added: 8.2.0 +Multi: boolean +--- +Tells curl to use the CA store from the native operating system to verify the +peer. By default, curl otherwise uses a CA store provided in a single file or +directory, but when using this option it interfaces the operating system's +own vault. + +This option only works for curl on Windows when built to use OpenSSL. When +curl on Windows is built to use Schannel, this feature is implied and curl +then only uses the native CA store. + +curl built with wolfSSL also supports this option (added in 8.3.0). diff --git a/deps/curl/docs/cmdline-opts/cacert.d b/deps/curl/docs/cmdline-opts/cacert.d new file mode 100644 index 0000000..5e4e749 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/cacert.d @@ -0,0 +1,35 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: cacert +Arg: +Help: CA certificate to verify peer against +Protocols: TLS +Category: tls +See-also: capath insecure +Example: --cacert CA-file.txt $URL +Added: 7.5 +Multi: single +--- +Tells curl to use the specified certificate file to verify the peer. The file +may contain multiple CA certificates. The certificate(s) must be in PEM +format. Normally curl is built to use a default file for this, so this option +is typically used to alter that default file. + +curl recognizes the environment variable named 'CURL_CA_BUNDLE' if it is +set, and uses the given path as a path to a CA cert bundle. This option +overrides that variable. + +The windows version of curl automatically looks for a CA certs file named +'curl-ca-bundle.crt', either in the same directory as curl.exe, or in the +Current Working Directory, or in any folder along your PATH. + +(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 uses the certificates +in the system and user Keychain to verify the peer, which is the preferred +method of verifying the peer's certificate chain. + +(Schannel only) This option is supported for Schannel in Windows 7 or later +(added in 7.60.0). This option is supported for backward compatibility with +other SSL engines; instead it is recommended to use Windows' store of root +certificates (the default for Schannel). diff --git a/deps/curl/docs/cmdline-opts/capath.d b/deps/curl/docs/cmdline-opts/capath.d new file mode 100644 index 0000000..75e9f2e --- /dev/null +++ b/deps/curl/docs/cmdline-opts/capath.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: capath +Arg: +Help: CA directory to verify peer against +Protocols: TLS +Category: tls +See-also: cacert insecure +Example: --capath /local/directory $URL +Added: 7.9.8 +Multi: single +--- +Tells curl to use the specified certificate directory to verify the +peer. Multiple paths can be provided by separating them with ":" (e.g. +"path1:path2:path3"). The certificates must be in PEM format, and if curl is +built against OpenSSL, the directory must have been processed using the +c_rehash utility supplied with OpenSSL. Using --capath can allow +OpenSSL-powered curl to make SSL-connections much more efficiently than using +--cacert if the --cacert file contains many CA certificates. + +If this option is set, the default capath value is ignored. diff --git a/deps/curl/docs/cmdline-opts/cert-status.d b/deps/curl/docs/cmdline-opts/cert-status.d new file mode 100644 index 0000000..e2d1d7a --- /dev/null +++ b/deps/curl/docs/cmdline-opts/cert-status.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: cert-status +Protocols: TLS +Added: 7.41.0 +Help: Verify the status of the server cert via OCSP-staple +Category: tls +See-also: pinnedpubkey +Example: --cert-status $URL +Multi: boolean +--- +Tells curl to verify the status of the server certificate by using the +Certificate Status Request (aka. OCSP stapling) TLS extension. + +If this option is enabled and the server sends an invalid (e.g. expired) +response, if the response suggests that the server certificate has been +revoked, or no response at all is received, the verification fails. + +This is currently only implemented in the OpenSSL and GnuTLS backends. diff --git a/deps/curl/docs/cmdline-opts/cert-type.d b/deps/curl/docs/cmdline-opts/cert-type.d new file mode 100644 index 0000000..cf9f17b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/cert-type.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: cert-type +Protocols: TLS +Arg: +Help: Certificate type (DER/PEM/ENG/P12) +See-also: cert key key-type +Category: tls +Example: --cert-type PEM --cert file $URL +Added: 7.9.3 +Multi: single +--- +Tells curl what type the provided client certificate is using. PEM, DER, ENG +and P12 are recognized types. + +The default type depends on the TLS backend and is usually PEM, however for +Secure Transport and Schannel it is P12. If --cert is a pkcs11: URI then ENG is +the default type. diff --git a/deps/curl/docs/cmdline-opts/cert.d b/deps/curl/docs/cmdline-opts/cert.d new file mode 100644 index 0000000..56d0df7 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/cert.d @@ -0,0 +1,49 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: E +Long: cert +Arg: +Help: Client certificate file and password +Protocols: TLS +See-also: cert-type key key-type +Category: tls +Example: --cert certfile --key keyfile $URL +Added: 5.0 +Multi: single +--- +Tells curl to use the specified client certificate file when getting a file +with HTTPS, FTPS or another SSL-based protocol. The certificate must be in +PKCS#12 format if using Secure Transport, or PEM format if using any other +engine. If the optional password is not specified, it is queried for on +the terminal. Note that this option assumes a certificate file that is the +private key and the client certificate concatenated. See --cert and --key to +specify them independently. + +In the portion of the argument, you must escape the character ":" +as "\\:" so that it is not recognized as the password delimiter. Similarly, you +must escape the character "\\" as "\\\\" so that it is not recognized as an +escape character. + +If curl is built against OpenSSL library, and the engine pkcs11 is available, +then a PKCS#11 URI (RFC 7512) can be used to specify a certificate located in +a PKCS#11 device. A string beginning with "pkcs11:" is interpreted as a +PKCS#11 URI. If a PKCS#11 URI is provided, then the --engine option is set as +"pkcs11" if none was provided and the --cert-type option is set as "ENG" if +none was provided. + +(iOS and macOS only) If curl is built against Secure Transport, then the +certificate string can either be the name of a certificate/private key in the +system or user keychain, or the path to a PKCS#12-encoded certificate and +private key. 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 must be specified by a path +expression to a certificate store. (Loading *PFX* is not supported; you can +import it to a store first). You can use +"\\\\" 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* and +*LocalMachineEnterprise*. diff --git a/deps/curl/docs/cmdline-opts/ciphers.d b/deps/curl/docs/cmdline-opts/ciphers.d new file mode 100644 index 0000000..a30902b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ciphers.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ciphers +Arg: +Help: SSL ciphers to use +Protocols: TLS +Category: tls +See-also: tlsv1.3 tls13-ciphers proxy-ciphers +Example: --ciphers ECDHE-ECDSA-AES256-CCM8 $URL +Added: 7.9 +Multi: single +--- +Specifies which ciphers to use in the connection. The list of ciphers must +specify valid ciphers. Read up on SSL cipher list details on this URL: + +https://curl.se/docs/ssl-ciphers.html diff --git a/deps/curl/docs/cmdline-opts/compressed-ssh.d b/deps/curl/docs/cmdline-opts/compressed-ssh.d new file mode 100644 index 0000000..8973956 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/compressed-ssh.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: compressed-ssh +Help: Enable SSH compression +Protocols: SCP SFTP +Added: 7.56.0 +Category: scp ssh +See-also: compressed +Example: --compressed-ssh sftp://example.com/ +Multi: boolean +--- +Enables built-in SSH compression. +This is a request, not an order; the server may or may not do it. diff --git a/deps/curl/docs/cmdline-opts/compressed.d b/deps/curl/docs/cmdline-opts/compressed.d new file mode 100644 index 0000000..bb1d3ba --- /dev/null +++ b/deps/curl/docs/cmdline-opts/compressed.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: compressed +Help: Request compressed response +Protocols: HTTP +Category: http +Example: --compressed $URL +See-also: compressed-ssh +Added: 7.10 +Multi: boolean +--- +Request a compressed response using one of the algorithms curl supports, and +automatically decompress the content. + +Response headers are not modified when saved, so if they are "interpreted" +separately again at a later point they might appear to be saying that the +content is (still) compressed; while in fact it has already been decompressed. + +If this option is used and the server sends an unsupported encoding, curl +reports an error. This is a request, not an order; the server may or may not +deliver data compressed. diff --git a/deps/curl/docs/cmdline-opts/config.d b/deps/curl/docs/cmdline-opts/config.d new file mode 100644 index 0000000..c22a827 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/config.d @@ -0,0 +1,77 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: config +Arg: +Help: Read config from a file +Short: K +Category: curl +Example: --config file.txt $URL +Added: 4.10 +See-also: disable +Multi: append +--- +Specify a text file to read curl arguments from. The command line arguments +found in the text file are used as if they were provided on the command +line. + +Options and their parameters must be specified on the same line in the file, +separated by whitespace, colon, or the equals sign. Long option names can +optionally be given in the config file without the initial double dashes and +if so, the colon or equals characters can be used as separators. If the option +is specified with one or two dashes, there can be no colon or equals character +between the option and its parameter. + +If the parameter contains whitespace or starts with a colon (:) or equals sign +(=), it must be specified enclosed within double quotes (\&"). Within double +quotes the following escape sequences are available: \\\\, \\", \\t, \\n, \\r +and \\v. A backslash preceding any other letter is ignored. + +If the first non-blank column of a config line is a '#' character, that line +is treated as a comment. + +Only write one option per physical line in the config file. A single line is +required to be no more than 10 megabytes (since 8.2.0). + +Specify the filename to --config as '-' to make curl read the file from stdin. + +Note that to be able to specify a URL in the config file, you need to specify +it using the --url option, and not by simply writing the URL on its own +line. So, it could look similar to this: + +url = "https://curl.se/docs/" + + # --- Example file --- + # this is a comment + url = "example.com" + output = "curlhere.html" + user-agent = "superagent/1.0" + + # and fetch another URL too + url = "example.com/docs/manpage.html" + -O + referer = "http://nowhereatall.example.com/" + # --- End of example file --- + +When curl is invoked, it (unless --disable is used) checks for a default +config file and uses it if found, even when --config is used. The default +config file is checked for in the following places in this order: + +1) **"$CURL_HOME/.curlrc"** + +2) **"$XDG_CONFIG_HOME/curlrc"** (Added in 7.73.0) + +3) **"$HOME/.curlrc"** + +4) Windows: **"%USERPROFILE%\\.curlrc"** + +5) Windows: **"%APPDATA%\\.curlrc"** + +6) Windows: **"%USERPROFILE%\\Application Data\\.curlrc"** + +7) Non-Windows: use getpwuid to find the home directory + +8) On Windows, if it finds no *.curlrc* file in the sequence described above, it +checks for one in the same dir the curl executable is placed. + +On Windows two filenames are checked per location: *.curlrc* and *_curlrc*, +preferring the former. Older versions on Windows checked for *_curlrc* only. diff --git a/deps/curl/docs/cmdline-opts/connect-timeout.d b/deps/curl/docs/cmdline-opts/connect-timeout.d new file mode 100644 index 0000000..b3d19b3 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/connect-timeout.d @@ -0,0 +1,22 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: connect-timeout +Arg: +Help: Maximum time allowed for connection +See-also: max-time +Category: connection +Example: --connect-timeout 20 $URL +Example: --connect-timeout 3.14 $URL +Added: 7.7 +Multi: single +--- +Maximum time in seconds that you allow curl's connection to take. This only +limits the connection phase, so if curl connects within the given period it +continues - if not it exits. + +This option accepts decimal values (added in 7.32.0). The decimal value needs +to be provided using a dot (.) as decimal separator - not the local version +even if it might be using another separator. + +The connection phase is considered complete when the DNS lookup and requested +TCP, TLS or QUIC handshakes are done. diff --git a/deps/curl/docs/cmdline-opts/connect-to.d b/deps/curl/docs/cmdline-opts/connect-to.d new file mode 100644 index 0000000..95fab91 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/connect-to.d @@ -0,0 +1,24 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: connect-to +Arg: +Help: Connect to host +Added: 7.49.0 +See-also: resolve header +Category: connection +Example: --connect-to example.com:443:example.net:8443 $URL +Multi: append +--- + +For a request to the given HOST1:PORT1 pair, connect to HOST2:PORT2 instead. +This option is suitable to direct requests at a specific server, e.g. at a +specific cluster node in a cluster of servers. This option is only used to +establish the network connection. It does NOT affect the hostname/port that is +used for TLS/SSL (e.g. SNI, certificate verification) or for the application +protocols. "HOST1" and "PORT1" may be the empty string, meaning "any +host/port". "HOST2" and "PORT2" may also be the empty string, meaning "use the +request's original host/port". + +A "host" specified to this option is compared as a string, so it needs to +match the name used in request URL. It can be either numerical such as +"127.0.0.1" or the full host name such as "example.org". diff --git a/deps/curl/docs/cmdline-opts/continue-at.d b/deps/curl/docs/cmdline-opts/continue-at.d new file mode 100644 index 0000000..a4fc1a9 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/continue-at.d @@ -0,0 +1,20 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: C +Long: continue-at +Arg: +Help: Resumed transfer offset +See-also: range +Category: connection +Example: -C - $URL +Example: -C 400 $URL +Added: 4.8 +Multi: single +--- +Continue/Resume a previous file transfer at the given offset. The given offset +is the exact number of bytes that are skipped, counting from the beginning +of the source file before it is transferred to the destination. If used with +uploads, the FTP server command SIZE is not used by curl. + +Use "-C -" to tell curl to automatically find out where/how to resume the +transfer. It then uses the given output/input files to figure that out. diff --git a/deps/curl/docs/cmdline-opts/cookie-jar.d b/deps/curl/docs/cmdline-opts/cookie-jar.d new file mode 100644 index 0000000..28738ca --- /dev/null +++ b/deps/curl/docs/cmdline-opts/cookie-jar.d @@ -0,0 +1,31 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: c +Long: cookie-jar +Arg: +Protocols: HTTP +Help: Write cookies to after operation +Category: http +Example: -c store-here.txt $URL +Example: -c store-here.txt -b read-these $URL +Added: 7.9 +See-also: cookie +Multi: single +--- +Specify to which file you want curl to write all cookies after a completed +operation. Curl writes all cookies from its in-memory cookie storage to the +given file at the end of operations. If no cookies are known, no data is +written. The file is created using the Netscape cookie file format. If you set +the file name to a single dash, "-", the cookies are written to stdout. + +The file specified with --cookie-jar is only used for output. No cookies are +read from the file. To read cookies, use the --cookie option. Both options +can specify the same file. + +This command line option activates the cookie engine that makes curl record +and use cookies. The --cookie option also activates it. + +If the cookie jar cannot be created or written to, the whole curl operation +does not fail or even report an error clearly. Using --verbose gets a warning +displayed, but that is the only visible feedback you get about this possibly +lethal situation. diff --git a/deps/curl/docs/cmdline-opts/cookie.d b/deps/curl/docs/cmdline-opts/cookie.d new file mode 100644 index 0000000..0f858d6 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/cookie.d @@ -0,0 +1,42 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: b +Long: cookie +Arg: +Protocols: HTTP +Help: Send cookies from string/file +Category: http +Example: -b cookiefile $URL +Example: -b cookiefile -c cookiefile $URL +See-also: cookie-jar junk-session-cookies +Added: 4.9 +Multi: append +--- +Pass the data to the HTTP server in the Cookie header. It is supposedly the +data previously received from the server in a "Set-Cookie:" line. The data +should be in the format "NAME1=VALUE1; NAME2=VALUE2". This makes curl use the +cookie header with this content explicitly in all outgoing request(s). If +multiple requests are done due to authentication, followed redirects or +similar, they all get this cookie passed on. + +If no '=' symbol is used in the argument, it is instead treated as a filename +to read previously stored cookie from. This option also activates the cookie +engine which makes curl record incoming cookies, which may be handy if you are +using this in combination with the --location option or do multiple URL +transfers on the same invoke. If the file name is exactly a minus ("-"), curl +instead reads the contents from stdin. + +The file format of the file to read cookies from should be plain HTTP headers +(Set-Cookie style) or the Netscape/Mozilla cookie file format. + +The file specified with --cookie is only used as input. No cookies are written +to the file. To store cookies, use the --cookie-jar option. + +If you use the Set-Cookie file format and do not specify a domain then the +cookie is not sent since the domain never matches. To address this, set a +domain in Set-Cookie line (doing that includes subdomains) or preferably: use +the Netscape format. + +Users often want to both read cookies from a file and write updated cookies +back to a file, so using both --cookie and --cookie-jar in the same command +line is common. diff --git a/deps/curl/docs/cmdline-opts/create-dirs.d b/deps/curl/docs/cmdline-opts/create-dirs.d new file mode 100644 index 0000000..966b703 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/create-dirs.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: create-dirs +Help: Create necessary local directory hierarchy +Category: curl +Example: --create-dirs --output local/dir/file $URL +Added: 7.10.3 +See-also: ftp-create-dirs output-dir +Multi: boolean +--- +When used in conjunction with the --output option, curl creates the necessary +local directory hierarchy as needed. This option creates the directories +mentioned with the --output option combined with the path possibly set with +--output-dir. If the combined output file name uses no directory, or if the +directories it mentions already exist, no directories are created. + +Created directories are made with mode 0750 on unix style file systems. + +To create remote directories when using FTP or SFTP, try --ftp-create-dirs. diff --git a/deps/curl/docs/cmdline-opts/create-file-mode.d b/deps/curl/docs/cmdline-opts/create-file-mode.d new file mode 100644 index 0000000..c0ebc08 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/create-file-mode.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: create-file-mode +Arg: +Help: File mode for created files +Protocols: SFTP SCP FILE +Category: sftp scp file upload +See-also: ftp-create-dirs +Added: 7.75.0 +Example: --create-file-mode 0777 -T localfile sftp://example.com/new +Multi: single +--- +When curl is used to create files remotely using one of the supported +protocols, this option allows the user to set which 'mode' to set on the file +at creation time, instead of the default 0644. + +This option takes an octal number as argument. diff --git a/deps/curl/docs/cmdline-opts/crlf.d b/deps/curl/docs/cmdline-opts/crlf.d new file mode 100644 index 0000000..ea7fb15 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/crlf.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: crlf +Help: Convert LF to CRLF in upload +Protocols: FTP SMTP +Category: ftp smtp +Example: --crlf -T file ftp://example.com/ +Added: 5.7 +See-also: use-ascii +Multi: boolean +--- +Convert line feeds to carriage return plus line feeds in upload. Useful for +**MVS (OS/390)**. + +(SMTP added in 7.40.0) diff --git a/deps/curl/docs/cmdline-opts/crlfile.d b/deps/curl/docs/cmdline-opts/crlfile.d new file mode 100644 index 0000000..da0d239 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/crlfile.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: crlfile +Arg: +Protocols: TLS +Help: Use this CRL list +Added: 7.19.7 +Category: tls +Example: --crlfile rejects.txt $URL +See-also: cacert capath +Multi: single +--- +Provide a file using PEM format with a Certificate Revocation List that may +specify peer certificates that are to be considered revoked. diff --git a/deps/curl/docs/cmdline-opts/curves.d b/deps/curl/docs/cmdline-opts/curves.d new file mode 100644 index 0000000..58d472d --- /dev/null +++ b/deps/curl/docs/cmdline-opts/curves.d @@ -0,0 +1,22 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: curves +Arg: +Help: (EC) TLS key exchange algorithm(s) to request +Protocols: TLS +Added: 7.73.0 +Category: tls +Example: --curves X25519 $URL +See-also: ciphers +Multi: single +--- +Tells curl to request specific curves to use during SSL session establishment +according to RFC 8422, 5.1. Multiple algorithms can be provided by separating +them with ":" (e.g. "X25519:P-521"). The parameter is available identically +in the "openssl s_client/s_server" utilities. + +--curves allows a OpenSSL powered curl to make SSL-connections with exactly +the (EC) curve requested by the client, avoiding nontransparent client/server +negotiations. + +If this option is set, the default curves list built into OpenSSL are ignored. diff --git a/deps/curl/docs/cmdline-opts/data-ascii.d b/deps/curl/docs/cmdline-opts/data-ascii.d new file mode 100644 index 0000000..5c7840b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/data-ascii.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: data-ascii +Arg: +Help: HTTP POST ASCII data +Protocols: HTTP +Category: http post upload +Example: --data-ascii @file $URL +Added: 7.2 +See-also: data-binary data-raw data-urlencode +Multi: append +--- +This is just an alias for --data. diff --git a/deps/curl/docs/cmdline-opts/data-binary.d b/deps/curl/docs/cmdline-opts/data-binary.d new file mode 100644 index 0000000..2cedda9 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/data-binary.d @@ -0,0 +1,25 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: data-binary +Arg: +Help: HTTP POST binary data +Protocols: HTTP +Category: http post upload +Example: --data-binary @filename $URL +Added: 7.2 +See-also: data-ascii +Multi: append +--- +This posts data exactly as specified with no extra processing whatsoever. + +If you start the data with the letter @, the rest should be a filename. Data +is posted in a similar manner as --data does, except that newlines and +carriage returns are preserved and conversions are never done. + +Like --data the default content-type sent to the server is +application/x-www-form-urlencoded. If you want the data to be treated as +arbitrary binary data by the server then set the content-type to octet-stream: +-H "Content-Type: application/octet-stream". + +If this option is used several times, the ones following the first append +data as described in --data. diff --git a/deps/curl/docs/cmdline-opts/data-raw.d b/deps/curl/docs/cmdline-opts/data-raw.d new file mode 100644 index 0000000..e6a5a5b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/data-raw.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: data-raw +Arg: +Protocols: HTTP +Help: HTTP POST data, '@' allowed +Added: 7.43.0 +See-also: data +Category: http post upload +Example: --data-raw "hello" $URL +Example: --data-raw "@at@at@" $URL +Multi: append +--- +This posts data similarly to --data but without the special +interpretation of the @ character. diff --git a/deps/curl/docs/cmdline-opts/data-urlencode.d b/deps/curl/docs/cmdline-opts/data-urlencode.d new file mode 100644 index 0000000..3c436b2 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/data-urlencode.d @@ -0,0 +1,42 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: data-urlencode +Arg: +Help: HTTP POST data URL encoded +Protocols: HTTP +See-also: data data-raw +Added: 7.18.0 +Category: http post upload +Example: --data-urlencode name=val $URL +Example: --data-urlencode =encodethis $URL +Example: --data-urlencode name@file $URL +Example: --data-urlencode @fileonly $URL +Multi: append +--- +This posts data, similar to the other --data options with the exception +that this performs URL-encoding. + +To be CGI-compliant, the part should begin with a *name* followed +by a separator and a content specification. The part can be passed to +curl using one of the following syntaxes: +.RS +.IP "content" +This makes curl URL-encode the content and pass that on. Just be careful +so that the content does not contain any = or @ symbols, as that makes +the syntax match one of the other cases below! +.IP "=content" +This makes curl URL-encode the content and pass that on. The preceding = +symbol is not included in the data. +.IP "name=content" +This makes curl URL-encode the content part and pass that on. Note that +the name part is expected to be URL-encoded already. +.IP "@filename" +This makes curl load data from the given file (including any newlines), +URL-encode that data and pass it on in the POST. +.IP "name@filename" +This makes curl load data from the given file (including any newlines), +URL-encode that data and pass it on in the POST. The name part gets an equal +sign appended, resulting in *name=urlencoded-file-content*. Note that the +name is expected to be URL-encoded already. +.RE +.IP diff --git a/deps/curl/docs/cmdline-opts/data.d b/deps/curl/docs/cmdline-opts/data.d new file mode 100644 index 0000000..f1d67b9 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/data.d @@ -0,0 +1,41 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: data +Short: d +Arg: +Help: HTTP POST data +Protocols: HTTP MQTT +See-also: data-binary data-urlencode data-raw +Mutexed: form head upload-file +Category: important http post upload +Example: -d "name=curl" $URL +Example: -d "name=curl" -d "tool=cmdline" $URL +Example: -d @filename $URL +Added: 4.0 +Multi: append +--- +Sends the specified data in a POST request to the HTTP server, in the same way +that a browser does when a user has filled in an HTML form and presses the +submit button. This makes curl pass the data to the server using the +content-type application/x-www-form-urlencoded. Compare to --form. + +--data-raw is almost the same but does not have a special interpretation of +the @ character. To post data purely binary, you should instead use the +--data-binary option. To URL-encode the value of a form field you may use +--data-urlencode. + +If any of these options is used more than once on the same command line, the +data pieces specified are merged with a separating &-symbol. Thus, using +'-d name=daniel -d skill=lousy' would generate a post chunk that looks like +'name=daniel&skill=lousy'. + +If you start the data with the letter @, the rest should be a file name to +read the data from, or - if you want curl to read the data from stdin. Posting +data from a file named 'foobar' would thus be done with --data @foobar. When +--data is told to read from a file like that, carriage returns and newlines +are stripped out. If you do not want the @ character to have a special +interpretation use --data-raw instead. + +The data for this option is passed on to the server exactly as provided on the +command line. curl does not convert, change or improve it. It is up to the +user to provide the data in the correct form. diff --git a/deps/curl/docs/cmdline-opts/delegation.d b/deps/curl/docs/cmdline-opts/delegation.d new file mode 100644 index 0000000..7941849 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/delegation.d @@ -0,0 +1,24 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: delegation +Arg: +Help: GSS-API delegation permission +Protocols: GSS/kerberos +Category: auth +Example: --delegation "none" $URL +Added: 7.22.0 +See-also: insecure ssl +Multi: single +--- +Set LEVEL to tell the server what it is allowed to delegate when it +comes to user credentials. +.RS +.IP "none" +Do not allow any delegation. +.IP "policy" +Delegates if and only if the OK-AS-DELEGATE flag is set in the Kerberos +service ticket, which is a matter of realm policy. +.IP "always" +Unconditionally allow the server to delegate. +.RE +.IP diff --git a/deps/curl/docs/cmdline-opts/digest.d b/deps/curl/docs/cmdline-opts/digest.d new file mode 100644 index 0000000..f2ee551 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/digest.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: digest +Help: Use HTTP Digest Authentication +Protocols: HTTP +Mutexed: basic ntlm negotiate +See-also: user proxy-digest anyauth +Category: proxy auth http +Example: -u name:password --digest $URL +Added: 7.10.6 +Multi: boolean +--- +Enables HTTP Digest authentication. This is an authentication scheme that +prevents the password from being sent over the wire in clear text. Use this in +combination with the normal --user option to set user name and password. diff --git a/deps/curl/docs/cmdline-opts/disable-eprt.d b/deps/curl/docs/cmdline-opts/disable-eprt.d new file mode 100644 index 0000000..b6d382b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/disable-eprt.d @@ -0,0 +1,25 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: disable-eprt +Help: Inhibit using EPRT or LPRT +Protocols: FTP +Category: ftp +Example: --disable-eprt ftp://example.com/ +Added: 7.10.5 +See-also: disable-epsv ftp-port +Multi: boolean +--- +Tell curl to disable the use of the EPRT and LPRT commands when doing active +FTP transfers. Curl normally first attempts to use EPRT before using PORT, but +with this option, it uses PORT right away. EPRT is an extension to the +original FTP protocol, and does not work on all servers, but enables more +functionality in a better way than the traditional PORT command. + +--eprt can be used to explicitly enable EPRT again and --no-eprt is an alias +for --disable-eprt. + +If the server is accessed using IPv6, this option has no effect as EPRT is +necessary then. + +Disabling EPRT only changes the active behavior. If you want to switch to +passive mode you need to not use --ftp-port or force it with --ftp-pasv. diff --git a/deps/curl/docs/cmdline-opts/disable-epsv.d b/deps/curl/docs/cmdline-opts/disable-epsv.d new file mode 100644 index 0000000..f02df76 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/disable-epsv.d @@ -0,0 +1,23 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: disable-epsv +Help: Inhibit using EPSV +Protocols: FTP +Category: ftp +Example: --disable-epsv ftp://example.com/ +Added: 7.9.2 +See-also: disable-eprt ftp-port +Multi: boolean +--- +Tell curl to disable the use of the EPSV command when doing passive FTP +transfers. Curl normally first attempts to use EPSV before PASV, but with this +option, it does not try EPSV. + +--epsv can be used to explicitly enable EPSV again and --no-epsv is an alias +for --disable-epsv. + +If the server is an IPv6 host, this option has no effect as EPSV is necessary +then. + +Disabling EPSV only changes the passive behavior. If you want to switch to +active mode you need to use --ftp-port. diff --git a/deps/curl/docs/cmdline-opts/disable.d b/deps/curl/docs/cmdline-opts/disable.d new file mode 100644 index 0000000..979c039 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/disable.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: disable +Short: q +Help: Disable .curlrc +Category: curl +Example: -q $URL +Added: 5.0 +See-also: config +Multi: boolean +--- +If used as the **first** parameter on the command line, the *curlrc* config +file is not read or used. See the --config for details on the default config +file search path. + +Prior to 7.50.0 curl supported the short option name *q* but not the long +option name *disable*. diff --git a/deps/curl/docs/cmdline-opts/disallow-username-in-url.d b/deps/curl/docs/cmdline-opts/disallow-username-in-url.d new file mode 100644 index 0000000..d0537db --- /dev/null +++ b/deps/curl/docs/cmdline-opts/disallow-username-in-url.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: disallow-username-in-url +Help: Disallow username in URL +Protocols: HTTP +Added: 7.61.0 +See-also: proto +Category: curl http +Example: --disallow-username-in-url $URL +Multi: boolean +--- +This tells curl to exit if passed a URL containing a username. This is probably +most useful when the URL is being provided at runtime or similar. diff --git a/deps/curl/docs/cmdline-opts/dns-interface.d b/deps/curl/docs/cmdline-opts/dns-interface.d new file mode 100644 index 0000000..fd924b8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/dns-interface.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: dns-interface +Arg: +Help: Interface to use for DNS requests +Protocols: DNS +See-also: dns-ipv4-addr dns-ipv6-addr +Added: 7.33.0 +Requires: c-ares +Category: dns +Example: --dns-interface eth0 $URL +Multi: single +--- +Tell curl to send outgoing DNS requests through . This option is a +counterpart to --interface (which does not affect DNS). The supplied string +must be an interface name (not an address). diff --git a/deps/curl/docs/cmdline-opts/dns-ipv4-addr.d b/deps/curl/docs/cmdline-opts/dns-ipv4-addr.d new file mode 100644 index 0000000..5930557 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/dns-ipv4-addr.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: dns-ipv4-addr +Arg:
+Help: IPv4 address to use for DNS requests +Protocols: DNS +See-also: dns-interface dns-ipv6-addr +Added: 7.33.0 +Requires: c-ares +Category: dns +Example: --dns-ipv4-addr 10.1.2.3 $URL +Multi: single +--- +Tell curl to bind to a specific IP address when making IPv4 DNS requests, so +that the DNS requests originate from this address. The argument should be a +single IPv4 address. diff --git a/deps/curl/docs/cmdline-opts/dns-ipv6-addr.d b/deps/curl/docs/cmdline-opts/dns-ipv6-addr.d new file mode 100644 index 0000000..a76120c --- /dev/null +++ b/deps/curl/docs/cmdline-opts/dns-ipv6-addr.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: dns-ipv6-addr +Arg:
+Help: IPv6 address to use for DNS requests +Protocols: DNS +See-also: dns-interface dns-ipv4-addr +Added: 7.33.0 +Requires: c-ares +Category: dns +Example: --dns-ipv6-addr 2a04:4e42::561 $URL +Multi: single +--- +Tell curl to bind to a specific IP address when making IPv6 DNS requests, so +that the DNS requests originate from this address. The argument should be a +single IPv6 address. diff --git a/deps/curl/docs/cmdline-opts/dns-servers.d b/deps/curl/docs/cmdline-opts/dns-servers.d new file mode 100644 index 0000000..bec23a3 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/dns-servers.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: dns-servers +Arg: +Help: DNS server addrs to use +Requires: c-ares +Added: 7.33.0 +Category: dns +Example: --dns-servers 192.168.0.1,192.168.0.2 $URL +See-also: dns-interface dns-ipv4-addr +Multi: single +--- +Set the list of DNS servers to be used instead of the system default. +The list of IP addresses should be separated with commas. Port numbers +may also optionally be given as *:* after each IP +address. diff --git a/deps/curl/docs/cmdline-opts/doh-cert-status.d b/deps/curl/docs/cmdline-opts/doh-cert-status.d new file mode 100644 index 0000000..37ae0f8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/doh-cert-status.d @@ -0,0 +1,11 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: doh-cert-status +Help: Verify the status of the DoH server cert via OCSP-staple +Added: 7.76.0 +Category: dns tls +Example: --doh-cert-status --doh-url https://doh.example $URL +See-also: doh-insecure +Multi: boolean +--- +Same as --cert-status but used for DoH (DNS-over-HTTPS). diff --git a/deps/curl/docs/cmdline-opts/doh-insecure.d b/deps/curl/docs/cmdline-opts/doh-insecure.d new file mode 100644 index 0000000..dcc65fb --- /dev/null +++ b/deps/curl/docs/cmdline-opts/doh-insecure.d @@ -0,0 +1,11 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: doh-insecure +Help: Allow insecure DoH server connections +Added: 7.76.0 +Category: dns tls +Example: --doh-insecure --doh-url https://doh.example $URL +See-also: doh-url +Multi: boolean +--- +Same as --insecure but used for DoH (DNS-over-HTTPS). diff --git a/deps/curl/docs/cmdline-opts/doh-url.d b/deps/curl/docs/cmdline-opts/doh-url.d new file mode 100644 index 0000000..6d0dd16 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/doh-url.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: doh-url +Arg: +Help: Resolve host names over DoH +Added: 7.62.0 +Category: dns +Example: --doh-url https://doh.example $URL +See-also: doh-insecure +Multi: single +--- +Specifies which DNS-over-HTTPS (DoH) server to use to resolve hostnames, +instead of using the default name resolver mechanism. The URL must be HTTPS. + +Some SSL options that you set for your transfer also applies to DoH since the +name lookups take place over SSL. However, the certificate verification +settings are not inherited but are controlled separately via --doh-insecure +and --doh-cert-status. + +This option is unset if an empty string "" is used as the URL. +(Added in 7.85.0) diff --git a/deps/curl/docs/cmdline-opts/dump-header.d b/deps/curl/docs/cmdline-opts/dump-header.d new file mode 100644 index 0000000..42a79e7 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/dump-header.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: dump-header +Short: D +Arg: +Help: Write the received headers to +Protocols: HTTP FTP +See-also: output +Category: http ftp +Example: --dump-header store.txt $URL +Added: 5.7 +Multi: single +--- +Write the received protocol headers to the specified file. If no headers are +received, the use of this option creates an empty file. + +When used in FTP, the FTP server response lines are considered being "headers" +and thus are saved there. + +Having multiple transfers in one set of operations (i.e. the URLs in one +--next clause), appends them to the same file, separated by a blank line. diff --git a/deps/curl/docs/cmdline-opts/egd-file.d b/deps/curl/docs/cmdline-opts/egd-file.d new file mode 100644 index 0000000..4543ecf --- /dev/null +++ b/deps/curl/docs/cmdline-opts/egd-file.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: egd-file +Arg: +Help: EGD socket path for random data +Protocols: TLS +See-also: random-file +Category: tls +Example: --egd-file /random/here $URL +Added: 7.7 +Multi: single +--- +Deprecated option (added in 7.84.0). Prior to that it only had an effect on +curl if built to use old versions of OpenSSL. + +Specify the path name to the Entropy Gathering Daemon socket. The socket is +used to seed the random engine for SSL connections. diff --git a/deps/curl/docs/cmdline-opts/engine.d b/deps/curl/docs/cmdline-opts/engine.d new file mode 100644 index 0000000..1ebc779 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/engine.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: engine +Arg: +Help: Crypto engine to use +Protocols: TLS +Category: tls +Example: --engine flavor $URL +Added: 7.9.3 +See-also: ciphers curves +Multi: single +--- +Select the OpenSSL crypto engine to use for cipher operations. Use --engine +list to print a list of build-time supported engines. Note that not all (and +possibly none) of the engines may be available at runtime. diff --git a/deps/curl/docs/cmdline-opts/etag-compare.d b/deps/curl/docs/cmdline-opts/etag-compare.d new file mode 100644 index 0000000..d3c48d1 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/etag-compare.d @@ -0,0 +1,23 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: etag-compare +Arg: +Help: Pass an ETag from a file as a custom header +Protocols: HTTP +Added: 7.68.0 +Category: http +Example: --etag-compare etag.txt $URL +See-also: etag-save time-cond +Multi: single +--- +This option makes a conditional HTTP request for the specific ETag read +from the given file by sending a custom If-None-Match header using the +stored ETag. + +For correct results, make sure that the specified file contains only a +single line with the desired ETag. An empty file is parsed as an empty +ETag. + +Use the option --etag-save to first save the ETag from a response, and +then use this option to compare against the saved ETag in a subsequent +request. diff --git a/deps/curl/docs/cmdline-opts/etag-save.d b/deps/curl/docs/cmdline-opts/etag-save.d new file mode 100644 index 0000000..6295a9e --- /dev/null +++ b/deps/curl/docs/cmdline-opts/etag-save.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: etag-save +Arg: +Help: Parse ETag from a request and save it to a file +Protocols: HTTP +Added: 7.68.0 +Category: http +Example: --etag-save storetag.txt $URL +See-also: etag-compare +Multi: single +--- +This option saves an HTTP ETag to the specified file. An ETag is a +caching related header, usually returned in a response. + +If no ETag is sent by the server, an empty file is created. diff --git a/deps/curl/docs/cmdline-opts/expect100-timeout.d b/deps/curl/docs/cmdline-opts/expect100-timeout.d new file mode 100644 index 0000000..f9a119b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/expect100-timeout.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: expect100-timeout +Arg: +Help: How long to wait for 100-continue +Protocols: HTTP +Added: 7.47.0 +See-also: connect-timeout +Category: http +Example: --expect100-timeout 2.5 -T file $URL +Multi: single +--- +Maximum time in seconds that you allow curl to wait for a 100-continue +response when curl emits an Expects: 100-continue header in its request. By +default curl waits one second. This option accepts decimal values! When +curl stops waiting, it continues as if the response has been received. + +The decimal value needs to provided using a dot (.) as decimal separator - not +the local version even if it might be using another separator. diff --git a/deps/curl/docs/cmdline-opts/fail-early.d b/deps/curl/docs/cmdline-opts/fail-early.d new file mode 100644 index 0000000..36b3309 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/fail-early.d @@ -0,0 +1,25 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: fail-early +Help: Fail on first transfer error, do not continue +Added: 7.52.0 +Category: curl +Example: --fail-early $URL https://two.example +See-also: fail fail-with-body +Multi: boolean +Scope: global +--- +Fail and exit on the first detected transfer error. + +When curl is used to do multiple transfers on the command line, it attempts to +operate on each given URL, one by one. By default, it ignores errors if there +are more URLs given and the last URL's success determines the error code curl +returns. So early failures are "hidden" by subsequent successful transfers. + +Using this option, curl instead returns an error on the first transfer that +fails, independent of the amount of URLs that are given on the command +line. This way, no transfer failures go undetected by scripts and similar. + +This option does not imply --fail, which causes transfers to fail due to the +server's HTTP status code. You can combine the two options, however note --fail +is not global and is therefore contained by --next. diff --git a/deps/curl/docs/cmdline-opts/fail-with-body.d b/deps/curl/docs/cmdline-opts/fail-with-body.d new file mode 100644 index 0000000..dddb86e --- /dev/null +++ b/deps/curl/docs/cmdline-opts/fail-with-body.d @@ -0,0 +1,20 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: fail-with-body +Protocols: HTTP +Help: Fail on HTTP errors but save the body +Category: http output +Added: 7.76.0 +See-also: fail fail-early +Mutexed: fail +Example: --fail-with-body $URL +Multi: boolean +--- +Return an error on server errors where the HTTP response code is 400 or +greater). In normal cases when an HTTP server fails to deliver a document, it +returns an HTML document stating so (which often also describes why and +more). This flag allows curl to output and save that content but also to +return error 22. + +This is an alternative option to --fail which makes curl fail for the same +circumstances but without saving the content. diff --git a/deps/curl/docs/cmdline-opts/fail.d b/deps/curl/docs/cmdline-opts/fail.d new file mode 100644 index 0000000..8196a90 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/fail.d @@ -0,0 +1,22 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: fail +Short: f +Protocols: HTTP +Help: Fail fast with no output on HTTP errors +See-also: fail-with-body fail-early +Category: important http +Example: --fail $URL +Mutexed: fail-with-body +Added: 4.0 +Multi: boolean +--- +Fail fast with no output at all on server errors. This is useful to enable +scripts and users to better deal with failed attempts. In normal cases when an +HTTP server fails to deliver a document, it returns an HTML document stating +so (which often also describes why and more). This flag prevents curl from +outputting that and return error 22. + +This method is not fail-safe and there are occasions where non-successful +response codes slip through, especially when authentication is involved +(response codes 401 and 407). diff --git a/deps/curl/docs/cmdline-opts/false-start.d b/deps/curl/docs/cmdline-opts/false-start.d new file mode 100644 index 0000000..7324049 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/false-start.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: false-start +Help: Enable TLS False Start +Protocols: TLS +Added: 7.42.0 +Category: tls +Example: --false-start $URL +See-also: tcp-fastopen +Multi: boolean +--- +Tells curl to use false start during the TLS handshake. False start is a mode +where a TLS client starts sending application data before verifying the +server's Finished message, thus saving a round trip when performing a full +handshake. + +This is currently only implemented in the Secure Transport (on iOS 7.0 or +later, or OS X 10.9 or later) backend. diff --git a/deps/curl/docs/cmdline-opts/form-escape.d b/deps/curl/docs/cmdline-opts/form-escape.d new file mode 100644 index 0000000..304bfe8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/form-escape.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: form-escape +Help: Escape multipart form field/file names using backslash +Protocols: HTTP +See-also: form +Added: 7.81.0 +Category: http upload +Example: --form-escape -F 'field\\name=curl' -F 'file=@load"this' $URL +Multi: single +--- +Tells curl to pass on names of multipart form fields and files using +backslash-escaping instead of percent-encoding. diff --git a/deps/curl/docs/cmdline-opts/form-string.d b/deps/curl/docs/cmdline-opts/form-string.d new file mode 100644 index 0000000..6d7a500 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/form-string.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: form-string +Help: Specify multipart MIME data +Protocols: HTTP SMTP IMAP +Arg: +See-also: form +Category: http upload +Example: --form-string "data" $URL +Added: 7.13.2 +Multi: append +--- +Similar to --form except that the value string for the named parameter is used +literally. Leading '@' and '<' characters, and the ';type=' string in +the value have no special meaning. Use this in preference to --form if +there is any possibility that the string value may accidentally trigger the +'@' or '<' features of --form. diff --git a/deps/curl/docs/cmdline-opts/form.d b/deps/curl/docs/cmdline-opts/form.d new file mode 100644 index 0000000..e53e93a --- /dev/null +++ b/deps/curl/docs/cmdline-opts/form.d @@ -0,0 +1,134 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: form +Short: F +Arg: +Help: Specify multipart MIME data +Protocols: HTTP SMTP IMAP +Mutexed: data head upload-file +Category: http upload +Example: --form "name=curl" --form "file=@loadthis" $URL +Added: 5.0 +See-also: data form-string form-escape +Multi: append +--- +For HTTP protocol family, this lets curl emulate a filled-in form in which a +user has pressed the submit button. This causes curl to POST data using the +Content-Type multipart/form-data according to RFC 2388. + +For SMTP and IMAP protocols, this is the means to compose a multipart mail +message to transmit. + +This enables uploading of binary files etc. To force the 'content' part to be +a file, prefix the file name with an @ sign. To just get the content part from +a file, prefix the file name with the symbol <. The difference between @ and < +is then that @ makes a file get attached in the post as a file upload, while +the < makes a text field and just get the contents for that text field from a +file. + +Tell curl to read content from stdin instead of a file by using - as +filename. This goes for both @ and < constructs. When stdin is used, the +contents is buffered in memory first by curl to determine its size and allow a +possible resend. Defining a part's data from a named non-regular file (such as +a named pipe or similar) is not subject to buffering and is instead read at +transmission time; since the full size is unknown before the transfer starts, +such data is sent as chunks by HTTP and rejected by IMAP. + +Example: send an image to an HTTP server, where 'profile' is the name of the +form-field to which the file **portrait.jpg** is the input: + + curl -F profile=@portrait.jpg https://example.com/upload.cgi + +Example: send your name and shoe size in two text fields to the server: + + curl -F name=John -F shoesize=11 https://example.com/ + +Example: send your essay in a text field to the server. Send it as a plain +text field, but get the contents for it from a local file: + + curl -F "story=HTML message;type=text/html' \\ + -F '=)' -F '=@textfile.txt' ... smtp://example.com + +Data can be encoded for transfer using encoder=. Available encodings are +*binary* and *8bit* that do nothing else than adding the corresponding +Content-Transfer-Encoding header, *7bit* that only rejects 8-bit characters +with a transfer error, *quoted-printable* and *base64* that encodes data +according to the corresponding schemes, limiting lines length to 76 +characters. + +Example: send multipart mail with a quoted-printable text message and a +base64 attached file: + + curl -F '=text message;encoder=quoted-printable' \\ + -F '=@localfile;encoder=base64' ... smtp://example.com + +See further examples and details in the MANUAL. diff --git a/deps/curl/docs/cmdline-opts/ftp-account.d b/deps/curl/docs/cmdline-opts/ftp-account.d new file mode 100644 index 0000000..eb669c5 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-account.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-account +Arg: +Help: Account data string +Protocols: FTP +Added: 7.13.0 +Category: ftp auth +Example: --ftp-account "mr.robot" ftp://example.com/ +See-also: user +Multi: single +--- +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. diff --git a/deps/curl/docs/cmdline-opts/ftp-alternative-to-user.d b/deps/curl/docs/cmdline-opts/ftp-alternative-to-user.d new file mode 100644 index 0000000..f030bcf --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-alternative-to-user.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-alternative-to-user +Arg: +Help: String to replace USER [name] +Protocols: FTP +Added: 7.15.5 +Category: ftp +Example: --ftp-alternative-to-user "U53r" ftp://example.com +See-also: ftp-account user +Multi: single +--- +If authenticating with the USER and PASS commands fails, send this command. +When connecting to Tumbleweed's Secure Transport server over FTPS using a +client certificate, using "SITE AUTH" tells the server to retrieve the +username from the certificate. diff --git a/deps/curl/docs/cmdline-opts/ftp-create-dirs.d b/deps/curl/docs/cmdline-opts/ftp-create-dirs.d new file mode 100644 index 0000000..7c64f0e --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-create-dirs.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-create-dirs +Protocols: FTP SFTP +Help: Create the remote dirs if not present +See-also: create-dirs +Category: ftp sftp curl +Example: --ftp-create-dirs -T file ftp://example.com/remote/path/file +Added: 7.10.7 +Multi: boolean +--- +When an FTP or SFTP URL/operation uses a path that does not currently exist on +the server, the standard behavior of curl is to fail. Using this option, curl +instead attempts to create missing directories. diff --git a/deps/curl/docs/cmdline-opts/ftp-method.d b/deps/curl/docs/cmdline-opts/ftp-method.d new file mode 100644 index 0000000..8061d2b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-method.d @@ -0,0 +1,30 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-method +Arg: +Help: Control CWD usage +Protocols: FTP +Added: 7.15.1 +Category: ftp +Example: --ftp-method multicwd ftp://example.com/dir1/dir2/file +Example: --ftp-method nocwd ftp://example.com/dir1/dir2/file +Example: --ftp-method singlecwd ftp://example.com/dir1/dir2/file +See-also: list-only +Multi: single +--- +Control what method curl should use to reach a file on an FTP(S) +server. The method argument should be one of the following alternatives: +.RS +.IP multicwd +curl does a single CWD operation for each path part in the given URL. For deep +hierarchies this means many commands. This is how RFC 1738 says it should +be done. This is the default but the slowest behavior. +.IP nocwd +curl does no CWD at all. curl does SIZE, RETR, STOR etc and give a full +path to the server for all these commands. This is the fastest behavior. +.IP singlecwd +curl 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'. +.RE +.IP diff --git a/deps/curl/docs/cmdline-opts/ftp-pasv.d b/deps/curl/docs/cmdline-opts/ftp-pasv.d new file mode 100644 index 0000000..c43bf2b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-pasv.d @@ -0,0 +1,20 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-pasv +Help: Use PASV/EPSV instead of PORT +Protocols: FTP +Added: 7.11.0 +See-also: disable-epsv +Category: ftp +Example: --ftp-pasv ftp://example.com/ +Multi: boolean +--- +Use passive mode for the data connection. Passive is the internal default +behavior, but using this option can be used to override a previous --ftp-port +option. + +Reversing an enforced passive really is not doable but you must then instead +enforce the correct --ftp-port again. + +Passive mode means that curl tries the EPSV command first and then PASV, +unless --disable-epsv is used. diff --git a/deps/curl/docs/cmdline-opts/ftp-port.d b/deps/curl/docs/cmdline-opts/ftp-port.d new file mode 100644 index 0000000..e1f4a1d --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-port.d @@ -0,0 +1,41 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-port +Arg:
+Help: Use PORT instead of PASV +Short: P +Protocols: FTP +See-also: ftp-pasv disable-eprt +Category: ftp +Example: -P - ftp:/example.com +Example: -P eth0 ftp:/example.com +Example: -P 192.168.0.2 ftp:/example.com +Added: 4.0 +Multi: single +--- +Reverses the default initiator/listener roles when connecting with FTP. This +option makes curl use active mode. curl then tells the server to connect back +to the client's specified address and port, while passive mode asks the server +to setup an IP address and port for it to connect to.
should be one +of: +.RS +.IP interface +e.g. "eth0" to specify which interface's IP address you want to use (Unix only) +.IP "IP address" +e.g. "192.168.10.1" to specify the exact IP address +.IP "host name" +e.g. "my.host.domain" to specify the machine +.IP "-" +make curl pick the same IP address that is already used for the control +connection +.RE +.IP + +Disable the use of PORT with --ftp-pasv. Disable the attempt to use the EPRT +command instead of PORT by using --disable-eprt. EPRT is really PORT++. + +You can also append ":[start]-[end]\&" to the right of the address, to tell +curl what TCP port range to use. That means you specify a port range, from a +lower to a higher number. A single number works as well, but do note that it +increases the risk of failure since the port may not be available. +(Added in 7.19.5) diff --git a/deps/curl/docs/cmdline-opts/ftp-pret.d b/deps/curl/docs/cmdline-opts/ftp-pret.d new file mode 100644 index 0000000..4bea99e --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-pret.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-pret +Help: Send PRET before PASV +Protocols: FTP +Added: 7.20.0 +Category: ftp +Example: --ftp-pret ftp://example.com/ +See-also: ftp-port ftp-pasv +Multi: boolean +--- +Tell 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. diff --git a/deps/curl/docs/cmdline-opts/ftp-skip-pasv-ip.d b/deps/curl/docs/cmdline-opts/ftp-skip-pasv-ip.d new file mode 100644 index 0000000..3af9c6d --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-skip-pasv-ip.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-skip-pasv-ip +Help: Skip the IP address for PASV +Protocols: FTP +Added: 7.14.2 +See-also: ftp-pasv +Category: ftp +Example: --ftp-skip-pasv-ip ftp://example.com/ +Multi: boolean +--- +Tell curl to not use the IP address the server suggests in its response to +curl's PASV command when curl connects the data connection. Instead curl +reuses the same IP address it already uses for the control connection. + +This option is enabled by default (added in 7.74.0). + +This option has no effect if PORT, EPRT or EPSV is used instead of PASV. diff --git a/deps/curl/docs/cmdline-opts/ftp-ssl-ccc-mode.d b/deps/curl/docs/cmdline-opts/ftp-ssl-ccc-mode.d new file mode 100644 index 0000000..ae9af94 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-ssl-ccc-mode.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-ssl-ccc-mode +Arg: +Help: Set CCC mode +Protocols: FTP +Added: 7.16.2 +See-also: ftp-ssl-ccc +Category: ftp tls +Example: --ftp-ssl-ccc-mode active --ftp-ssl-ccc ftps://example.com/ +Multi: boolean +--- +Sets the CCC mode. The passive mode does not initiate the shutdown, but +instead waits for the server to do it, and does not reply to the shutdown from +the server. The active mode initiates the shutdown and waits for a reply from +the server. diff --git a/deps/curl/docs/cmdline-opts/ftp-ssl-ccc.d b/deps/curl/docs/cmdline-opts/ftp-ssl-ccc.d new file mode 100644 index 0000000..33ae83b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-ssl-ccc.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-ssl-ccc +Help: Send CCC after authenticating +Protocols: FTP +See-also: ssl ftp-ssl-ccc-mode +Added: 7.16.1 +Category: ftp tls +Example: --ftp-ssl-ccc ftps://example.com/ +Multi: boolean +--- +Use CCC (Clear Command Channel) Shuts down the SSL/TLS layer after +authenticating. The rest of the control channel communication is be +unencrypted. This allows NAT routers to follow the FTP transaction. The +default mode is passive. diff --git a/deps/curl/docs/cmdline-opts/ftp-ssl-control.d b/deps/curl/docs/cmdline-opts/ftp-ssl-control.d new file mode 100644 index 0000000..b895779 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ftp-ssl-control.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ftp-ssl-control +Help: Require SSL/TLS for FTP login, clear for transfer +Protocols: FTP +Added: 7.16.0 +Category: ftp tls +Example: --ftp-ssl-control ftp://example.com +See-also: ssl +Multi: boolean +--- +Require SSL/TLS for the FTP login, clear for transfer. Allows secure +authentication, but non-encrypted data transfers for efficiency. Fails the +transfer if the server does not support SSL/TLS. diff --git a/deps/curl/docs/cmdline-opts/gen.pl b/deps/curl/docs/cmdline-opts/gen.pl new file mode 100644 index 0000000..edf9062 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/gen.pl @@ -0,0 +1,750 @@ +#!/usr/bin/env perl +#*************************************************************************** +# _ _ ____ _ +# Project ___| | | | _ \| | +# / __| | | | |_) | | +# | (__| |_| | _ <| |___ +# \___|\___/|_| \_\_____| +# +# Copyright (C) Daniel Stenberg, , et al. +# +# This software is licensed as described in the file COPYING, which +# you should have received as part of this distribution. The terms +# are also available at https://curl.se/docs/copyright.html. +# +# You may opt to use, copy, modify, merge, publish, distribute and/or sell +# copies of the Software, and permit persons to whom the Software is +# furnished to do so, under the terms of the COPYING file. +# +# This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +# KIND, either express or implied. +# +# SPDX-License-Identifier: curl +# +########################################################################### + +=begin comment + +This script generates the manpage. + +Example: gen.pl [files] > curl.1 + +Dev notes: + +We open *input* files in :crlf translation (a no-op on many platforms) in +case we have CRLF line endings in Windows but a perl that defaults to LF. +Unfortunately it seems some perls like msysgit cannot handle a global input-only +:crlf so it has to be specified on each file open for text input. + +=end comment +=cut + +my %optshort; +my %optlong; +my %helplong; +my %arglong; +my %redirlong; +my %protolong; +my %catlong; + +use POSIX qw(strftime); +my @ts; +if (defined($ENV{SOURCE_DATE_EPOCH})) { + @ts = localtime($ENV{SOURCE_DATE_EPOCH}); +} else { + @ts = localtime; +} +my $date = strftime "%B %d %Y", @ts; +my $year = strftime "%Y", @ts; +my $version = "unknown"; +my $globals; + +open(INC, "<../../include/curl/curlver.h"); +while() { + if($_ =~ /^#define LIBCURL_VERSION \"([0-9.]*)/) { + $version = $1; + last; + } +} +close(INC); + +# get the long name version, return the man page string +sub manpageify { + my ($k)=@_; + my $l; + my $klong = $k; + # quote "bare" minuses in the long name + $klong =~ s/-/\\-/g; + if($optlong{$k} ne "") { + # both short + long + $l = "\\fI-".$optlong{$k}.", \\-\\-$klong\\fP"; + } + else { + # only long + $l = "\\fI\\-\\-$klong\\fP"; + } + return $l; +} + +sub printdesc { + my @desc = @_; + my $exam = 0; + for my $d (@desc) { + if($d =~ /\(Added in ([0-9.]+)\)/i) { + my $ver = $1; + if(too_old($ver)) { + $d =~ s/ *\(Added in $ver\)//gi; + } + } + if($d !~ /^.\\"/) { + # **bold** + $d =~ s/\*\*([^ ]*)\*\*/\\fB$1\\fP/g; + # *italics* + $d =~ s/\*([^ ]*)\*/\\fI$1\\fP/g; + } + if(!$exam && ($d =~ /^ /)) { + # start of example + $exam = 1; + print ".nf\n"; # no-fill + } + elsif($exam && ($d !~ /^ /)) { + # end of example + $exam = 0; + print ".fi\n"; # fill-in + } + # skip lines starting with space (examples) + if($d =~ /^[^ ]/ && $d =~ /--/) { + # scan for options in longest-names first order + for my $k (sort {length($b) <=> length($a)} keys %optlong) { + # --tlsv1 is complicated since --tlsv1.2 etc are also + # acceptable options! + if(($k eq "tlsv1") && ($d =~ /--tlsv1\.[0-9]\\f/)) { + next; + } + my $l = manpageify($k); + $d =~ s/\-\-$k([^a-z0-9-])/$l$1/g; + } + } + # quote minuses in the output + $d =~ s/([^\\])-/$1\\-/g; + # replace single quotes + $d =~ s/\'/\\(aq/g; + # handle double quotes first on the line + $d =~ s/^(\s*)\"/$1\\(dq/; + print $d; + } + if($exam) { + print ".fi\n"; # fill-in + } +} + +sub seealso { + my($standalone, $data)=@_; + if($standalone) { + return sprintf + ".SH \"SEE ALSO\"\n$data\n"; + } + else { + return "See also $data. "; + } +} + +sub overrides { + my ($standalone, $data)=@_; + if($standalone) { + return ".SH \"OVERRIDES\"\n$data\n"; + } + else { + return $data; + } +} + +sub protocols { + my ($standalone, $data)=@_; + if($standalone) { + return ".SH \"PROTOCOLS\"\n$data\n"; + } + else { + return "($data) "; + } +} + +sub too_old { + my ($version)=@_; + my $a = 999999; + if($version =~ /^(\d+)\.(\d+)\.(\d+)/) { + $a = $1 * 1000 + $2 * 10 + $3; + } + elsif($version =~ /^(\d+)\.(\d+)/) { + $a = $1 * 1000 + $2 * 10; + } + if($a < 7500) { + # we consider everything before 7.50.0 to be too old to mention + # specific changes for + return 1; + } + return 0; +} + +sub added { + my ($standalone, $data)=@_; + if(too_old($data)) { + # do not mention ancient additions + return ""; + } + if($standalone) { + return ".SH \"ADDED\"\nAdded in curl version $data\n"; + } + else { + return "Added in $data. "; + } +} + +sub single { + my ($f, $standalone)=@_; + open(F, "<:crlf", "$f") || + return 1; + my $short; + my $long; + my $tags; + my $added; + my $protocols; + my $arg; + my $mutexed; + my $requires; + my $category; + my $seealso; + my $copyright; + my $spdx; + my @examples; # there can be more than one + my $magic; # cmdline special option + my $line; + my $multi; + my $scope; + my $experimental; + while() { + $line++; + if(/^Short: *(.)/i) { + $short=$1; + } + elsif(/^Long: *(.*)/i) { + $long=$1; + } + elsif(/^Added: *(.*)/i) { + $added=$1; + } + elsif(/^Tags: *(.*)/i) { + $tags=$1; + } + elsif(/^Arg: *(.*)/i) { + $arg=$1; + } + elsif(/^Magic: *(.*)/i) { + $magic=$1; + } + elsif(/^Mutexed: *(.*)/i) { + $mutexed=$1; + } + elsif(/^Protocols: *(.*)/i) { + $protocols=$1; + } + elsif(/^See-also: *(.*)/i) { + if($seealso) { + print STDERR "ERROR: duplicated See-also in $f\n"; + return 1; + } + $seealso=$1; + } + elsif(/^Requires: *(.*)/i) { + $requires=$1; + } + elsif(/^Category: *(.*)/i) { + $category=$1; + } + elsif(/^Example: *(.*)/i) { + push @examples, $1; + } + elsif(/^Multi: *(.*)/i) { + $multi=$1; + } + elsif(/^Scope: *(.*)/i) { + $scope=$1; + } + elsif(/^Experimental: yes/i) { + $experimental=1; + } + elsif(/^C: (.*)/i) { + $copyright=$1; + } + elsif(/^SPDX-License-Identifier: (.*)/i) { + $spdx=$1; + } + elsif(/^Help: *(.*)/i) { + ; + } + elsif(/^---/) { + if(!$long) { + print STDERR "ERROR: no 'Long:' in $f\n"; + return 1; + } + if(!$category) { + print STDERR "ERROR: no 'Category:' in $f\n"; + return 2; + } + if(!$examples[0]) { + print STDERR "$f:$line:1:ERROR: no 'Example:' present\n"; + return 2; + } + if(!$added) { + print STDERR "$f:$line:1:ERROR: no 'Added:' version present\n"; + return 2; + } + if(!$seealso) { + print STDERR "$f:$line:1:ERROR: no 'See-also:' field present\n"; + return 2; + } + if(!$copyright) { + print STDERR "$f:$line:1:ERROR: no 'C:' field present\n"; + return 2; + } + if(!$spdx) { + print STDERR "$f:$line:1:ERROR: no 'SPDX-License-Identifier:' field present\n"; + return 2; + } + last; + } + else { + chomp; + print STDERR "WARN: unrecognized line in $f, ignoring:\n:'$_';" + } + } + my @desc; + while() { + push @desc, $_; + } + close(F); + my $opt; + + if(defined($short) && $long) { + $opt = "-$short, --$long"; + } + elsif($short && !$long) { + $opt = "-$short"; + } + elsif($long && !$short) { + $opt = "--$long"; + } + + if($arg) { + $opt .= " $arg"; + } + + # quote "bare" minuses in opt + $opt =~ s/-/\\-/g; + if($standalone) { + print ".TH curl 1 \"30 Nov 2016\" \"curl 7.52.0\" \"curl manual\"\n"; + print ".SH OPTION\n"; + print "curl $opt\n"; + } + else { + print ".IP \"$opt\"\n"; + } + if($protocols) { + print protocols($standalone, $protocols); + } + + if($standalone) { + print ".SH DESCRIPTION\n"; + } + + if($experimental) { + print "**WARNING**: this option is experimental. Do not use in production.\n\n"; + } + + printdesc(@desc); + undef @desc; + + if($scope) { + if($scope eq "global") { + print "\nThis option is global and does not need to be specified for each use of --next.\n"; + } + else { + print STDERR "$f:$line:1:ERROR: unrecognized scope: '$scope'\n"; + return 2; + } + } + + my @extra; + if($multi eq "single") { + push @extra, "\nIf --$long is provided several times, the last set ". + "value is used.\n"; + } + elsif($multi eq "append") { + push @extra, "\n--$long can be used several times in a command line\n"; + } + elsif($multi eq "boolean") { + my $rev = "no-$long"; + # for options that start with "no-" the reverse is then without + # the no- prefix + if($long =~ /^no-/) { + $rev = $long; + $rev =~ s/^no-//; + } + push @extra, + "\nProviding --$long multiple times has no extra effect.\n". + "Disable it again with \\-\\-$rev.\n"; + } + elsif($multi eq "mutex") { + push @extra, + "\nProviding --$long multiple times has no extra effect.\n"; + } + elsif($multi eq "custom") { + ; # left for the text to describe + } + else { + print STDERR "$f:$line:1:ERROR: unrecognized Multi: '$multi'\n"; + return 2; + } + + printdesc(@extra); + + my @foot; + if($seealso) { + my @m=split(/ /, $seealso); + my $mstr; + my $and = 0; + my $num = scalar(@m); + if($num > 2) { + # use commas up to this point + $and = $num - 1; + } + my $i = 0; + for my $k (@m) { + if(!$helplong{$k}) { + print STDERR "$f:$line:1:WARN: see-also a non-existing option: $k\n"; + } + my $l = manpageify($k); + my $sep = " and"; + if($and && ($i < $and)) { + $sep = ","; + } + $mstr .= sprintf "%s$l", $mstr?"$sep ":""; + $i++; + } + push @foot, seealso($standalone, $mstr); + } + + if($requires) { + my $l = manpageify($long); + push @foot, "$l requires that the underlying libcurl". + " was built to support $requires. "; + } + if($mutexed) { + my @m=split(/ /, $mutexed); + my $mstr; + for my $k (@m) { + if(!$helplong{$k}) { + print STDERR "WARN: $f mutexes a non-existing option: $k\n"; + } + my $l = manpageify($k); + $mstr .= sprintf "%s$l", $mstr?" and ":""; + } + push @foot, overrides($standalone, + "This option is mutually exclusive to $mstr. "); + } + if($examples[0]) { + my $s =""; + $s="s" if($examples[1]); + print "\nExample$s:\n.nf\n"; + foreach my $e (@examples) { + $e =~ s!\$URL!https://example.com!g; + $e =~ s/-/\\-/g; + $e =~ s/\'/\\(aq/g; + print " curl $e\n"; + } + print ".fi\n"; + } + if($added) { + push @foot, added($standalone, $added); + } + if($foot[0]) { + print "\n"; + my $f = join("", @foot); + $f =~ s/ +\z//; # remove trailing space + print "$f\n"; + } + return 0; +} + +sub getshortlong { + my ($f)=@_; + open(F, "<:crlf", "$f"); + my $short; + my $long; + my $help; + my $arg; + my $protocols; + my $category; + while() { + if(/^Short: (.)/i) { + $short=$1; + } + elsif(/^Long: (.*)/i) { + $long=$1; + } + elsif(/^Help: (.*)/i) { + $help=$1; + } + elsif(/^Arg: (.*)/i) { + $arg=$1; + } + elsif(/^Protocols: (.*)/i) { + $protocols=$1; + } + elsif(/^Category: (.*)/i) { + $category=$1; + } + elsif(/^---/) { + last; + } + } + close(F); + if($short) { + $optshort{$short}=$long; + } + if($long) { + $optlong{$long}=$short; + $helplong{$long}=$help; + $arglong{$long}=$arg; + $protolong{$long}=$protocols; + $catlong{$long}=$category; + } +} + +sub indexoptions { + my (@files) = @_; + foreach my $f (@files) { + getshortlong($f); + } +} + +sub header { + my ($f)=@_; + open(F, "<:crlf", "$f"); + my @d; + while() { + s/%DATE/$date/g; + s/%VERSION/$version/g; + s/%GLOBALS/$globals/g; + push @d, $_; + } + close(F); + printdesc(@d); +} + +sub listhelp { + print <, et al. + * + * This software is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at https://curl.se/docs/copyright.html. + * + * You may opt to use, copy, modify, merge, publish, distribute and/or sell + * copies of the Software, and permit persons to whom the Software is + * furnished to do so, under the terms of the COPYING file. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + * SPDX-License-Identifier: curl + * + ***************************************************************************/ +#include "tool_setup.h" +#include "tool_help.h" + +/* + * DO NOT edit tool_listhelp.c manually. + * This source file is generated with the following command: + + cd \$srcroot/docs/cmdline-opts + ./gen.pl listhelp *.d > \$srcroot/src/tool_listhelp.c + */ + +const struct helptxt helptext[] = { +HEAD + ; + foreach my $f (sort keys %helplong) { + my $long = $f; + my $short = $optlong{$long}; + my @categories = split ' ', $catlong{$long}; + my $bitmask = ' '; + my $opt; + + if(defined($short) && $long) { + $opt = "-$short, --$long"; + } + elsif($long && !$short) { + $opt = " --$long"; + } + for my $i (0 .. $#categories) { + $bitmask .= 'CURLHELP_' . uc $categories[$i]; + # If not last element, append | + if($i < $#categories) { + $bitmask .= ' | '; + } + } + $bitmask =~ s/(?=.{76}).{1,76}\|/$&\n /g; + my $arg = $arglong{$long}; + if($arg) { + $opt .= " $arg"; + } + my $desc = $helplong{$f}; + $desc =~ s/\"/\\\"/g; # escape double quotes + + my $line = sprintf " {\"%s\",\n \"%s\",\n %s},\n", $opt, $desc, $bitmask; + + if(length($opt) > 78) { + print STDERR "WARN: the --$long name is too long\n"; + } + elsif(length($desc) > 78) { + print STDERR "WARN: the --$long description is too long\n"; + } + print $line; + } + print <) { + if(/^Long: *(.*)/i) { + $long=$1; + } + elsif(/^Scope: global/i) { + push @globalopts, $long; + last; + } + elsif(/^---/) { + last; + } + } + close(F); + } + return $ret if($ret); + for my $e (0 .. $#globalopts) { + $globals .= sprintf "%s--%s", $e?($globalopts[$e+1] ? ", " : " and "):"", + $globalopts[$e],; + } +} + +sub mainpage { + my (@files) = @_; + my $ret; + # show the page header + header("page-header"); + + # output docs for all options + foreach my $f (sort @files) { + $ret += single($f, 0); + } + + if(!$ret) { + header("page-footer"); + } + exit $ret if($ret); +} + +sub showonly { + my ($f) = @_; + if(single($f, 1)) { + print STDERR "$f: failed\n"; + } +} + +sub showprotocols { + my %prots; + foreach my $f (keys %optlong) { + my @p = split(/ /, $protolong{$f}); + for my $p (@p) { + $prots{$p}++; + } + } + for(sort keys %prots) { + printf "$_ (%d options)\n", $prots{$_}; + } +} + +sub getargs { + my ($f, @s) = @_; + if($f eq "mainpage") { + listglobals(@s); + mainpage(@s); + return; + } + elsif($f eq "listhelp") { + listhelp(); + return; + } + elsif($f eq "single") { + showonly($s[0]); + return; + } + elsif($f eq "protos") { + showprotocols(); + return; + } + elsif($f eq "listcats") { + listcats(); + return; + } + + print "Usage: gen.pl [files]\n"; +} + +#------------------------------------------------------------------------ + +my $cmd = shift @ARGV; +my @files = @ARGV; # the rest are the files + +# learn all existing options +indexoptions(@files); + +getargs($cmd, @files); diff --git a/deps/curl/docs/cmdline-opts/get.d b/deps/curl/docs/cmdline-opts/get.d new file mode 100644 index 0000000..2e03a25 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/get.d @@ -0,0 +1,20 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: get +Short: G +Help: Put the post data in the URL and use GET +Category: http upload +Example: --get $URL +Example: --get -d "tool=curl" -d "age=old" $URL +Example: --get -I -d "tool=curl" $URL +Added: 7.8.1 +See-also: data request +Multi: boolean +--- +When used, this option makes all data specified with --data, --data-binary +or --data-urlencode to be used in an HTTP GET request instead of the POST +request that otherwise would be used. The data is appended to the URL +with a '?' separator. + +If used in combination with --head, the POST data is instead appended to the +URL with a HEAD request. diff --git a/deps/curl/docs/cmdline-opts/globoff.d b/deps/curl/docs/cmdline-opts/globoff.d new file mode 100644 index 0000000..53bed6e --- /dev/null +++ b/deps/curl/docs/cmdline-opts/globoff.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: globoff +Short: g +Help: Disable URL sequences and ranges using {} and [] +Category: curl +Example: -g "https://example.com/{[]}}}}" +Added: 7.6 +See-also: config disable +Multi: boolean +--- +This option switches off the "URL globbing parser". When you set this option, +you can specify URLs that contain the letters {}[] without having curl itself +interpret them. Note that these letters are not normal legal URL contents but +they should be encoded according to the URI standard. diff --git a/deps/curl/docs/cmdline-opts/happy-eyeballs-timeout-ms.d b/deps/curl/docs/cmdline-opts/happy-eyeballs-timeout-ms.d new file mode 100644 index 0000000..29114e2 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/happy-eyeballs-timeout-ms.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: happy-eyeballs-timeout-ms +Arg: +Help: Time for IPv6 before trying IPv4 +Added: 7.59.0 +Category: connection +Example: --happy-eyeballs-timeout-ms 500 $URL +See-also: max-time connect-timeout +Multi: single +--- +Happy Eyeballs is an algorithm that attempts to connect to both IPv4 and IPv6 +addresses for dual-stack hosts, giving IPv6 a head-start of the specified +number of 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 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. diff --git a/deps/curl/docs/cmdline-opts/haproxy-clientip.d b/deps/curl/docs/cmdline-opts/haproxy-clientip.d new file mode 100644 index 0000000..25cb7e6 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/haproxy-clientip.d @@ -0,0 +1,29 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: haproxy-clientip +Help: Sets client IP in HAProxy PROXY protocol v1 header +Protocols: HTTP +Added: 8.2.0 +Category: http proxy +Example: --haproxy-clientip $IP +See-also: proxy +Multi: single +--- +Sets a client IP in HAProxy PROXY protocol v1 header at the beginning of the +connection. + +For valid requests, IPv4 addresses must be indicated as a series of exactly +4 integers in the range [0..255] inclusive written in decimal representation +separated by exactly one dot between each other. Heading zeroes are not +permitted in front of numbers in order to avoid any possible confusion +with octal numbers. IPv6 addresses must be indicated as series of 4 hexadecimal +digits (upper or lower case) delimited by colons between each other, with the +acceptance of one double colon sequence to replace the largest acceptable range +of consecutive zeroes. The total number of decoded bits must exactly be 128. + +Otherwise, any string can be accepted for the client IP and get sent. + +It replaces --haproxy-protocol if used, it is not necessary to specify both flags. + +This option is primarily useful when sending test requests to +verify a service is working as intended. diff --git a/deps/curl/docs/cmdline-opts/haproxy-protocol.d b/deps/curl/docs/cmdline-opts/haproxy-protocol.d new file mode 100644 index 0000000..3411906 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/haproxy-protocol.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: haproxy-protocol +Help: Send HAProxy PROXY protocol v1 header +Protocols: HTTP +Added: 7.60.0 +Category: http proxy +Example: --haproxy-protocol $URL +See-also: proxy +Multi: boolean +--- +Send a HAProxy PROXY protocol v1 header at the beginning of the +connection. This is used by some load balancers and reverse proxies to +indicate the client's true IP address and port. + +This option is primarily useful when sending test requests to a service that +expects this header. diff --git a/deps/curl/docs/cmdline-opts/head.d b/deps/curl/docs/cmdline-opts/head.d new file mode 100644 index 0000000..bb748b7 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/head.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: head +Short: I +Help: Show document info only +Protocols: HTTP FTP FILE +Category: http ftp file +Example: -I $URL +Added: 4.0 +See-also: get verbose trace-ascii +Multi: boolean +--- +Fetch the headers only! HTTP-servers feature the command HEAD which this uses +to get nothing but the header of a document. When used on an FTP or FILE file, +curl displays the file size and last modification time only. diff --git a/deps/curl/docs/cmdline-opts/header.d b/deps/curl/docs/cmdline-opts/header.d new file mode 100644 index 0000000..95c1565 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/header.d @@ -0,0 +1,57 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: header +Short: H +Arg:
+Help: Pass custom header(s) to server +Protocols: HTTP IMAP SMTP +Category: http imap smtp +See-also: user-agent referer +Example: -H "X-First-Name: Joe" $URL +Example: -H "User-Agent: yes-please/2000" $URL +Example: -H "Host:" $URL +Example: -H @headers.txt $URL +Added: 5.0 +Multi: append +--- +Extra header to include in information sent. When used within an HTTP request, +it is added to the regular request headers. + +For an IMAP or SMTP MIME uploaded mail built with --form options, it is +prepended to the resulting MIME document, effectively including it at the mail +global level. It does not affect raw uploaded mails (Added in 7.56.0). + +You may specify any number of extra headers. Note that if you should add a +custom header that has the same name as one of the internal ones curl would +use, your externally set header is used instead of the internal one. This +allows you to make even trickier stuff than curl would normally do. You should +not replace internally set headers without knowing perfectly well what you are +doing. Remove an internal header by giving a replacement without content on +the right side of the colon, as in: -H "Host:". If you send the custom header +with no-value then its header must be terminated with a semicolon, such as \-H +"X-Custom-Header;" to send "X-Custom-Header:". + +curl makes sure that each header you add/replace is sent with the proper +end-of-line marker, you should thus **not** add that as a part of the header +content: do not add newlines or carriage returns, they only mess things up for +you. curl passes on the verbatim string you give it without any filter or +other safe guards. That includes white space and control characters. + +This option can take an argument in @filename style, which then adds a header +for each line in the input file. Using @- makes curl read the header file from +stdin. Added in 7.55.0. + +Please note that most anti-spam utilities check the presence and value of +several MIME mail headers: these are "From:", "To:", "Date:" and "Subject:" +among others and should be added with this option. + +You need --proxy-header to send custom headers intended for an HTTP +proxy. Added in 7.37.0. + +Passing on a "Transfer-Encoding: chunked" header when doing an HTTP request +with a request body, makes curl send the data using chunked encoding. + +**WARNING**: headers set with this option are set in all HTTP requests - even +after redirects are followed, like when told with --location. This can lead to +the header being sent to other hosts than the original host, so sensitive +headers should be used with caution combined with following redirects. diff --git a/deps/curl/docs/cmdline-opts/help.d b/deps/curl/docs/cmdline-opts/help.d new file mode 100644 index 0000000..f8675e4 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/help.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: help +Arg: +Short: h +Help: Get help for commands +Category: important curl +Example: --help all +Added: 4.0 +See-also: verbose +Multi: custom +--- +Usage help. This lists all curl command line options within the given +**category**. + +If no argument is provided, curl displays only the most important command line +arguments. + +For category **all**, curl displays help for all options. + +If **category** is specified, curl displays all available help categories. diff --git a/deps/curl/docs/cmdline-opts/hostpubmd5.d b/deps/curl/docs/cmdline-opts/hostpubmd5.d new file mode 100644 index 0000000..e9db23d --- /dev/null +++ b/deps/curl/docs/cmdline-opts/hostpubmd5.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: hostpubmd5 +Arg: +Help: Acceptable MD5 hash of the host public key +Protocols: SFTP SCP +Added: 7.17.1 +Category: sftp scp +Example: --hostpubmd5 e5c1c49020640a5ab0f2034854c321a8 sftp://example.com/ +See-also: hostpubsha256 +Multi: single +--- +Pass a string containing 32 hexadecimal digits. The string should +be the 128 bit MD5 checksum of the remote host's public key, curl refuses +the connection with the host unless the md5sums match. diff --git a/deps/curl/docs/cmdline-opts/hostpubsha256.d b/deps/curl/docs/cmdline-opts/hostpubsha256.d new file mode 100644 index 0000000..b33f338 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/hostpubsha256.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: hostpubsha256 +Arg: +Help: Acceptable SHA256 hash of the host public key +Protocols: SFTP SCP +Added: 7.80.0 +Category: sftp scp +Example: --hostpubsha256 NDVkMTQxMGQ1ODdmMjQ3MjczYjAyOTY5MmRkMjVmNDQ= sftp://example.com/ +See-also: hostpubmd5 +Multi: single +--- +Pass a string containing a Base64-encoded SHA256 hash of the remote host's +public key. Curl refuses the connection with the host unless the hashes match. + +This feature requires libcurl to be built with libssh2 and does not work with +other SSH backends. diff --git a/deps/curl/docs/cmdline-opts/hsts.d b/deps/curl/docs/cmdline-opts/hsts.d new file mode 100644 index 0000000..e30d3b4 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/hsts.d @@ -0,0 +1,26 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: hsts +Arg: +Protocols: HTTPS +Help: Enable HSTS with this cache file +Added: 7.74.0 +Category: http +Example: --hsts cache.txt $URL +See-also: proto +Multi: append +--- +This option enables HSTS for the transfer. If the file name points to an +existing HSTS cache file, that is used. After a completed transfer, the +cache is saved to the file name again if it has been modified. + +If curl is told to use HTTP:// for a transfer involving a host name that +exists in the HSTS cache, it upgrades the transfer to use HTTPS. Each HSTS +cache entry has an individual life time after which the upgrade is no longer +performed. + +Specify a "" file name (zero length) to avoid loading/saving and make curl +just handle HSTS in memory. + +If this option is used several times, curl loads contents from all the +files but the last one is used for saving. diff --git a/deps/curl/docs/cmdline-opts/http0.9.d b/deps/curl/docs/cmdline-opts/http0.9.d new file mode 100644 index 0000000..3dd14a0 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/http0.9.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: http0.9 +Tags: Versions +Protocols: HTTP +Help: Allow HTTP 0.9 responses +Category: http +Example: --http0.9 $URL +Added: 7.64.0 +See-also: http1.1 http2 http3 +Multi: boolean +--- +Tells curl to be fine with HTTP version 0.9 response. + +HTTP/0.9 is a response without headers and therefore you can also connect with +this to non-HTTP servers and still get a response since curl simply +transparently downgrades - if allowed. + +HTTP/0.9 is disabled by default (added in 7.66.0) diff --git a/deps/curl/docs/cmdline-opts/http1.0.d b/deps/curl/docs/cmdline-opts/http1.0.d new file mode 100644 index 0000000..c5f4de8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/http1.0.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: 0 +Long: http1.0 +Tags: Versions +Protocols: HTTP +Added: 7.9.1 +Mutexed: http1.1 http2 http2-prior-knowledge http3 +Help: Use HTTP 1.0 +Category: http +Example: --http1.0 $URL +See-also: http0.9 http1.1 +Multi: mutex +--- +Tells curl to use HTTP version 1.0 instead of using its internally preferred +HTTP version. diff --git a/deps/curl/docs/cmdline-opts/http1.1.d b/deps/curl/docs/cmdline-opts/http1.1.d new file mode 100644 index 0000000..3057aed --- /dev/null +++ b/deps/curl/docs/cmdline-opts/http1.1.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: http1.1 +Tags: Versions +Protocols: HTTP +Added: 7.33.0 +Mutexed: http1.0 http2 http2-prior-knowledge http3 +Help: Use HTTP 1.1 +Category: http +Example: --http1.1 $URL +See-also: http1.0 http0.9 +Multi: mutex +--- +Tells curl to use HTTP version 1.1. diff --git a/deps/curl/docs/cmdline-opts/http2-prior-knowledge.d b/deps/curl/docs/cmdline-opts/http2-prior-knowledge.d new file mode 100644 index 0000000..7d7cabf --- /dev/null +++ b/deps/curl/docs/cmdline-opts/http2-prior-knowledge.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: http2-prior-knowledge +Tags: Versions +Protocols: HTTP +Added: 7.49.0 +Mutexed: http1.1 http1.0 http2 http3 +Requires: HTTP/2 +Help: Use HTTP 2 without HTTP/1.1 Upgrade +Category: http +Example: --http2-prior-knowledge $URL +See-also: http2 http3 +Multi: boolean +--- +Tells curl to issue its 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 still do HTTP/2 the standard way with negotiated protocol +version in the TLS handshake. diff --git a/deps/curl/docs/cmdline-opts/http2.d b/deps/curl/docs/cmdline-opts/http2.d new file mode 100644 index 0000000..af5f3c4 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/http2.d @@ -0,0 +1,25 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: http2 +Tags: Versions +Protocols: HTTP +Added: 7.33.0 +Mutexed: http1.1 http1.0 http2-prior-knowledge http3 +Requires: HTTP/2 +Help: Use HTTP/2 +See-also: http1.1 http3 no-alpn +Category: http +Example: --http2 $URL +Multi: mutex +--- +Tells curl to use HTTP version 2. + +For HTTPS, this means curl negotiates HTTP/2 in the TLS handshake. curl does +this by default. + +For HTTP, this means curl attempts to upgrade the request to HTTP/2 using the +Upgrade: request header. + +When curl uses HTTP/2 over HTTPS, it does not itself insist on TLS 1.2 or +higher even though that is required by the specification. A user can add this +version requirement with --tlsv1.2. diff --git a/deps/curl/docs/cmdline-opts/http3-only.d b/deps/curl/docs/cmdline-opts/http3-only.d new file mode 100644 index 0000000..c3f0f31 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/http3-only.d @@ -0,0 +1,25 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: http3-only +Tags: Versions +Protocols: HTTP +Added: 7.88.0 +Mutexed: http1.1 http1.0 http2 http2-prior-knowledge http3 +Requires: HTTP/3 +Help: Use HTTP v3 only +See-also: http1.1 http2 http3 +Category: http +Example: --http3-only $URL +Multi: mutex +Experimental: yes +--- +Instructs curl to use HTTP/3 to the host in the URL, with no fallback to +earlier HTTP versions. HTTP/3 can only be used for HTTPS and not for HTTP +URLs. For HTTP, this option triggers an error. + +This option allows a user to avoid using the Alt-Svc method of upgrading to +HTTP/3 when you know that the target speaks HTTP/3 on the given host and port. + +This option makes curl fail if a QUIC connection cannot be established, it +does not attempt any other HTTP versions on its own. Use --http3 for similar +functionality *with* a fallback. diff --git a/deps/curl/docs/cmdline-opts/http3.d b/deps/curl/docs/cmdline-opts/http3.d new file mode 100644 index 0000000..a8258c4 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/http3.d @@ -0,0 +1,27 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: http3 +Tags: Versions +Protocols: HTTP +Added: 7.66.0 +Mutexed: http1.1 http1.0 http2 http2-prior-knowledge http3-only +Requires: HTTP/3 +Help: Use HTTP v3 +See-also: http1.1 http2 +Category: http +Example: --http3 $URL +Multi: mutex +Experimental: yes +--- +Tells curl to try HTTP/3 to the host in the URL, but fallback to earlier +HTTP versions if the HTTP/3 connection establishment fails. HTTP/3 is only +available for HTTPS and not for HTTP URLs. + +This option allows a user to avoid using the Alt-Svc method of upgrading to +HTTP/3 when you know that the target speaks HTTP/3 on the given host and port. + +When asked to use HTTP/3, curl issues a separate attempt to use older HTTP +versions with a slight delay, so if the HTTP/3 transfer fails or is slow, curl +still tries to proceed with an older HTTP version. + +Use --http3-only for similar functionality *without* a fallback. diff --git a/deps/curl/docs/cmdline-opts/ignore-content-length.d b/deps/curl/docs/cmdline-opts/ignore-content-length.d new file mode 100644 index 0000000..505c04c --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ignore-content-length.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ignore-content-length +Help: Ignore the size of the remote resource +Protocols: FTP HTTP +Category: http ftp +Example: --ignore-content-length $URL +Added: 7.14.1 +See-also: ftp-skip-pasv-ip +Multi: boolean +--- +For HTTP, Ignore the Content-Length header. This is particularly useful for +servers running Apache 1.x, which reports incorrect Content-Length for +files larger than 2 gigabytes. + +For FTP, this makes curl skip the SIZE command to figure out the size before +downloading a file (added in 7.46.0). + +This option does not work for HTTP if libcurl was built to use hyper. diff --git a/deps/curl/docs/cmdline-opts/include.d b/deps/curl/docs/cmdline-opts/include.d new file mode 100644 index 0000000..ce7b9d8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/include.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: include +Short: i +Help: Include protocol response headers in the output +See-also: verbose +Category: important verbose +Example: -i $URL +Added: 4.8 +Multi: boolean +--- +Include the HTTP response headers in the output. The HTTP response headers can +include things like server name, cookies, date of the document, HTTP version +and more... + +To view the request headers, consider the --verbose option. + +Prior to 7.75.0 curl did not print the headers if --fail was used in +combination with this option and there was error reported by server. diff --git a/deps/curl/docs/cmdline-opts/insecure.d b/deps/curl/docs/cmdline-opts/insecure.d new file mode 100644 index 0000000..e48d500 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/insecure.d @@ -0,0 +1,33 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: insecure +Short: k +Help: Allow insecure server connections +Protocols: TLS SFTP SCP +See-also: proxy-insecure cacert capath +Category: tls sftp scp +Example: --insecure $URL +Added: 7.10 +Multi: boolean +--- +By default, every secure connection curl makes is verified to be secure before +the transfer takes place. This option makes curl skip the verification step +and proceed without checking. + +When this option is not used for protocols using TLS, curl verifies the +server's TLS certificate before it continues: that the certificate contains +the right name which matches the host name used in the URL and that the +certificate has been signed by a CA certificate present in the cert store. +See this online resource for further details: + https://curl.se/docs/sslcerts.html + +For SFTP and SCP, this option makes curl skip the *known_hosts* verification. +*known_hosts* is a file normally stored in the user's home directory in the +".ssh" subdirectory, which contains host names and their public keys. + +**WARNING**: using this option makes the transfer insecure. + +When curl uses secure protocols it trusts responses and allows for example +HSTS and Alt-Svc information to be stored and used subsequently. Using +--insecure can make curl trust and use such information from malicious +servers. diff --git a/deps/curl/docs/cmdline-opts/interface.d b/deps/curl/docs/cmdline-opts/interface.d new file mode 100644 index 0000000..026ceae --- /dev/null +++ b/deps/curl/docs/cmdline-opts/interface.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: interface +Arg: +Help: Use network INTERFACE (or address) +See-also: dns-interface +Category: connection +Example: --interface eth0 $URL +Added: 7.3 +Multi: single +--- +Perform an operation using a specified interface. You can enter interface +name, IP address or host name. An example could look like: + + curl --interface eth0:1 https://www.example.com/ + +On Linux it can be used to specify a **VRF**, but the binary needs to either +have **CAP_NET_RAW** or to be run as root. More information about Linux +**VRF**: https://www.kernel.org/doc/Documentation/networking/vrf.txt diff --git a/deps/curl/docs/cmdline-opts/ipfs-gateway.d b/deps/curl/docs/cmdline-opts/ipfs-gateway.d new file mode 100644 index 0000000..e6845b3 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ipfs-gateway.d @@ -0,0 +1,32 @@ +c: Copyright (C) 2023, Mark Gaiser, +SPDX-License-Identifier: curl +Long: ipfs-gateway +Arg: +Help: Gateway for IPFS +Added: 8.4.0 +See-also: help manual +Category: ipfs +Example: --ipfs-gateway $URL ipfs:// +Multi: single +--- +Specify which gateway to use for IPFS and IPNS URLs. Not specifying this will +instead make curl check if the IPFS_GATEWAY environment variable is set, or if +a ~/.ipfs/gateway file holding the gateway URL exists. + +If you run a local IPFS node, this gateway is by default available under +http://localhost:8080. A full example URL would look like: + + curl --ipfs-gateway http://localhost:8080 ipfs://bafybeigagd5nmnn2iys2f3doro7ydrevyr2mzarwidgadawmamiteydbzi + +There are many public IPFS gateways. See for example: + + https://ipfs.github.io/public-gateway-checker/ + +WARNING: If you opt to go for a remote gateway you should be aware that you +completely trust the gateway. This is fine in local gateways as you host it +yourself. With remote gateways there could potentially be a malicious actor +returning you data that does not match the request you made, inspect or even +interfere with the request. You will not notice this when using curl. A +mitigation could be to go for a "trustless" gateway. This means you locally +verify that the data. Consult the docs page on trusted vs trustless: +https://docs.ipfs.tech/reference/http/gateway/#trusted-vs-trustless diff --git a/deps/curl/docs/cmdline-opts/ipv4.d b/deps/curl/docs/cmdline-opts/ipv4.d new file mode 100644 index 0000000..60690be --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ipv4.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: 4 +Long: ipv4 +Tags: Versions +Protocols: +Added: 7.10.8 +Mutexed: ipv6 +Requires: +See-also: http1.1 http2 +Help: Resolve names to IPv4 addresses +Category: connection dns +Example: --ipv4 $URL +Multi: mutex +--- +This option tells curl to use IPv4 addresses only when resolving host names, +and not for example try IPv6. diff --git a/deps/curl/docs/cmdline-opts/ipv6.d b/deps/curl/docs/cmdline-opts/ipv6.d new file mode 100644 index 0000000..24ce201 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ipv6.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: 6 +Long: ipv6 +Tags: Versions +Protocols: +Added: 7.10.8 +Mutexed: ipv4 +Requires: +See-also: http1.1 http2 +Help: Resolve names to IPv6 addresses +Category: connection dns +Example: --ipv6 $URL +Multi: mutex +--- +This option tells curl to use IPv6 addresses only when resolving host names, +and not for example try IPv4. diff --git a/deps/curl/docs/cmdline-opts/json.d b/deps/curl/docs/cmdline-opts/json.d new file mode 100644 index 0000000..aa3b49d --- /dev/null +++ b/deps/curl/docs/cmdline-opts/json.d @@ -0,0 +1,35 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: json +Arg: +Help: HTTP POST JSON +Protocols: HTTP +See-also: data-binary data-raw +Mutexed: form head upload-file +Category: http post upload +Example: --json '{ "drink": "coffe" }' $URL +Example: --json '{ "drink":' --json ' "coffe" }' $URL +Example: --json @prepared $URL +Example: --json @- $URL < json.txt +Added: 7.82.0 +Multi: append +--- +Sends the specified JSON data in a POST request to the HTTP server. --json +works as a shortcut for passing on these three options: + + --data [arg] + --header "Content-Type: application/json" + --header "Accept: application/json" + +There is **no verification** that the passed in data is actual JSON or that +the syntax is correct. + +If you start the data with the letter @, the rest should be a file name to +read the data from, or a single dash (-) if you want curl to read the data +from stdin. Posting data from a file named 'foobar' would thus be done with +--json @foobar and to instead read the data from stdin, use --json @-. + +If this option is used more than once on the same command line, the additional +data pieces are concatenated to the previous before sending. + +The headers this option sets can be overridden with --header as usual. diff --git a/deps/curl/docs/cmdline-opts/junk-session-cookies.d b/deps/curl/docs/cmdline-opts/junk-session-cookies.d new file mode 100644 index 0000000..daea784 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/junk-session-cookies.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: junk-session-cookies +Short: j +Help: Ignore session cookies read from file +Protocols: HTTP +See-also: cookie cookie-jar +Category: http +Example: --junk-session-cookies -b cookies.txt $URL +Added: 7.9.7 +Multi: boolean +--- +When curl is told to read cookies from a given file, this option makes it +discard all "session cookies". This has the same effect as if a new session is +started. Typical browsers discard session cookies when they are closed down. diff --git a/deps/curl/docs/cmdline-opts/keepalive-time.d b/deps/curl/docs/cmdline-opts/keepalive-time.d new file mode 100644 index 0000000..5e28477 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/keepalive-time.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: keepalive-time +Arg: +Help: Interval time for keepalive probes +Added: 7.18.0 +Category: connection +Example: --keepalive-time 20 $URL +See-also: no-keepalive max-time +Multi: single +--- +This option sets the time a connection needs to remain idle before sending +keepalive probes and the time between individual keepalive probes. It is +currently effective on operating systems offering the TCP_KEEPIDLE and +TCP_KEEPINTVL socket options (meaning Linux, recent AIX, HP-UX and more). +Keepalives are used by the TCP stack to detect broken networks on idle +connections. The number of missed keepalive probes before declaring the +connection down is OS dependent and is commonly 9 or 10. This option has no +effect if --no-keepalive is used. + +If unspecified, the option defaults to 60 seconds. diff --git a/deps/curl/docs/cmdline-opts/key-type.d b/deps/curl/docs/cmdline-opts/key-type.d new file mode 100644 index 0000000..22339b4 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/key-type.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: key-type +Arg: +Help: Private key file type (DER/PEM/ENG) +Protocols: TLS +Category: tls +Example: --key-type DER --key here $URL +Added: 7.9.3 +See-also: key +Multi: single +--- +Private key file type. Specify which type your --key provided private key +is. DER, PEM, and ENG are supported. If not specified, PEM is assumed. diff --git a/deps/curl/docs/cmdline-opts/key.d b/deps/curl/docs/cmdline-opts/key.d new file mode 100644 index 0000000..4236218 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/key.d @@ -0,0 +1,27 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: key +Arg: +Protocols: TLS SSH +Help: Private key file name +Category: tls ssh +Example: --cert certificate --key here $URL +Added: 7.9.3 +See-also: key-type cert +Multi: single +--- +Private key file name. Allows you to provide your private key in this separate +file. For SSH, if not specified, curl tries the following candidates in order: +'~/.ssh/id_rsa', '~/.ssh/id_dsa', './id_rsa', './id_dsa'. + +If curl is built against OpenSSL library, and the engine pkcs11 is available, +then a PKCS#11 URI (RFC 7512) can be used to specify a private key located in +a PKCS#11 device. A string beginning with "pkcs11:" is interpreted as a +PKCS#11 URI. If a PKCS#11 URI is provided, then the --engine option is set as +"pkcs11" if none was provided and the --key-type option is set as "ENG" if +none was provided. + +If curl is built against Secure Transport or Schannel then this option is +ignored for TLS protocols (HTTPS, etc). Those backends expect the private key +to be already present in the keychain or PKCS#12 file containing the +certificate. diff --git a/deps/curl/docs/cmdline-opts/krb.d b/deps/curl/docs/cmdline-opts/krb.d new file mode 100644 index 0000000..42aa67a --- /dev/null +++ b/deps/curl/docs/cmdline-opts/krb.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: krb +Arg: +Help: Enable Kerberos with security +Protocols: FTP +Requires: Kerberos +Category: ftp +Example: --krb clear ftp://example.com/ +Added: 7.3 +See-also: delegation ssl +Multi: single +--- +Enable Kerberos authentication and use. The level must be entered and should +be one of 'clear', 'safe', 'confidential', or 'private'. Should you use a +level that is not one of these, 'private' is used. diff --git a/deps/curl/docs/cmdline-opts/libcurl.d b/deps/curl/docs/cmdline-opts/libcurl.d new file mode 100644 index 0000000..52e252f --- /dev/null +++ b/deps/curl/docs/cmdline-opts/libcurl.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: libcurl +Arg: +Help: Dump libcurl equivalent code of this command line +Added: 7.16.1 +Category: curl +Example: --libcurl client.c $URL +See-also: verbose +Multi: single +Scope: global +--- +Append this option to any ordinary curl command line, and you get +libcurl-using C source code written to the file that does the equivalent of +what your command-line operation does! diff --git a/deps/curl/docs/cmdline-opts/limit-rate.d b/deps/curl/docs/cmdline-opts/limit-rate.d new file mode 100644 index 0000000..43ebf2c --- /dev/null +++ b/deps/curl/docs/cmdline-opts/limit-rate.d @@ -0,0 +1,29 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: limit-rate +Arg: +Help: Limit transfer speed to RATE +Category: connection +Example: --limit-rate 100K $URL +Example: --limit-rate 1000 $URL +Example: --limit-rate 10M $URL +Added: 7.10 +See-also: rate speed-limit speed-time +Multi: single +--- +Specify the maximum transfer rate you want curl to use - for both downloads +and uploads. This feature is useful if you have a limited pipe and you would like +your transfer not to use your entire bandwidth. To make it slower than it +otherwise would be. + +The given speed is measured in bytes/second, unless a suffix is appended. +Appending 'k' or 'K' counts the number as kilobytes, 'm' or 'M' makes it +megabytes, while 'g' or 'G' makes it gigabytes. The suffixes (k, M, G, T, P) +are 1024 based. For example 1k is 1024. Examples: 200K, 3m and 1G. + +The rate limiting logic works on averaging the transfer speed to no more than +the set threshold over a period of multiple seconds. + +If you also use the --speed-limit option, that option takes precedence and +might cripple the rate-limiting slightly, to help keeping the speed-limit +logic working. diff --git a/deps/curl/docs/cmdline-opts/list-only.d b/deps/curl/docs/cmdline-opts/list-only.d new file mode 100644 index 0000000..dcfbf2c --- /dev/null +++ b/deps/curl/docs/cmdline-opts/list-only.d @@ -0,0 +1,36 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: list-only +Short: l +Protocols: FTP POP3 SFTP +Help: List only mode +Added: 4.0 +Category: ftp pop3 sftp +Example: --list-only ftp://example.com/dir/ +See-also: quote request +Multi: boolean +--- +(FTP) +When listing an FTP directory, this switch forces a name-only view. This is +especially useful if the user wants to machine-parse the contents of an FTP +directory since the normal directory view does not use a standard look or +format. When used like this, the option causes an NLST command to be sent to +the server instead of LIST. + +Note: Some FTP servers list only files in their response to NLST; they do not +include sub-directories and symbolic links. + +(SFTP) +When listing an SFTP directory, this switch forces a name-only view, one per line. +This is especially useful if the user wants to machine-parse the contents of an +SFTP directory since the normal directory view provides more information than just +file names. + +(POP3) +When retrieving a specific email from POP3, this switch forces a LIST command +to be performed instead of RETR. This is particularly useful if the user wants +to see if a specific message-id exists on the server and what size it is. + +Note: When combined with --request, this option can be used to send a UIDL +command instead, so the user may use the email's unique identifier rather than +its message-id to make the request. diff --git a/deps/curl/docs/cmdline-opts/local-port.d b/deps/curl/docs/cmdline-opts/local-port.d new file mode 100644 index 0000000..d6949b7 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/local-port.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: local-port +Arg: +Help: Force use of RANGE for local port numbers +Added: 7.15.2 +Category: connection +Example: --local-port 1000-3000 $URL +See-also: globoff +Multi: single +--- +Set a preferred single number or range (FROM-TO) of local port numbers to use +for the connection(s). Note that port numbers by nature are a scarce resource +so setting this range to something too narrow might cause unnecessary +connection setup failures. diff --git a/deps/curl/docs/cmdline-opts/location-trusted.d b/deps/curl/docs/cmdline-opts/location-trusted.d new file mode 100644 index 0000000..9f83d0e --- /dev/null +++ b/deps/curl/docs/cmdline-opts/location-trusted.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: location-trusted +Help: Like --location, and send auth to other hosts +Protocols: HTTP +See-also: user +Category: http auth +Example: --location-trusted -u user:password $URL +Added: 7.10.4 +Multi: boolean +--- +Like --location, but allows sending the name + password to all hosts that the +site may redirect to. This may or may not introduce a security breach if the +site redirects you to a site to which you send your authentication info +(which is plaintext in the case of HTTP Basic authentication). diff --git a/deps/curl/docs/cmdline-opts/location.d b/deps/curl/docs/cmdline-opts/location.d new file mode 100644 index 0000000..9a99a05 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/location.d @@ -0,0 +1,33 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: location +Short: L +Help: Follow redirects +Protocols: HTTP +Category: http +Example: -L $URL +Added: 4.9 +See-also: resolve alt-svc +Multi: boolean +--- +If the server reports that the requested page has moved to a different +location (indicated with a Location: header and a 3XX response code), this +option makes curl redo the request on the new place. If used together with +--include or --head, headers from all requested pages are shown. + +When authentication is used, curl only sends its credentials to the initial +host. If a redirect takes curl to a different host, it does not get the +user+password pass on. See also --location-trusted on how to change this. + +Limit the amount of redirects to follow by using the --max-redirs option. + +When curl follows a redirect and if the request is a POST, it sends the +following request with a GET if the HTTP response was 301, 302, or 303. If the +response code was any other 3xx code, curl resends the following request using +the same unmodified method. + +You can tell curl to not change POST requests to GET after a 30x response by +using the dedicated options for that: --post301, --post302 and --post303. + +The method set with --request overrides the method curl would otherwise select +to use. diff --git a/deps/curl/docs/cmdline-opts/login-options.d b/deps/curl/docs/cmdline-opts/login-options.d new file mode 100644 index 0000000..c67be90 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/login-options.d @@ -0,0 +1,25 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: login-options +Arg: +Protocols: IMAP LDAP POP3 SMTP +Help: Server login options +Added: 7.34.0 +Category: imap pop3 smtp auth +Example: --login-options 'AUTH=*' imap://example.com +See-also: user +Multi: single +--- +Specify the login options to use during server authentication. + +You can use login options to specify protocol specific options that may be +used during authentication. At present only IMAP, POP3 and SMTP support login +options. For more information about login options please see RFC 2384, +RFC 5092 and the IETF draft +https://datatracker.ietf.org/doc/html/draft-earhart-url-smtp-00. + +Since 8.2.0, IMAP supports the login option "AUTH=+LOGIN". With this option, +curl uses the plain (not SASL) LOGIN IMAP command even if the server +advertises SASL authentication. Care should be taken in using this option, as +it sends your password over the network in plain text. This does not work if +the IMAP server disables the plain LOGIN (e.g. to prevent password snooping). diff --git a/deps/curl/docs/cmdline-opts/mail-auth.d b/deps/curl/docs/cmdline-opts/mail-auth.d new file mode 100644 index 0000000..45ceebd --- /dev/null +++ b/deps/curl/docs/cmdline-opts/mail-auth.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: mail-auth +Arg:
+Protocols: SMTP +Help: Originator address of the original email +Added: 7.25.0 +See-also: mail-rcpt mail-from +Category: smtp +Example: --mail-auth user@example.come -T mail smtp://example.com/ +Multi: single +--- +Specify a single address. This is used to specify the authentication address +(identity) of a submitted message that is being relayed to another server. diff --git a/deps/curl/docs/cmdline-opts/mail-from.d b/deps/curl/docs/cmdline-opts/mail-from.d new file mode 100644 index 0000000..0729e84 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/mail-from.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: mail-from +Arg:
+Help: Mail from this address +Protocols: SMTP +Added: 7.20.0 +See-also: mail-rcpt mail-auth +Category: smtp +Example: --mail-from user@example.com -T mail smtp://example.com/ +Multi: single +--- +Specify a single address that the given mail should get sent from. diff --git a/deps/curl/docs/cmdline-opts/mail-rcpt-allowfails.d b/deps/curl/docs/cmdline-opts/mail-rcpt-allowfails.d new file mode 100644 index 0000000..d2a5f39 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/mail-rcpt-allowfails.d @@ -0,0 +1,22 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: mail-rcpt-allowfails +Help: Allow RCPT TO command to fail for some recipients +Protocols: SMTP +Added: 7.69.0 +Category: smtp +Example: --mail-rcpt-allowfails --mail-rcpt dest@example.com smtp://example.com +See-also: mail-rcpt +Multi: boolean +--- +When sending data to multiple recipients, by default curl aborts SMTP +conversation if at least one of the recipients causes RCPT TO command to +return an error. + +The default behavior can be changed by passing --mail-rcpt-allowfails +command-line option which makes curl ignore errors and proceed with the +remaining valid recipients. + +If all recipients trigger RCPT TO failures and this flag is specified, curl +still aborts the SMTP conversation and returns the error received from to the +last RCPT TO command. diff --git a/deps/curl/docs/cmdline-opts/mail-rcpt.d b/deps/curl/docs/cmdline-opts/mail-rcpt.d new file mode 100644 index 0000000..a4b16c4 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/mail-rcpt.d @@ -0,0 +1,22 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: mail-rcpt +Arg:
+Help: Mail to this address +Protocols: SMTP +Added: 7.20.0 +Category: smtp +Example: --mail-rcpt user@example.net smtp://example.com +See-also: mail-rcpt-allowfails +Multi: append +--- +Specify a single email address, user name or mailing list name. Repeat this +option several times to send to multiple recipients. + +When performing an address verification (**VRFY** command), the recipient should be +specified as the user name or user name and domain (as per Section 3.5 of +RFC 5321). (Added in 7.34.0) + +When performing a mailing list expand (EXPN command), the recipient should be +specified using the mailing list name, such as "Friends" or "London-Office". +(Added in 7.34.0) diff --git a/deps/curl/docs/cmdline-opts/manual.d b/deps/curl/docs/cmdline-opts/manual.d new file mode 100644 index 0000000..9ee4d07 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/manual.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: manual +Short: M +Help: Display the full manual +Category: curl +Example: --manual +Added: 5.2 +See-also: verbose libcurl trace +Multi: custom +--- +Manual. Display the huge help text. diff --git a/deps/curl/docs/cmdline-opts/max-filesize.d b/deps/curl/docs/cmdline-opts/max-filesize.d new file mode 100644 index 0000000..7541a27 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/max-filesize.d @@ -0,0 +1,26 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: max-filesize +Arg: +Help: Maximum file size to download +Protocols: FTP HTTP MQTT +See-also: limit-rate +Category: connection +Example: --max-filesize 100K $URL +Added: 7.10.8 +Multi: single +--- +Specify the maximum size (in bytes) of a file to download. If the file +requested is larger than this value, the transfer does not start and curl +returns with exit code 63. + +A size modifier may be used. For example, Appending 'k' or 'K' counts the +number as kilobytes, 'm' or 'M' makes it megabytes, while 'g' or 'G' makes it +gigabytes. Examples: 200K, 3m and 1G. (Added in 7.58.0) + +**NOTE**: before curl 8.4.0, when the file size is not known prior to +download, for such files this option has no effect even if the file transfer +ends up being larger than this given limit. + +Starting with curl 8.4.0, this option aborts the transfer if it reaches the +threshold during transfer. diff --git a/deps/curl/docs/cmdline-opts/max-redirs.d b/deps/curl/docs/cmdline-opts/max-redirs.d new file mode 100644 index 0000000..31ce98e --- /dev/null +++ b/deps/curl/docs/cmdline-opts/max-redirs.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: max-redirs +Arg: +Help: Maximum number of redirects allowed +Protocols: HTTP +Category: http +Example: --max-redirs 3 --location $URL +Added: 7.5 +See-also: location +Multi: single +--- +Set maximum number of redirections to follow. When --location is used, to +prevent curl from following too many redirects, by default, the limit is +set to 50 redirects. Set this option to -1 to make it unlimited. diff --git a/deps/curl/docs/cmdline-opts/max-time.d b/deps/curl/docs/cmdline-opts/max-time.d new file mode 100644 index 0000000..0d5747b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/max-time.d @@ -0,0 +1,23 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: max-time +Short: m +Arg: +Help: Maximum time allowed for transfer +See-also: connect-timeout retry-max-time +Category: connection +Example: --max-time 10 $URL +Example: --max-time 2.92 $URL +Added: 4.0 +Multi: single +--- +Maximum time in seconds that you allow each transfer to take. This is useful +for preventing your batch jobs from hanging for hours due to slow networks or +links going down. This option accepts decimal values (added in 7.32.0). + +If you enable retrying the transfer (--retry) then the maximum time counter is +reset each time the transfer is retried. You can use --retry-max-time to limit +the retry time. + +The decimal value needs to provided using a dot (.) as decimal separator - not +the local version even if it might be using another separator. diff --git a/deps/curl/docs/cmdline-opts/metalink.d b/deps/curl/docs/cmdline-opts/metalink.d new file mode 100644 index 0000000..88f0121 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/metalink.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: metalink +Help: Process given URLs as metalink XML file +Added: 7.27.0 +Category: misc +Example: --metalink file $URL +See-also: parallel +Multi: single +--- +This option was previously used to specify a Metalink resource. Metalink +support is disabled in curl for security reasons (added in 7.78.0). diff --git a/deps/curl/docs/cmdline-opts/negotiate.d b/deps/curl/docs/cmdline-opts/negotiate.d new file mode 100644 index 0000000..f1dd34d --- /dev/null +++ b/deps/curl/docs/cmdline-opts/negotiate.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: negotiate +Help: Use HTTP Negotiate (SPNEGO) authentication +Protocols: HTTP +See-also: basic ntlm anyauth proxy-negotiate +Category: auth http +Example: --negotiate -u : $URL +Added: 7.10.6 +Multi: mutex +--- +Enables Negotiate (SPNEGO) authentication. + +This option requires a library built with GSS-API or SSPI support. Use +--version to see if your curl supports GSS-API/SSPI or SPNEGO. + +When using this option, you must also provide a fake --user option to activate +the authentication code properly. Sending a '-u :' is enough as the user name +and password from the --user option are not actually used. diff --git a/deps/curl/docs/cmdline-opts/netrc-file.d b/deps/curl/docs/cmdline-opts/netrc-file.d new file mode 100644 index 0000000..7b1a214 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/netrc-file.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: netrc-file +Help: Specify FILE for netrc +Arg: +Added: 7.21.5 +Mutexed: netrc +Category: curl +Example: --netrc-file netrc $URL +See-also: netrc user config +Multi: single +--- +This option is similar to --netrc, except that you provide the path (absolute +or relative) to the netrc file that curl should use. You can only specify one +netrc file per invocation. + +It abides by --netrc-optional if specified. diff --git a/deps/curl/docs/cmdline-opts/netrc-optional.d b/deps/curl/docs/cmdline-opts/netrc-optional.d new file mode 100644 index 0000000..a775964 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/netrc-optional.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: netrc-optional +Help: Use either .netrc or URL +Mutexed: netrc +See-also: netrc-file +Category: curl +Example: --netrc-optional $URL +Added: 7.9.8 +Multi: boolean +--- +Similar to --netrc, but this option makes the .netrc usage **optional** +and not mandatory as the --netrc option does. diff --git a/deps/curl/docs/cmdline-opts/netrc.d b/deps/curl/docs/cmdline-opts/netrc.d new file mode 100644 index 0000000..f0ec75f --- /dev/null +++ b/deps/curl/docs/cmdline-opts/netrc.d @@ -0,0 +1,30 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: netrc +Short: n +Help: Must read .netrc for user name and password +Category: curl +Example: --netrc $URL +Added: 4.6 +See-also: netrc-file config user +Mutexed: netrc-file netrc-optional +Multi: boolean +--- +Makes curl scan the *.netrc* file in the user's home directory for login name +and password. This is typically used for FTP on Unix. If used with HTTP, curl +enables user authentication. See *netrc(5)* and *ftp(1)* for details on the +file format. Curl does not complain if that file does not have the right +permissions (it should be neither world- nor group-readable). The environment +variable "HOME" is used to find the home directory. + +On Windows two filenames in the home directory are checked: *.netrc* and +*_netrc*, preferring the former. Older versions on Windows checked for *_netrc* +only. + +A quick and simple example of how to setup a *.netrc* to allow curl to FTP to +the machine host.domain.com with user name 'myself' and password 'secret' +could look similar to: + + machine host.domain.com + login myself + password secret diff --git a/deps/curl/docs/cmdline-opts/next.d b/deps/curl/docs/cmdline-opts/next.d new file mode 100644 index 0000000..93c9c45 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/next.d @@ -0,0 +1,27 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: : +Long: next +Tags: +Protocols: +Added: 7.36.0 +Magic: divider +Help: Make next URL use its separate set of options +Category: curl +Example: $URL --next -d postthis www2.example.com +Example: -I $URL --next https://example.net/ +See-also: parallel config +Multi: append +--- +Tells curl to use a separate operation for the following URL and associated +options. This allows you to send several URL requests, each with their own +specific options, for example, such as different user names or custom requests +for each. + +--next resets all local options and only global ones have their values survive +over to the operation following the --next instruction. Global options include +--verbose, --trace, --trace-ascii and --fail-early. + +For example, you can do both a GET and a POST in a single command line: + + curl www1.example.com --next -d postthis www2.example.com diff --git a/deps/curl/docs/cmdline-opts/no-alpn.d b/deps/curl/docs/cmdline-opts/no-alpn.d new file mode 100644 index 0000000..102f299 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/no-alpn.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: no-alpn +Tags: HTTP/2 +Protocols: HTTPS +Added: 7.36.0 +See-also: no-npn http2 +Requires: TLS +Help: Disable the ALPN TLS extension +Category: tls http +Example: --no-alpn $URL +Multi: boolean +--- +Disable the ALPN TLS extension. ALPN is enabled by default if libcurl was built +with an SSL library that supports ALPN. ALPN is used by a libcurl that supports +HTTP/2 to negotiate HTTP/2 support with the server during https sessions. + +Note that this is the negated option name documented. You can use --alpn to +enable ALPN. diff --git a/deps/curl/docs/cmdline-opts/no-buffer.d b/deps/curl/docs/cmdline-opts/no-buffer.d new file mode 100644 index 0000000..33f6fbc --- /dev/null +++ b/deps/curl/docs/cmdline-opts/no-buffer.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: no-buffer +Short: N +Help: Disable buffering of the output stream +Category: curl +Example: --no-buffer $URL +Added: 6.5 +See-also: progress-bar +Multi: boolean +--- +Disables the buffering of the output stream. In normal work situations, curl +uses a standard buffered output stream that has the effect that it outputs the +data in chunks, not necessarily exactly when the data arrives. Using this +option disables that buffering. + +Note that this is the negated option name documented. You can use --buffer to +enable buffering again. diff --git a/deps/curl/docs/cmdline-opts/no-clobber.d b/deps/curl/docs/cmdline-opts/no-clobber.d new file mode 100644 index 0000000..9325558 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/no-clobber.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: no-clobber +Help: Do not overwrite files that already exist +Category: curl output +Added: 7.83.0 +See-also: output remote-name +Example: --no-clobber --output local/dir/file $URL +Multi: boolean +--- +When used in conjunction with the --output, --remote-header-name, +--remote-name, or --remote-name-all options, curl avoids overwriting files +that already exist. Instead, a dot and a number gets appended to the name of +the file that would be created, up to filename.100 after which it does not +create any file. + +Note that this is the negated option name documented. You can thus use +--clobber to enforce the clobbering, even if --remote-header-name is +specified. diff --git a/deps/curl/docs/cmdline-opts/no-keepalive.d b/deps/curl/docs/cmdline-opts/no-keepalive.d new file mode 100644 index 0000000..0aeaef8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/no-keepalive.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: no-keepalive +Help: Disable TCP keepalive on the connection +Category: connection +Example: --no-keepalive $URL +Added: 7.18.0 +See-also: keepalive-time +Multi: boolean +--- +Disables the use of keepalive messages on the TCP connection. curl otherwise +enables them by default. + +Note that this is the negated option name documented. You can thus use +--keepalive to enforce keepalive. diff --git a/deps/curl/docs/cmdline-opts/no-npn.d b/deps/curl/docs/cmdline-opts/no-npn.d new file mode 100644 index 0000000..cd0e5e2 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/no-npn.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: no-npn +Tags: Versions HTTP/2 +Protocols: HTTPS +Added: 7.36.0 +Mutexed: +See-also: no-alpn http2 +Requires: TLS +Help: Disable the NPN TLS extension +Category: tls http +Example: --no-npn $URL +Multi: boolean +--- +curl never uses NPN, this option has no effect (added in 7.86.0). + +Disable the NPN TLS extension. NPN is enabled by default if libcurl was built +with an SSL library that supports NPN. NPN is used by a libcurl that supports +HTTP/2 to negotiate HTTP/2 support with the server during https sessions. diff --git a/deps/curl/docs/cmdline-opts/no-progress-meter.d b/deps/curl/docs/cmdline-opts/no-progress-meter.d new file mode 100644 index 0000000..820557d --- /dev/null +++ b/deps/curl/docs/cmdline-opts/no-progress-meter.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: no-progress-meter +Help: Do not show the progress meter +See-also: verbose silent +Added: 7.67.0 +Category: verbose +Example: --no-progress-meter -o store $URL +Multi: boolean +--- +Option to switch off the progress meter output without muting or otherwise +affecting warning and informational messages like --silent does. + +Note that this is the negated option name documented. You can thus use +--progress-meter to enable the progress meter again. diff --git a/deps/curl/docs/cmdline-opts/no-sessionid.d b/deps/curl/docs/cmdline-opts/no-sessionid.d new file mode 100644 index 0000000..9699f46 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/no-sessionid.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: no-sessionid +Help: Disable SSL session-ID reusing +Protocols: TLS +Added: 7.16.0 +Category: tls +Example: --no-sessionid $URL +See-also: insecure +Multi: boolean +--- +Disable curl's use of SSL session-ID caching. By default all transfers are +done using the cache. Note that while nothing should ever get hurt by +attempting to reuse SSL session-IDs, there seem to be broken SSL +implementations in the wild that may require you to disable this in order for +you to succeed. + +Note that this is the negated option name documented. You can thus use +--sessionid to enforce session-ID caching. diff --git a/deps/curl/docs/cmdline-opts/noproxy.d b/deps/curl/docs/cmdline-opts/noproxy.d new file mode 100644 index 0000000..001c109 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/noproxy.d @@ -0,0 +1,27 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: noproxy +Arg: +Help: List of hosts which do not use proxy +Added: 7.19.4 +Category: proxy +Example: --noproxy "www.example" $URL +See-also: proxy +Multi: single +--- +Comma-separated list of hosts for which not to use a proxy, if one is +specified. The only wildcard 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, local.com would match local.com, local.com:80, and www.local.com, but +not www.notlocal.com. + +This option overrides the environment variables that disable the proxy +('no_proxy' and 'NO_PROXY') (added in 7.53.0). If there is an environment +variable disabling a proxy, you can set the no proxy list to "" to override +it. + +IP addresses specified to this option can be provided using CIDR notation +(added in 7.86.0): an appended slash and number specifies the number of +"network bits" out of the address to use in the comparison. For example +"192.168.0.0/16" would match all addresses starting with "192.168". diff --git a/deps/curl/docs/cmdline-opts/ntlm-wb.d b/deps/curl/docs/cmdline-opts/ntlm-wb.d new file mode 100644 index 0000000..4a32252 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ntlm-wb.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ntlm-wb +Help: Use HTTP NTLM authentication with winbind +Protocols: HTTP +See-also: ntlm proxy-ntlm +Category: auth http +Example: --ntlm-wb -u user:password $URL +Added: 7.22.0 +Multi: mutex +--- +Enables NTLM much in the style --ntlm does, but hand over the authentication +to the separate binary ntlmauth application that is executed when needed. diff --git a/deps/curl/docs/cmdline-opts/ntlm.d b/deps/curl/docs/cmdline-opts/ntlm.d new file mode 100644 index 0000000..cc98c51 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ntlm.d @@ -0,0 +1,22 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ntlm +Help: Use HTTP NTLM authentication +Mutexed: basic negotiate digest anyauth +See-also: proxy-ntlm +Protocols: HTTP +Requires: TLS +Category: auth http +Example: --ntlm -u user:password $URL +Added: 7.10.6 +Multi: mutex +--- +Enables NTLM authentication. The NTLM authentication method was designed by +Microsoft and is used by IIS web servers. It is a proprietary protocol, +reverse-engineered by clever people and implemented in curl based on their +efforts. This kind of behavior should not be endorsed, you should encourage +everyone who uses NTLM to switch to a public and documented authentication +method instead, such as Digest. + +If you want to enable NTLM for your proxy authentication, then use +--proxy-ntlm. diff --git a/deps/curl/docs/cmdline-opts/oauth2-bearer.d b/deps/curl/docs/cmdline-opts/oauth2-bearer.d new file mode 100644 index 0000000..6f35147 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/oauth2-bearer.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: oauth2-bearer +Help: OAuth 2 Bearer Token +Arg: +Protocols: IMAP LDAP POP3 SMTP HTTP +Category: auth +Example: --oauth2-bearer "mF_9.B5f-4.1JqM" $URL +Added: 7.33.0 +See-also: basic ntlm digest +Multi: single +--- +Specify the Bearer Token for OAUTH 2.0 server authentication. The Bearer Token +is used in conjunction with the user name which can be specified as part of +the --url or --user options. + +The Bearer Token and user name are formatted according to RFC 6750. diff --git a/deps/curl/docs/cmdline-opts/output-dir.d b/deps/curl/docs/cmdline-opts/output-dir.d new file mode 100644 index 0000000..803b294 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/output-dir.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: output-dir +Arg: +Help: Directory to save files in +Added: 7.73.0 +See-also: remote-name remote-header-name +Category: curl +Example: --output-dir "tmp" -O $URL +Multi: single +--- +This option specifies the directory in which files should be stored, when +--remote-name or --output are used. + +The given output directory is used for all URLs and output options on the +command line, up until the first --next. + +If the specified target directory does not exist, the operation fails unless +--create-dirs is also used. diff --git a/deps/curl/docs/cmdline-opts/output.d b/deps/curl/docs/cmdline-opts/output.d new file mode 100644 index 0000000..316f109 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/output.d @@ -0,0 +1,49 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: output +Arg: +Short: o +Help: Write to file instead of stdout +See-also: remote-name remote-name-all remote-header-name +Category: important curl +Example: -o file $URL +Example: "http://{one,two}.example.com" -o "file_#1.txt" +Example: "http://{site,host}.host[1-5].example" -o "#1_#2" +Example: -o file $URL -o file2 https://example.net +Added: 4.0 +Multi: append +--- +Write output to instead of stdout. If you are using {} or [] to fetch +multiple documents, you should quote the URL and you can use '#' followed by a +number in the specifier. That variable is replaced with the current +string for the URL being fetched. Like in: + + curl "http://{one,two}.example.com" -o "file_#1.txt" + +or use several variables like: + + curl "http://{site,host}.host[1-5].example" -o "#1_#2" + +You may use this option as many times as the number of URLs you have. For +example, if you specify two URLs on the same command line, you can use it like +this: + + curl -o aa example.com -o bb example.net + +and the order of the -o options and the URLs does not matter, just that the +first -o is for the first URL and so on, so the above command line can also be +written as + + curl example.com example.net -o aa -o bb + +See also the --create-dirs option to create the local directories +dynamically. Specifying the output as '-' (a single dash) passes the output to +stdout. + +To suppress response bodies, you can redirect output to /dev/null: + + curl example.com -o /dev/null + +Or for Windows: + + curl example.com -o nul diff --git a/deps/curl/docs/cmdline-opts/page-footer b/deps/curl/docs/cmdline-opts/page-footer new file mode 100644 index 0000000..af41c94 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/page-footer @@ -0,0 +1,322 @@ +.SH FILES +.I ~/.curlrc +.RS +Default config file, see --config for details. +.SH ENVIRONMENT +The environment variables can be specified in lower case or upper case. The +lower case version has precedence. http_proxy is an exception as it is only +available in lower case. + +Using an environment variable to set the proxy has the same effect as using +the --proxy option. + +.IP "http_proxy [protocol://][:port]" +Sets the proxy server to use for HTTP. +.IP "HTTPS_PROXY [protocol://][:port]" +Sets the proxy server to use for HTTPS. +.IP "[url-protocol]_PROXY [protocol://][:port]" +Sets the proxy server to use for [url-protocol], where the protocol is a +protocol that curl supports and as specified in a URL. FTP, FTPS, POP3, IMAP, +SMTP, LDAP, etc. +.IP "ALL_PROXY [protocol://][:port]" +Sets the proxy server to use if no protocol-specific proxy is set. +.IP "NO_PROXY " +list of host names that should not go through any proxy. If set to an asterisk +'*' only, it matches all hosts. Each name in this list is matched as either +a domain name which contains the hostname, or the hostname itself. + +This environment variable disables use of the proxy even when specified with +the --proxy option. That is +.B NO_PROXY=direct.example.com curl -x http://proxy.example.com +.B http://direct.example.com +accesses the target URL directly, and +.B NO_PROXY=direct.example.com curl -x http://proxy.example.com +.B http://somewhere.example.com +accesses the target URL through the proxy. + +The list of host names can also be include numerical IP addresses, and IPv6 +versions should then be given without enclosing brackets. + +IP addresses can be specified using CIDR notation: an appended slash and +number specifies the number of "network bits" out of the address to use in the +comparison (added in 7.86.0). For example "192.168.0.0/16" would match all +addresses starting with "192.168". +.IP "APPDATA " +On Windows, this variable is used when trying to find the home directory. If +the primary home variable are all unset. +.IP "COLUMNS " +If set, the specified number of characters is used as the terminal width when +the alternative progress-bar is shown. If not set, curl tries to figure it out +using other ways. +.IP "CURL_CA_BUNDLE " +If set, it is used as the --cacert value. +.IP "CURL_HOME " +If set, is the first variable curl checks when trying to find its home +directory. If not set, it continues to check *XDG_CONFIG_HOME* +.IP "CURL_SSL_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 +the case insensitive name of the particular backend to use when curl is +invoked. Setting a name that is not a built-in alternative makes curl stay +with the default. + +SSL backend names (case-insensitive): **bearssl**, **gnutls**, **mbedtls**, +**openssl**, **rustls**, **schannel**, **secure-transport**, **wolfssl** +.IP "HOME " +If set, this is used to find the home directory when that is needed. Like when +looking for the default .curlrc. *CURL_HOME* and *XDG_CONFIG_HOME* +have preference. +.IP "QLOGDIR " +If curl was built with HTTP/3 support, setting this environment variable to a +local directory makes curl produce **qlogs** in that directory, using file +names named after the destination connection id (in hex). Do note that these +files can become rather large. Works with the ngtcp2 and quiche QUIC backends. +.IP SHELL +Used on VMS when trying to detect if using a **DCL** or a **unix** shell. +.IP "SSL_CERT_DIR " +If set, it is used as the --capath value. +.IP "SSL_CERT_FILE " +If set, it is used as the --cacert value. +.IP "SSLKEYLOGFILE " +If you set this environment variable to a file name, curl stores TLS secrets +from its connections in that file when invoked to enable you to analyze the +TLS traffic in real time using network analyzing tools such as Wireshark. This +works with the following TLS backends: OpenSSL, libressl, BoringSSL, GnuTLS +and wolfSSL. +.IP "USERPROFILE " +On Windows, this variable is used when trying to find the home directory. If +the other, primary, variable are all unset. If set, curl uses the path +**"$USERPROFILE\\Application Data"**. +.IP "XDG_CONFIG_HOME " +If *CURL_HOME* is not set, this variable is checked when looking for a +default .curlrc file. +.SH "PROXY PROTOCOL PREFIXES" +The proxy string may be specified with a protocol:// prefix to specify +alternative proxy protocols. (Added in 7.21.7) + +If no protocol is specified in the proxy string or if the string does not +match a supported one, the proxy is treated as an HTTP proxy. + +The supported proxy protocol prefixes are as follows: +.IP "http://" +Makes it use it as an HTTP proxy. The default if no scheme prefix is used. +.IP "https://" +Makes it treated as an **HTTPS** proxy. +.IP "socks4://" +Makes it the equivalent of --socks4 +.IP "socks4a://" +Makes it the equivalent of --socks4a +.IP "socks5://" +Makes it the equivalent of --socks5 +.IP "socks5h://" +Makes it the equivalent of --socks5-hostname +.SH EXIT CODES +There are a bunch of different error codes and their corresponding error +messages that may appear under error conditions. At the time of this writing, +the exit codes are: +.IP 0 +Success. The operation completed successfully according to the instructions. +.IP 1 +Unsupported protocol. This build of curl has no support for this protocol. +.IP 2 +Failed to initialize. +.IP 3 +URL malformed. The syntax was not correct. +.IP 4 +A feature or option that was needed to perform the desired request was not +enabled or was explicitly disabled at build-time. To make curl able to do +this, you probably need another build of libcurl. +.IP 5 +Could not resolve proxy. The given proxy host could not be resolved. +.IP 6 +Could not resolve host. The given remote host could not be resolved. +.IP 7 +Failed to connect to host. +.IP 8 +Weird server reply. The server sent data curl could not parse. +.IP 9 +FTP access denied. The server denied login or denied access to the particular +resource or directory you wanted to reach. Most often you tried to change to a +directory that does not exist on the server. +.IP 10 +FTP accept failed. While waiting for the server to connect back when an active +FTP session is used, an error code was sent over the control connection or +similar. +.IP 11 +FTP weird PASS reply. Curl could not parse the reply sent to the PASS request. +.IP 12 +During an active FTP session while waiting for the server to connect back to +curl, the timeout expired. +.IP 13 +FTP weird PASV reply, Curl could not parse the reply sent to the PASV request. +.IP 14 +FTP weird 227 format. Curl could not parse the 227-line the server sent. +.IP 15 +FTP cannot use host. Could not resolve the host IP we got in the 227-line. +.IP 16 +HTTP/2 error. A problem was detected in the HTTP2 framing layer. This is +somewhat generic and can be one out of several problems, see the error message +for details. +.IP 17 +FTP could not set binary. Could not change transfer method to binary. +.IP 18 +Partial file. Only a part of the file was transferred. +.IP 19 +FTP could not download/access the given file, the RETR (or similar) command +failed. +.IP 21 +FTP quote error. A quote command returned error from the server. +.IP 22 +HTTP page not retrieved. The requested URL was not found or returned another +error with the HTTP error code being 400 or above. This return code only +appears if --fail is used. +.IP 23 +Write error. Curl could not write data to a local filesystem or similar. +.IP 25 +Failed starting the upload. For FTP, the server typically denied the STOR +command. +.IP 26 +Read error. Various reading problems. +.IP 27 +Out of memory. A memory allocation request failed. +.IP 28 +Operation timeout. The specified time-out period was reached according to the +conditions. +.IP 30 +FTP PORT failed. The PORT command failed. Not all FTP servers support the PORT +command, try doing a transfer using PASV instead! +.IP 31 +FTP could not use REST. The REST command failed. This command is used for +resumed FTP transfers. +.IP 33 +HTTP range error. The range "command" did not work. +.IP 34 +HTTP post error. Internal post-request generation error. +.IP 35 +SSL connect error. The SSL handshaking failed. +.IP 36 +Bad download resume. Could not continue an earlier aborted download. +.IP 37 +FILE could not read file. Failed to open the file. Permissions? +.IP 38 +LDAP cannot bind. LDAP bind operation failed. +.IP 39 +LDAP search failed. +.IP 41 +Function not found. A required LDAP function was not found. +.IP 42 +Aborted by callback. An application told curl to abort the operation. +.IP 43 +Internal error. A function was called with a bad parameter. +.IP 45 +Interface error. A specified outgoing interface could not be used. +.IP 47 +Too many redirects. When following redirects, curl hit the maximum amount. +.IP 48 +Unknown option specified to libcurl. This indicates that you passed a weird +option to curl that was passed on to libcurl and rejected. Read up in the +manual! +.IP 49 +Malformed telnet option. +.IP 52 +The server did not reply anything, which here is considered an error. +.IP 53 +SSL crypto engine not found. +.IP 54 +Cannot set SSL crypto engine as default. +.IP 55 +Failed sending network data. +.IP 56 +Failure in receiving network data. +.IP 58 +Problem with the local certificate. +.IP 59 +Could not use specified SSL cipher. +.IP 60 +Peer certificate cannot be authenticated with known CA certificates. +.IP 61 +Unrecognized transfer encoding. +.IP 63 +Maximum file size exceeded. +.IP 64 +Requested FTP SSL level failed. +.IP 65 +Sending the data requires a rewind that failed. +.IP 66 +Failed to initialize SSL Engine. +.IP 67 +The user name, password, or similar was not accepted and curl failed to log in. +.IP 68 +File not found on TFTP server. +.IP 69 +Permission problem on TFTP server. +.IP 70 +Out of disk space on TFTP server. +.IP 71 +Illegal TFTP operation. +.IP 72 +Unknown TFTP transfer ID. +.IP 73 +File already exists (TFTP). +.IP 74 +No such user (TFTP). +.IP 77 +Problem reading the SSL CA cert (path? access rights?). +.IP 78 +The resource referenced in the URL does not exist. +.IP 79 +An unspecified error occurred during the SSH session. +.IP 80 +Failed to shut down the SSL connection. +.IP 82 +Could not load CRL file, missing or wrong format (added in 7.19.0). +.IP 83 +Issuer check failed (added in 7.19.0). +.IP 84 +The FTP PRET command failed. +.IP 85 +Mismatch of RTSP CSeq numbers. +.IP 86 +Mismatch of RTSP Session Identifiers. +.IP 87 +Unable to parse FTP file list. +.IP 88 +FTP chunk callback reported error. +.IP 89 +No connection available, the session is queued. +.IP 90 +SSL public key does not matched pinned public key. +.IP 91 +Invalid SSL certificate status. +.IP 92 +Stream error in HTTP/2 framing layer. +.IP 93 +An API function was called from inside a callback. +.IP 94 +An authentication function returned an error. +.IP 95 +A problem was detected in the HTTP/3 layer. This is somewhat generic and can +be one out of several problems, see the error message for details. +.IP 96 +QUIC connection error. This error may be caused by an SSL library error. QUIC +is the protocol used for HTTP/3 transfers. +.IP 97 +Proxy handshake error. +.IP 98 +A client-side certificate is required to complete the TLS handshake. +.IP 99 +Poll or select returned fatal error. +.IP XX +More error codes might appear here in future releases. The existing ones are +meant to never change. +.SH BUGS +If you experience any problems with curl, submit an issue in the project's bug +tracker on GitHub: https://github.com/curl/curl/issues +.SH AUTHORS / CONTRIBUTORS +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) diff --git a/deps/curl/docs/cmdline-opts/page-header b/deps/curl/docs/cmdline-opts/page-header new file mode 100644 index 0000000..7d14f4c --- /dev/null +++ b/deps/curl/docs/cmdline-opts/page-header @@ -0,0 +1,258 @@ +.\" ************************************************************************** +.\" * _ _ ____ _ +.\" * Project ___| | | | _ \| | +.\" * / __| | | | |_) | | +.\" * | (__| |_| | _ <| |___ +.\" * \___|\___/|_| \_\_____| +.\" * +.\" * Copyright (C) Daniel Stenberg, , et al. +.\" * +.\" * This software is licensed as described in the file COPYING, which +.\" * you should have received as part of this distribution. The terms +.\" * are also available at https://curl.se/docs/copyright.html. +.\" * +.\" * You may opt to use, copy, modify, merge, publish, distribute and/or sell +.\" * copies of the Software, and permit persons to whom the Software is +.\" * furnished to do so, under the terms of the COPYING file. +.\" * +.\" * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY +.\" * KIND, either express or implied. +.\" * +.\" * SPDX-License-Identifier: curl +.\" * +.\" ************************************************************************** +.\" +.\" DO NOT EDIT. Generated by the curl project gen.pl man page generator. +.\" +.TH curl 1 "%DATE" "curl %VERSION" "curl Manual" +.SH NAME +curl \- transfer a URL +.SH SYNOPSIS +.B curl [options / URLs] +.SH DESCRIPTION +**curl** is a tool for transferring data from or to a server using URLs. It +supports these protocols: DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, +IMAP, IMAPS, LDAP, LDAPS, MQTT, POP3, POP3S, RTMP, RTMPS, RTSP, SCP, SFTP, +SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. + +curl is powered by libcurl for all transfer-related features. See +*libcurl(3)* for details. +.SH URL +The URL syntax is protocol-dependent. You find a detailed description in +RFC 3986. + +If you provide a URL without a leading **protocol://** scheme, curl guesses +what protocol you want. It then defaults to HTTP but assumes others based on +often-used host name prefixes. For example, for host names starting with +"ftp." curl assumes you want FTP. + +You can specify any amount of URLs on the command line. They are fetched in a +sequential manner in the specified order unless you use --parallel. You can +specify command line options and URLs mixed and in any order on the command +line. + +curl attempts to reuse connections when doing multiple transfers, so that +getting many files from the same server do not use multiple connects and setup +handshakes. This improves speed. Connection reuse can only be done for URLs +specified for a single command line invocation and cannot be performed between +separate curl runs. + +Provide an IPv6 zone id in the URL with an escaped percentage sign. Like in + + "http://[fe80::3%25eth0]/" + +Everything provided on the command line that is not a command line option or +its argument, curl assumes is a URL and treats it as such. +.SH GLOBBING +You can specify multiple URLs or parts of URLs by writing lists within braces +or ranges within brackets. We call this "globbing". + +Provide a list with three different names like this: + + "http://site.{one,two,three}.com" + +or you can get sequences of alphanumeric series by using [] as in: + + "ftp://ftp.example.com/file[1-100].txt" + + "ftp://ftp.example.com/file[001-100].txt" (with leading zeros) + + "ftp://ftp.example.com/file[a-z].txt" + +Nested sequences are not supported, but you can use several ones next to each +other: + + "http://example.com/archive[1996-1999]/vol[1-4]/part{a,b,c}.html" + +You can specify a step counter for the ranges to get every Nth number or +letter: + + "http://example.com/file[1-100:10].txt" + + "http://example.com/file[a-z:2].txt" + +When using [] or {} sequences when invoked from a command line prompt, you +probably have to put the full URL within double quotes to avoid the shell from +interfering with it. This also goes for other characters treated special, like +for example '&', '?' and '*'. + +Switch off globbing with --globoff. +.SH VARIABLES +curl supports command line variables (added in 8.3.0). Set variables with +--variable name=content or --variable name@file (where "file" can be stdin if +set to a single dash (-)). + +Variable contents can expanded in option parameters using "{{name}}" (without +the quotes) if the option name is prefixed with "--expand-". This gets the +contents of the variable "name" inserted, or a blank if the name does not +exist as a variable. Insert "{{" verbatim in the string by prefixing it with a +backslash, like "\\{{". + +You an access and expand environment variables by first importing them. You +can select to either require the environment variable to be set or you can +provide a default value in case it is not already set. Plain --variable %name +imports the variable called 'name' but exits with an error if that environment +variable is not already set. To provide a default value if it is not set, use +--variable %name=content or --variable %name@content. + +Example. Get the USER environment variable into the URL, fail if USER is not +set: + + --variable '%USER' + --expand-url = "https://example.com/api/{{USER}}/method" + +When expanding variables, curl supports a set of functions that can make the +variable contents more convenient to use. It can trim leading and trailing +white space with *trim*, it can output the contents as a JSON quoted string +with *json*, URL encode the string with *url* or base64 encode it with +*b64*. You apply function to a variable expansion, add them colon separated to +the right side of the variable. Variable content holding null bytes that are +not encoded when expanded cause error. + +Example: get the contents of a file called $HOME/.secret into a variable +called "fix". Make sure that the content is trimmed and percent-encoded sent +as POST data: + + --variable %HOME + --expand-variable fix@{{HOME}}/.secret + --expand-data "{{fix:trim:url}}" + https://example.com/ + +Command line variables and expansions were added in in 8.3.0. +.SH OUTPUT +If not told otherwise, curl writes the received data to stdout. It can be +instructed to instead save that data into a local file, using the --output or +--remote-name options. If curl is given multiple URLs to transfer on the +command line, it similarly needs multiple options for where to save them. + +curl does not parse or otherwise "understand" the content it gets or writes as +output. It does no encoding or decoding, unless explicitly asked to with +dedicated command line options. +.SH PROTOCOLS +curl supports numerous protocols, or put in URL terms: schemes. Your +particular build may not support them all. +.IP DICT +Lets you lookup words using online dictionaries. +.IP FILE +Read or write local files. curl does not support accessing file:// URL +remotely, but when running on Microsoft Windows using the native UNC approach +works. +.IP FTP(S) +curl supports the File Transfer Protocol with a lot of tweaks and levers. With +or without using TLS. +.IP GOPHER(S) +Retrieve files. +.IP HTTP(S) +curl supports HTTP with numerous options and variations. It can speak HTTP +version 0.9, 1.0, 1.1, 2 and 3 depending on build options and the correct +command line options. +.IP IMAP(S) +Using the mail reading protocol, curl can "download" emails for you. With or +without using TLS. +.IP LDAP(S) +curl can do directory lookups for you, with or without TLS. +.IP MQTT +curl supports MQTT version 3. Downloading over MQTT equals "subscribe" to a +topic while uploading/posting equals "publish" on a topic. MQTT over TLS is +not supported (yet). +.IP POP3(S) +Downloading from a pop3 server means getting a mail. With or without using +TLS. +.IP RTMP(S) +The **Realtime Messaging Protocol** is primarily used to serve streaming media +and curl can download it. +.IP RTSP +curl supports RTSP 1.0 downloads. +.IP SCP +curl supports SSH version 2 scp transfers. +.IP SFTP +curl supports SFTP (draft 5) done over SSH version 2. +.IP SMB(S) +curl supports SMB version 1 for upload and download. +.IP SMTP(S) +Uploading contents to an SMTP server means sending an email. With or without +TLS. +.IP TELNET +Telling curl to fetch a telnet URL starts an interactive session where it +sends what it reads on stdin and outputs what the server sends it. +.IP TFTP +curl can do TFTP downloads and uploads. +.SH "PROGRESS METER" +curl normally displays a progress meter during operations, indicating the +amount of transferred data, transfer speeds and estimated time left, etc. The +progress meter displays the transfer rate in bytes per second. The suffixes +(k, M, G, T, P) are 1024 based. For example 1k is 1024 bytes. 1M is 1048576 +bytes. + +curl displays this data to the terminal by default, so if you invoke curl to +do an operation and it is about to write data to the terminal, it +*disables* the progress meter as otherwise it would mess up the output +mixing progress meter and response data. + +If you want a progress meter for HTTP POST or PUT requests, you need to +redirect the response output to a file, using shell redirect (>), --output or +similar. + +This does not apply to FTP upload as that operation does not spit out any +response data to the terminal. + +If you prefer a progress "bar" instead of the regular meter, --progress-bar is +your friend. You can also disable the progress meter completely with the +--silent option. +.SH VERSION +This man page describes curl %VERSION. If you use a later version, chances are +this man page does not fully document it. If you use an earlier version, this +document tries to include version information about which specific version +that introduced changes. + +You can always learn which the latest curl version is by running + + curl https://curl.se/info + +The online version of this man page is always showing the latest incarnation: +https://curl.se/docs/manpage.html +.SH OPTIONS +Options start with one or two dashes. Many of the options require an +additional value next to them. If provided text does not start with a dash, it +is presumed to be and treated as a URL. + +The short "single-dash" form of the options, -d for example, may be used with +or without a space between it and its value, although a space is a recommended +separator. The long "double-dash" form, --data for example, requires a space +between it and its value. + +Short version options that do not need any additional values can be used +immediately next to each other, like for example you can specify all the +options *-O*, *-L* and *-v* at once as *-OLv*. + +In general, all boolean options are enabled with --**option** and yet again +disabled with --**no-**option. That is, you use the same option name but +prefix it with "no-". However, in this list we mostly only list and show the +*--option* version of them. + +When --next is used, it resets the parser state and you start again with a +clean option state, except for the options that are "global". Global options +retain their values and meaning even after --next. + +The following options are global: +%GLOBALS. diff --git a/deps/curl/docs/cmdline-opts/parallel-immediate.d b/deps/curl/docs/cmdline-opts/parallel-immediate.d new file mode 100644 index 0000000..b534dd5 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/parallel-immediate.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: parallel-immediate +Help: Do not wait for multiplexing (with --parallel) +Added: 7.68.0 +See-also: parallel parallel-max +Category: connection curl +Example: --parallel-immediate -Z $URL -o file1 $URL -o file2 +Multi: boolean +Scope: global +--- +When doing parallel transfers, this option instructs curl that it should +rather prefer opening up more connections in parallel at once rather than +waiting to see if new transfers can be added as multiplexed streams on another +connection. diff --git a/deps/curl/docs/cmdline-opts/parallel-max.d b/deps/curl/docs/cmdline-opts/parallel-max.d new file mode 100644 index 0000000..cc6d32d --- /dev/null +++ b/deps/curl/docs/cmdline-opts/parallel-max.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: parallel-max +Arg: +Help: Maximum concurrency for parallel transfers +Added: 7.66.0 +See-also: parallel +Category: connection curl +Example: --parallel-max 100 -Z $URL ftp://example.com/ +Multi: single +--- +When asked to do parallel transfers, using --parallel, this option controls +the maximum amount of transfers to do simultaneously. + +This option is global and does not need to be specified for each use of +--next. + +The default is 50. diff --git a/deps/curl/docs/cmdline-opts/parallel.d b/deps/curl/docs/cmdline-opts/parallel.d new file mode 100644 index 0000000..4f698f8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/parallel.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: Z +Long: parallel +Help: Perform transfers in parallel +Added: 7.66.0 +Category: connection curl +Example: --parallel $URL -o file1 $URL -o file2 +See-also: next verbose +Multi: boolean +Scope: global +--- +Makes curl perform its transfers in parallel as compared to the regular serial +manner. diff --git a/deps/curl/docs/cmdline-opts/pass.d b/deps/curl/docs/cmdline-opts/pass.d new file mode 100644 index 0000000..2c0a2be --- /dev/null +++ b/deps/curl/docs/cmdline-opts/pass.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: pass +Arg: +Help: Pass phrase for the private key +Protocols: SSH TLS +Category: ssh tls auth +Example: --pass secret --key file $URL +Added: 7.9.3 +See-also: key user +Multi: single +--- +Passphrase for the private key. diff --git a/deps/curl/docs/cmdline-opts/path-as-is.d b/deps/curl/docs/cmdline-opts/path-as-is.d new file mode 100644 index 0000000..9897d88 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/path-as-is.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: path-as-is +Help: Do not squash .. sequences in URL path +Added: 7.42.0 +Category: curl +Example: --path-as-is https://example.com/../../etc/passwd +See-also: request-target +Multi: boolean +--- +Tell curl to not handle sequences of /../ or /./ in the given URL +path. Normally curl squashes or merges them according to standards but with +this option set you tell it not to do that. diff --git a/deps/curl/docs/cmdline-opts/pinnedpubkey.d b/deps/curl/docs/cmdline-opts/pinnedpubkey.d new file mode 100644 index 0000000..d799bfa --- /dev/null +++ b/deps/curl/docs/cmdline-opts/pinnedpubkey.d @@ -0,0 +1,38 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: pinnedpubkey +Arg: +Help: FILE/HASHES Public key to verify peer against +Protocols: TLS +Category: tls +Example: --pinnedpubkey keyfile $URL +Example: --pinnedpubkey 'sha256//ce118b51897f4452dc' $URL +Added: 7.39.0 +See-also: hostpubsha256 +Multi: single +--- +Tells curl to use the specified public key file (or hashes) to verify the +peer. This can be a path to a file which contains a single public key in PEM +or DER format, or 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 +aborts the connection before sending or receiving any data. + +This option is independent of option --insecure. If you use both options +together then the peer is still verified by public key. + +PEM/DER support: + +OpenSSL and GnuTLS (added in 7.39.0), wolfSSL (added in 7.43.0), mbedTLS +(added in 7.47.0), Secure Transport macOS 10.7+/iOS 10+ (7.54.1), Schannel +(7.58.1) + +sha256 support: + +OpenSSL, GnuTLS and wolfSSL (added in 7.44.0), mbedTLS (added in 7.47.0), +Secure Transport macOS 10.7+/iOS 10+ (7.54.1), Schannel (7.58.1) + +Other SSL backends not supported. diff --git a/deps/curl/docs/cmdline-opts/post301.d b/deps/curl/docs/cmdline-opts/post301.d new file mode 100644 index 0000000..d067fc8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/post301.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: post301 +Help: Do not switch to GET after following a 301 +Protocols: HTTP +See-also: post302 post303 location +Added: 7.17.1 +Category: http post +Example: --post301 --location -d "data" $URL +Multi: boolean +--- +Tells curl to respect RFC 7231/6.4.2 and not convert POST requests into GET +requests when following a 301 redirection. The non-RFC behavior is ubiquitous +in web browsers, so curl 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 using --location. diff --git a/deps/curl/docs/cmdline-opts/post302.d b/deps/curl/docs/cmdline-opts/post302.d new file mode 100644 index 0000000..b7190ce --- /dev/null +++ b/deps/curl/docs/cmdline-opts/post302.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: post302 +Help: Do not switch to GET after following a 302 +Protocols: HTTP +See-also: post301 post303 location +Added: 7.19.1 +Category: http post +Example: --post302 --location -d "data" $URL +Multi: boolean +--- +Tells curl to respect RFC 7231/6.4.3 and not convert POST requests into GET +requests when following a 302 redirection. The non-RFC behavior is ubiquitous +in web browsers, so curl 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 using --location. diff --git a/deps/curl/docs/cmdline-opts/post303.d b/deps/curl/docs/cmdline-opts/post303.d new file mode 100644 index 0000000..52d440c --- /dev/null +++ b/deps/curl/docs/cmdline-opts/post303.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: post303 +Help: Do not switch to GET after following a 303 +Protocols: HTTP +See-also: post302 post301 location +Added: 7.26.0 +Category: http post +Example: --post303 --location -d "data" $URL +Multi: boolean +--- +Tells curl to violate RFC 7231/6.4.4 and not convert POST requests into GET +requests when following 303 redirections. A server may require a POST to +remain a POST after a 303 redirection. This option is meaningful only when +using --location. diff --git a/deps/curl/docs/cmdline-opts/preproxy.d b/deps/curl/docs/cmdline-opts/preproxy.d new file mode 100644 index 0000000..b55c1d4 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/preproxy.d @@ -0,0 +1,26 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: preproxy +Arg: [protocol://]host[:port] +Help: Use this proxy first +Added: 7.52.0 +Category: proxy +Example: --preproxy socks5://proxy.example -x http://http.example $URL +See-also: proxy socks5 +Multi: single +--- +Use the specified SOCKS proxy before connecting to an HTTP or HTTPS --proxy. In +such a case curl first connects to the SOCKS proxy and then connects (through +SOCKS) to the HTTP or HTTPS proxy. Hence pre proxy. + +The pre proxy string should be specified with a protocol:// prefix to specify +alternative proxy protocols. Use socks4://, socks4a://, socks5:// or +socks5h:// to request the specific SOCKS version to be used. No protocol +specified makes curl default to SOCKS4. + +If the port number is not specified in the proxy string, it is assumed to be +1080. + +User and password that might be provided in the proxy string are URL decoded +by curl. This allows you to pass in special characters such as @ by using %40 +or pass in a colon with %3a. diff --git a/deps/curl/docs/cmdline-opts/progress-bar.d b/deps/curl/docs/cmdline-opts/progress-bar.d new file mode 100644 index 0000000..fee1709 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/progress-bar.d @@ -0,0 +1,20 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: # +Long: progress-bar +Help: Display transfer progress as a bar +Category: verbose +Example: -# -O $URL +Added: 5.10 +See-also: styled-output +Multi: boolean +Scope: global +--- +Make curl display transfer progress as a simple progress bar instead of the +standard, more informational, meter. + +This progress bar draws a single line of '#' characters across the screen and +shows a percentage if the transfer size is known. For transfers without a +known size, there is a space ship (-=o=-) that moves back and forth but only +while data is being transferred, with a set of flying hash sign symbols on +top. diff --git a/deps/curl/docs/cmdline-opts/proto-default.d b/deps/curl/docs/cmdline-opts/proto-default.d new file mode 100644 index 0000000..d5b4bcd --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proto-default.d @@ -0,0 +1,20 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proto-default +Help: Use PROTOCOL for any URL missing a scheme +Arg: +Added: 7.45.0 +Category: connection curl +Example: --proto-default https ftp.example.com +See-also: proto proto-redir +Multi: single +--- +Tells curl to use *protocol* for any URL missing a scheme name. + +An unknown or unsupported protocol causes error +*CURLE_UNSUPPORTED_PROTOCOL* (1). + +This option does not change the default proxy protocol (http). + +Without this option set, curl guesses protocol based on the host name, see +--url for details. diff --git a/deps/curl/docs/cmdline-opts/proto-redir.d b/deps/curl/docs/cmdline-opts/proto-redir.d new file mode 100644 index 0000000..dec8716 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proto-redir.d @@ -0,0 +1,22 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proto-redir +Arg: +Help: Enable/disable PROTOCOLS on redirect +Added: 7.20.2 +Category: connection curl +Example: --proto-redir =http,https $URL +See-also: proto +Multi: single +--- +Tells curl to limit what protocols it may use on redirect. Protocols denied by +--proto are not overridden by this option. See --proto for how protocols are +represented. + +Example, allow only HTTP and HTTPS on redirect: + + curl --proto-redir -all,http,https http://example.com + +By default curl only allows HTTP, HTTPS, FTP and FTPS on redirects (added in +7.65.2). Specifying *all* or *+all* enables all protocols on redirects, which +is not good for security. diff --git a/deps/curl/docs/cmdline-opts/proto.d b/deps/curl/docs/cmdline-opts/proto.d new file mode 100644 index 0000000..ac024bf --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proto.d @@ -0,0 +1,48 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proto +Arg: +Help: Enable/disable PROTOCOLS +See-also: proto-redir proto-default +Added: 7.20.2 +Category: connection curl +Example: --proto =http,https,sftp $URL +Multi: single +--- +Tells curl to limit what protocols it may use for transfers. Protocols are +evaluated left to right, are comma separated, and are each a protocol name or +'all', optionally prefixed by zero or more modifiers. Available modifiers are: +.RS +.TP 3 +.B + +Permit this protocol in addition to protocols already permitted (this is +the default if no modifier is used). +.TP +.B - +Deny this protocol, removing it from the list of protocols already permitted. +.TP +.B = +Permit only this protocol (ignoring the list already permitted), though +subject to later modification by subsequent entries in the comma separated +list. +.RE +.IP +For example: +.RS +.TP 15 +.B --proto -ftps +uses the default protocols, but disables ftps +.TP +.B --proto -all,https,+http +only enables http and https +.TP +.B --proto =http,https +also only enables http and https +.RE +.IP +Unknown and disabled protocols produce a warning. This allows scripts to +safely rely on being able to disable potentially dangerous protocols, without +relying upon support for that protocol being built into curl to avoid an error. + +This option can be used multiple times, in which case the effect is the same +as concatenating the protocols into one instance of the option. diff --git a/deps/curl/docs/cmdline-opts/proxy-anyauth.d b/deps/curl/docs/cmdline-opts/proxy-anyauth.d new file mode 100644 index 0000000..fa46087 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-anyauth.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-anyauth +Help: Pick any proxy authentication method +Added: 7.13.2 +See-also: proxy proxy-basic proxy-digest +Category: proxy auth +Example: --proxy-anyauth --proxy-user user:passwd -x proxy $URL +Multi: mutex +--- +Tells curl to pick a suitable authentication method when communicating with +the given HTTP proxy. This might cause an extra request/response round-trip. diff --git a/deps/curl/docs/cmdline-opts/proxy-basic.d b/deps/curl/docs/cmdline-opts/proxy-basic.d new file mode 100644 index 0000000..ff56631 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-basic.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-basic +Help: Use Basic authentication on the proxy +See-also: proxy proxy-anyauth proxy-digest +Category: proxy auth +Example: --proxy-basic --proxy-user user:passwd -x proxy $URL +Added: 7.12.0 +Multi: mutex +--- +Tells curl to use HTTP Basic authentication when communicating with the given +proxy. Use --basic for enabling HTTP Basic with a remote host. Basic is the +default authentication method curl uses with proxies. diff --git a/deps/curl/docs/cmdline-opts/proxy-ca-native.d b/deps/curl/docs/cmdline-opts/proxy-ca-native.d new file mode 100644 index 0000000..aab4fca --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-ca-native.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-ca-native +Help: Use CA certificates from the native OS for proxy +Protocols: TLS +Category: tls +See-also: cacert capath insecure +Example: --ca-native $URL +Added: 8.2.0 +Multi: boolean +--- +Tells curl to use the CA store from the native operating system to verify the +HTTPS proxy. By default, curl uses a CA store provided in a single file or +directory, but when using this option it interfaces the operating system's own +vault. + +This option only works for curl on Windows when built to use OpenSSL. When +curl on Windows is built to use Schannel, this feature is implied and curl +then only uses the native CA store. + +curl built with wolfSSL also supports this option (added in 8.3.0). diff --git a/deps/curl/docs/cmdline-opts/proxy-cacert.d b/deps/curl/docs/cmdline-opts/proxy-cacert.d new file mode 100644 index 0000000..45dc3f3 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-cacert.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-cacert +Help: CA certificate to verify peer against for proxy +Arg: +Added: 7.52.0 +See-also: proxy-capath cacert capath proxy +Category: proxy tls +Example: --proxy-cacert CA-file.txt -x https://proxy $URL +Multi: single +--- +Same as --cacert but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-capath.d b/deps/curl/docs/cmdline-opts/proxy-capath.d new file mode 100644 index 0000000..309f940 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-capath.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-capath +Help: CA directory to verify peer against for proxy +Arg: +Added: 7.52.0 +See-also: proxy-cacert proxy capath +Category: proxy tls +Example: --proxy-capath /local/directory -x https://proxy $URL +Multi: single +--- +Same as --capath but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-cert-type.d b/deps/curl/docs/cmdline-opts/proxy-cert-type.d new file mode 100644 index 0000000..4ab38f5 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-cert-type.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-cert-type +Arg: +Added: 7.52.0 +Help: Client certificate type for HTTPS proxy +Category: proxy tls +Example: --proxy-cert-type PEM --proxy-cert file -x https://proxy $URL +See-also: proxy-cert +Multi: single +--- +Same as --cert-type but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-cert.d b/deps/curl/docs/cmdline-opts/proxy-cert.d new file mode 100644 index 0000000..2a869de --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-cert.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-cert +Arg: +Help: Set client certificate for proxy +Added: 7.52.0 +Category: proxy tls +Example: --proxy-cert file -x https://proxy $URL +See-also: proxy-cert-type +Multi: single +--- +Same as --cert but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-ciphers.d b/deps/curl/docs/cmdline-opts/proxy-ciphers.d new file mode 100644 index 0000000..5879f39 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-ciphers.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-ciphers +Arg: +Help: SSL ciphers to use for proxy +Added: 7.52.0 +Category: proxy tls +Example: --proxy-ciphers ECDHE-ECDSA-AES256-CCM8 -x https://proxy $URL +See-also: ciphers curves proxy +Multi: single +--- +Same as --ciphers but used in HTTPS proxy context. + +Specifies which ciphers to use in the connection to the HTTPS proxy. The list +of ciphers must specify valid ciphers. Read up on SSL cipher list details on +this URL: + +https://curl.se/docs/ssl-ciphers.html diff --git a/deps/curl/docs/cmdline-opts/proxy-crlfile.d b/deps/curl/docs/cmdline-opts/proxy-crlfile.d new file mode 100644 index 0000000..1a8fdf2 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-crlfile.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-crlfile +Arg: +Help: Set a CRL list for proxy +Added: 7.52.0 +Category: proxy tls +Example: --proxy-crlfile rejects.txt -x https://proxy $URL +See-also: crlfile proxy +Multi: single +--- +Same as --crlfile but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-digest.d b/deps/curl/docs/cmdline-opts/proxy-digest.d new file mode 100644 index 0000000..c5cb19c --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-digest.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-digest +Help: Use Digest authentication on the proxy +See-also: proxy proxy-anyauth proxy-basic +Category: proxy tls +Example: --proxy-digest --proxy-user user:passwd -x proxy $URL +Added: 7.12.0 +Multi: mutex +--- +Tells curl to use HTTP Digest authentication when communicating with the given +proxy. Use --digest for enabling HTTP Digest with a remote host. diff --git a/deps/curl/docs/cmdline-opts/proxy-header.d b/deps/curl/docs/cmdline-opts/proxy-header.d new file mode 100644 index 0000000..06ae3bc --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-header.d @@ -0,0 +1,32 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-header +Arg:
+Help: Pass custom header(s) to proxy +Protocols: HTTP +Added: 7.37.0 +Category: proxy +Example: --proxy-header "X-First-Name: Joe" -x http://proxy $URL +Example: --proxy-header "User-Agent: surprise" -x http://proxy $URL +Example: --proxy-header "Host:" -x http://proxy $URL +See-also: proxy +Multi: append +--- +Extra header to include in the request when sending HTTP to a proxy. You may +specify any number of extra headers. This is the equivalent option to --header +but is for proxy communication only like in CONNECT requests when you want a +separate header sent to the proxy to what is sent to the actual remote host. + +curl makes sure that each header you add/replace is sent with the proper +end-of-line marker, you should thus **not** add that as a part of the header +content: do not add newlines or carriage returns, they only mess things up for +you. + +Headers specified with this option are not included in requests that curl +knows are not be sent to a proxy. + +This option can take an argument in @filename style, which then adds a header +for each line in the input file (added in 7.55.0). Using @- makes curl read +the headers from stdin. + +This option can be used multiple times to add/replace/remove multiple headers. diff --git a/deps/curl/docs/cmdline-opts/proxy-http2.d b/deps/curl/docs/cmdline-opts/proxy-http2.d new file mode 100644 index 0000000..58f55e7 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-http2.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-http2 +Tags: Versions HTTP/2 +Protocols: HTTP +Added: 8.1.0 +Mutexed: +Requires: HTTP/2 +See-also: proxy +Help: Use HTTP/2 with HTTPS proxy +Category: http proxy +Example: --proxy-http2 -x proxy $URL +Multi: boolean +--- +Tells curl to try negotiate HTTP version 2 with an HTTPS proxy. The proxy might +still only offer HTTP/1 and then curl sticks to using that version. + +This has no effect for any other kinds of proxies. diff --git a/deps/curl/docs/cmdline-opts/proxy-insecure.d b/deps/curl/docs/cmdline-opts/proxy-insecure.d new file mode 100644 index 0000000..beb8c25 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-insecure.d @@ -0,0 +1,11 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-insecure +Help: Do HTTPS proxy connections without verifying the proxy +Added: 7.52.0 +Category: proxy tls +Example: --proxy-insecure -x https://proxy $URL +See-also: proxy insecure +Multi: boolean +--- +Same as --insecure but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-key-type.d b/deps/curl/docs/cmdline-opts/proxy-key-type.d new file mode 100644 index 0000000..3fd11f3 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-key-type.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-key-type +Arg: +Help: Private key file type for proxy +Added: 7.52.0 +Category: proxy tls +Example: --proxy-key-type DER --proxy-key here -x https://proxy $URL +See-also: proxy-key proxy +Multi: single +--- +Same as --key-type but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-key.d b/deps/curl/docs/cmdline-opts/proxy-key.d new file mode 100644 index 0000000..4bf2748 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-key.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-key +Help: Private key for HTTPS proxy +Arg: +Category: proxy tls +Example: --proxy-key here -x https://proxy $URL +Added: 7.52.0 +See-also: proxy-key-type proxy +Multi: single +--- +Same as --key but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-negotiate.d b/deps/curl/docs/cmdline-opts/proxy-negotiate.d new file mode 100644 index 0000000..89b5c1b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-negotiate.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-negotiate +Help: Use HTTP Negotiate (SPNEGO) authentication on the proxy +Added: 7.17.1 +See-also: proxy-anyauth proxy-basic +Category: proxy auth +Example: --proxy-negotiate --proxy-user user:passwd -x proxy $URL +Multi: mutex +--- +Tells curl to use HTTP Negotiate (SPNEGO) authentication when communicating +with the given proxy. Use --negotiate for enabling HTTP Negotiate (SPNEGO) +with a remote host. diff --git a/deps/curl/docs/cmdline-opts/proxy-ntlm.d b/deps/curl/docs/cmdline-opts/proxy-ntlm.d new file mode 100644 index 0000000..f8481e5 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-ntlm.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-ntlm +Help: Use NTLM authentication on the proxy +See-also: proxy-negotiate proxy-anyauth +Category: proxy auth +Example: --proxy-ntlm --proxy-user user:passwd -x http://proxy $URL +Added: 7.10.7 +Multi: mutex +--- +Tells curl to use HTTP NTLM authentication when communicating with the given +proxy. Use --ntlm for enabling NTLM with a remote host. diff --git a/deps/curl/docs/cmdline-opts/proxy-pass.d b/deps/curl/docs/cmdline-opts/proxy-pass.d new file mode 100644 index 0000000..3071399 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-pass.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-pass +Arg: +Help: Pass phrase for the private key for HTTPS proxy +Added: 7.52.0 +Category: proxy tls auth +Example: --proxy-pass secret --proxy-key here -x https://proxy $URL +See-also: proxy proxy-key +Multi: single +--- +Same as --pass but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-pinnedpubkey.d b/deps/curl/docs/cmdline-opts/proxy-pinnedpubkey.d new file mode 100644 index 0000000..7bf99d8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-pinnedpubkey.d @@ -0,0 +1,22 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-pinnedpubkey +Arg: +Help: FILE/HASHES public key to verify proxy with +Protocols: TLS +Category: proxy tls +Example: --proxy-pinnedpubkey keyfile $URL +Example: --proxy-pinnedpubkey 'sha256//ce118b51897f4452dc' $URL +Added: 7.59.0 +See-also: pinnedpubkey proxy +Multi: single +--- +Tells curl to use the specified public key file (or hashes) to verify the +proxy. This can be a path to a file which contains a single public key in PEM +or DER format, or 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 +aborts the connection before sending or receiving any data. diff --git a/deps/curl/docs/cmdline-opts/proxy-service-name.d b/deps/curl/docs/cmdline-opts/proxy-service-name.d new file mode 100644 index 0000000..200973f --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-service-name.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-service-name +Arg: +Help: SPNEGO proxy service name +Added: 7.43.0 +Category: proxy tls +Example: --proxy-service-name "shrubbery" -x proxy $URL +See-also: service-name proxy +Multi: single +--- +This option allows you to change the service name for proxy negotiation. diff --git a/deps/curl/docs/cmdline-opts/proxy-ssl-allow-beast.d b/deps/curl/docs/cmdline-opts/proxy-ssl-allow-beast.d new file mode 100644 index 0000000..55ff62b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-ssl-allow-beast.d @@ -0,0 +1,11 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-ssl-allow-beast +Help: Allow security flaw for interop for HTTPS proxy +Added: 7.52.0 +Category: proxy tls +Example: --proxy-ssl-allow-beast -x https://proxy $URL +See-also: ssl-allow-beast proxy +Multi: boolean +--- +Same as --ssl-allow-beast but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-ssl-auto-client-cert.d b/deps/curl/docs/cmdline-opts/proxy-ssl-auto-client-cert.d new file mode 100644 index 0000000..ea0f0c0 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-ssl-auto-client-cert.d @@ -0,0 +1,11 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-ssl-auto-client-cert +Help: Use auto client certificate for proxy (Schannel) +Added: 7.77.0 +Category: proxy tls +Example: --proxy-ssl-auto-client-cert -x https://proxy $URL +See-also: ssl-auto-client-cert proxy +Multi: boolean +--- +Same as --ssl-auto-client-cert but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-tls13-ciphers.d b/deps/curl/docs/cmdline-opts/proxy-tls13-ciphers.d new file mode 100644 index 0000000..f18c3d5 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-tls13-ciphers.d @@ -0,0 +1,21 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-tls13-ciphers +Arg: +help: TLS 1.3 proxy cipher suites +Protocols: TLS +Category: proxy tls +Example: --proxy-tls13-ciphers TLS_AES_128_GCM_SHA256 -x proxy $URL +Added: 7.61.0 +See-also: tls13-ciphers curves proxy-ciphers +Multi: single +--- +Specifies which cipher suites to use in the connection to your HTTPS proxy +when it negotiates TLS 1.3. The list of ciphers suites must specify valid +ciphers. Read up on TLS 1.3 cipher suite details on this URL: + +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 --proxy-ciphers option. diff --git a/deps/curl/docs/cmdline-opts/proxy-tlsauthtype.d b/deps/curl/docs/cmdline-opts/proxy-tlsauthtype.d new file mode 100644 index 0000000..f83153e --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-tlsauthtype.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-tlsauthtype +Arg: +Help: TLS authentication type for HTTPS proxy +Added: 7.52.0 +Category: proxy tls auth +Example: --proxy-tlsauthtype SRP -x https://proxy $URL +See-also: proxy proxy-tlsuser +Multi: single +--- +Same as --tlsauthtype but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-tlspassword.d b/deps/curl/docs/cmdline-opts/proxy-tlspassword.d new file mode 100644 index 0000000..7ec0140 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-tlspassword.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-tlspassword +Arg: +Help: TLS password for HTTPS proxy +Added: 7.52.0 +Category: proxy tls auth +Example: --proxy-tlspassword passwd -x https://proxy $URL +See-also: proxy proxy-tlsuser +Multi: single +--- +Same as --tlspassword but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-tlsuser.d b/deps/curl/docs/cmdline-opts/proxy-tlsuser.d new file mode 100644 index 0000000..17be7f7 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-tlsuser.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-tlsuser +Arg: +Help: TLS username for HTTPS proxy +Added: 7.52.0 +Category: proxy tls auth +Example: --proxy-tlsuser smith -x https://proxy $URL +See-also: proxy proxy-tlspassword +Multi: single +--- +Same as --tlsuser but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-tlsv1.d b/deps/curl/docs/cmdline-opts/proxy-tlsv1.d new file mode 100644 index 0000000..c434502 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-tlsv1.d @@ -0,0 +1,11 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-tlsv1 +Help: Use TLSv1 for HTTPS proxy +Added: 7.52.0 +Category: proxy tls auth +Example: --proxy-tlsv1 -x https://proxy $URL +See-also: proxy +Multi: mutex +--- +Same as --tlsv1 but used in HTTPS proxy context. diff --git a/deps/curl/docs/cmdline-opts/proxy-user.d b/deps/curl/docs/cmdline-opts/proxy-user.d new file mode 100644 index 0000000..df30de2 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy-user.d @@ -0,0 +1,23 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy-user +Short: U +Arg: +Help: Proxy user and password +Category: proxy auth +Example: --proxy-user name:pwd -x proxy $URL +Added: 4.0 +See-also: proxy-pass +Multi: single +--- +Specify the user name and password to use for proxy authentication. + +If you use a Windows SSPI-enabled curl binary and do either Negotiate or NTLM +authentication then you can tell curl to select the user name and password +from your environment by specifying a single colon with this option: "-U :". + +On systems where it works, curl hides the given option argument from process +listings. This is not enough to protect credentials from possibly getting seen +by other users on the same system as they still are visible for a moment +before cleared. Such sensitive data should be retrieved from a file instead or +similar and never used in clear text in a command line. diff --git a/deps/curl/docs/cmdline-opts/proxy.d b/deps/curl/docs/cmdline-opts/proxy.d new file mode 100644 index 0000000..b7d550a --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy.d @@ -0,0 +1,51 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy +Short: x +Arg: [protocol://]host[:port] +Help: Use this proxy +Category: proxy +Example: --proxy http://proxy.example $URL +Added: 4.0 +See-also: socks5 proxy-basic +Multi: single +--- +Use the specified proxy. + +The proxy string can be specified with a protocol:// prefix. No protocol +specified or http:// it is treated as an HTTP proxy. Use socks4://, +socks4a://, socks5:// or socks5h:// to request a specific SOCKS version to be +used. (Added in 7.21.7) + +Unix domain sockets are supported for socks proxy. Set localhost for the host +part. e.g. socks5h://localhost/path/to/socket.sock + +HTTPS proxy support works set with the https:// protocol prefix for OpenSSL +and GnuTLS (added in 7.52.0). It also works for BearSSL, mbedTLS, rustls, +Schannel, Secure Transport and wolfSSL (added in 7.87.0). + +Unrecognized and unsupported proxy protocols cause an error (added in 7.52.0). +Ancient curl versions ignored unknown schemes and used http:// instead. + +If the port number is not specified in the proxy string, it is assumed to be +1080. + +This option overrides existing environment variables that set the proxy to +use. If there is an environment variable setting a proxy, you can set proxy to +"" to override it. + +All operations that are performed over an HTTP proxy are transparently +converted to HTTP. It means that certain protocol specific operations might +not be available. This is not the case if you can tunnel through the proxy, as +one with the --proxytunnel option. + +User and password that might be provided in the proxy string are URL decoded +by curl. This allows you to pass in special characters such as @ by using %40 +or pass in a colon with %3a. + +The proxy host can be specified the same way as the proxy environment +variables, including the protocol prefix (http://) and the embedded user + +password. + +When a proxy is used, the active FTP mode as set with --ftp-port, cannot be +used. diff --git a/deps/curl/docs/cmdline-opts/proxy1.0.d b/deps/curl/docs/cmdline-opts/proxy1.0.d new file mode 100644 index 0000000..0657a95 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxy1.0.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxy1.0 +Arg: +Help: Use HTTP/1.0 proxy on given port +Category: proxy +Example: --proxy1.0 -x http://proxy $URL +Added: 7.19.4 +See-also: proxy socks5 preproxy +Multi: mutex +--- +Use the specified HTTP 1.0 proxy. If the port number is not specified, it is +assumed at port 1080. + +The only difference between this and the HTTP proxy option --proxy, is that +attempts to use CONNECT through the proxy specifies an HTTP 1.0 protocol +instead of the default HTTP 1.1. diff --git a/deps/curl/docs/cmdline-opts/proxytunnel.d b/deps/curl/docs/cmdline-opts/proxytunnel.d new file mode 100644 index 0000000..5145787 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/proxytunnel.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: proxytunnel +Short: p +Help: Operate through an HTTP proxy tunnel (using CONNECT) +See-also: proxy +Category: proxy +Example: --proxytunnel -x http://proxy $URL +Added: 7.3 +Multi: boolean +--- +When an HTTP proxy is used --proxy, this option makes curl tunnel the traffic +through the proxy. The tunnel approach is made with the HTTP proxy CONNECT +request and requires that the proxy allows direct connect to the remote port +number curl wants to tunnel through to. + +To suppress proxy CONNECT response headers when curl is set to output headers +use --suppress-connect-headers. diff --git a/deps/curl/docs/cmdline-opts/pubkey.d b/deps/curl/docs/cmdline-opts/pubkey.d new file mode 100644 index 0000000..b2f4b72 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/pubkey.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: pubkey +Arg: +Protocols: SFTP SCP +Help: SSH Public key file name +Category: sftp scp auth +Example: --pubkey file.pub sftp://example.com/ +Added: 7.16.2 +See-also: pass +Multi: single +--- +Public key file name. Allows you to provide your public key in this separate +file. + +curl attempts to automatically extract the public key from the private key +file, so passing this option is generally not required. Note that this public +key extraction requires libcurl to be linked against a copy of libssh2 1.2.8 +or higher that is itself linked against OpenSSL. (Added in 7.39.0.) diff --git a/deps/curl/docs/cmdline-opts/quote.d b/deps/curl/docs/cmdline-opts/quote.d new file mode 100644 index 0000000..5008d49 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/quote.d @@ -0,0 +1,87 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: quote +Arg: +Short: Q +Help: Send command(s) to server before transfer +Protocols: FTP SFTP +Category: ftp sftp +Example: --quote "DELE file" ftp://example.com/foo +Added: 5.3 +See-also: request +Multi: append +--- +Send an arbitrary command to the remote FTP or SFTP server. Quote commands are +sent BEFORE the transfer takes place (just after the initial **PWD** command +in an FTP transfer, to be exact). To make commands take place after a +successful transfer, prefix them with a dash '-'. + +(FTP only) To make commands be sent after curl has changed the working +directory, just before the file transfer command(s), prefix the command with a +'+'. This is not performed when a directory listing is performed. + +You may specify any number of commands. + +By default curl stops at first failure. To make curl continue even if the +command fails, prefix the command with an asterisk (*). Otherwise, if the +server returns failure for one of the commands, the entire operation is +aborted. + +You must send syntactically correct FTP commands as RFC 959 defines to FTP +servers, or one of the commands listed below to SFTP servers. + +SFTP is a binary protocol. Unlike for FTP, curl interprets SFTP quote commands +itself before sending them to the server. File names may be quoted +shell-style to embed spaces or special characters. Following is the list of +all supported SFTP quote commands: +.RS +.TP +**"atime date file"** +The atime command sets the last access time of the file named by the file +operand. The can be all sorts of date strings, see the +*curl_getdate(3)* man page for date expression details. (Added in 7.73.0) +.TP +**"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. +.TP +**"chmod mode file"** +The chmod command modifies the file mode bits of the specified file. The +mode operand is an octal integer mode number. +.TP +**"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. +.TP +**"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. +.TP +**"mkdir directory_name"** +The mkdir command creates the directory named by the directory_name operand. +.TP +**"mtime date file"** +The mtime command sets the last modification time of the file named by the +file operand. The can be all sorts of date strings, see the +*curl_getdate(3)* man page for date expression details. (Added in 7.73.0) +.TP +**"pwd"** +The pwd command returns the absolute path name of the current working directory. +.TP +**"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. +.TP +**"rm file"** +The rm command removes the file specified by the file operand. +.TP +**"rmdir directory"** +The rmdir command removes the directory entry specified by the directory +operand, provided it is empty. +.TP +**"symlink source_file target_file"** +See ln. +.RE +.IP diff --git a/deps/curl/docs/cmdline-opts/random-file.d b/deps/curl/docs/cmdline-opts/random-file.d new file mode 100644 index 0000000..aa076de --- /dev/null +++ b/deps/curl/docs/cmdline-opts/random-file.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: random-file +Arg: +Help: File for reading random data from +Category: misc +Example: --random-file rubbish $URL +Added: 7.7 +See-also: egd-file +Multi: single +--- +Deprecated option. This option is ignored (added in 7.84.0). Prior to that it +only had an effect on curl if built to use old versions of OpenSSL. + +Specify the path name to file containing random data. The data may be used to +seed the random engine for SSL connections. diff --git a/deps/curl/docs/cmdline-opts/range.d b/deps/curl/docs/cmdline-opts/range.d new file mode 100644 index 0000000..eba7220 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/range.d @@ -0,0 +1,50 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: range +Short: r +Help: Retrieve only the bytes within RANGE +Arg: +Protocols: HTTP FTP SFTP FILE +Category: http ftp sftp file +Example: --range 22-44 $URL +Added: 4.0 +See-also: continue-at append +Multi: single +--- +Retrieve a byte range (i.e. a partial document) from an HTTP/1.1, FTP or SFTP +server or a local FILE. Ranges can be specified in a number of ways. +.RS +.TP 10 +.B 0-499 +specifies the first 500 bytes +.TP +.B 500-999 +specifies the second 500 bytes +.TP +.B -500 +specifies the last 500 bytes +.TP +.B 9500- +specifies the bytes from offset 9500 and forward +.TP +.B 0-0,-1 +specifies the first and last byte only(*)(HTTP) +.TP +.B 100-199,500-599 +specifies two separate 100-byte ranges(*) (HTTP) +.RE +.IP +(*) = NOTE that this causes the server to reply with a multipart response, +which is returned as-is by curl! Parsing or otherwise transforming this +response is the responsibility of the caller. + +Only digit characters (0-9) are valid in the 'start' and 'stop' fields of the +'start-stop' range syntax. If a non-digit character is given in the range, the +server's response is unspecified, depending on the server's configuration. + +Many HTTP/1.1 servers do not have this feature enabled, so that when you +attempt to get a range, curl instead gets the whole document. + +FTP and SFTP range downloads only support the simple 'start-stop' syntax +(optionally with one of the numbers omitted). FTP use depends on the extended +FTP command SIZE. diff --git a/deps/curl/docs/cmdline-opts/rate.d b/deps/curl/docs/cmdline-opts/rate.d new file mode 100644 index 0000000..d3cbd28 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/rate.d @@ -0,0 +1,35 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: rate +Arg: +Help: Request rate for serial transfers +Category: connection +Example: --rate 2/s $URL ... +Example: --rate 3/h $URL ... +Example: --rate 14/m $URL ... +Added: 7.84.0 +See-also: limit-rate retry-delay +Multi: single +Scope: global +--- +Specify the maximum transfer frequency you allow curl to use - in number of +transfer starts per time unit (sometimes called request rate). Without this +option, curl starts the next transfer as fast as possible. + +If given several URLs and a transfer completes faster than the allowed rate, +curl waits until the next transfer is started to maintain the requested +rate. This option has no effect when --parallel is used. + +The request rate is provided as "N/U" where N is an integer number and U is a +time unit. Supported units are 's' (second), 'm' (minute), 'h' (hour) and 'd' +/(day, as in a 24 hour unit). The default time unit, if no "/U" is provided, +is number of transfers per hour. + +If curl is told to allow 10 requests per minute, it does not start the next +request until 6 seconds have elapsed since the previous transfer was started. + +This function uses millisecond resolution. If the allowed frequency is set +more than 1000 per second, it instead runs unrestricted. + +When retrying transfers, enabled with --retry, the separate retry delay logic +is used and not this setting. diff --git a/deps/curl/docs/cmdline-opts/raw.d b/deps/curl/docs/cmdline-opts/raw.d new file mode 100644 index 0000000..0523d62 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/raw.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: raw +Help: Do HTTP "raw"; no transfer decoding +Added: 7.16.2 +Protocols: HTTP +Category: http +Example: --raw $URL +See-also: tr-encoding +Multi: boolean +--- +When used, it disables all internal HTTP decoding of content or transfer +encodings and instead makes them passed on unaltered, raw. diff --git a/deps/curl/docs/cmdline-opts/referer.d b/deps/curl/docs/cmdline-opts/referer.d new file mode 100644 index 0000000..0609e8c --- /dev/null +++ b/deps/curl/docs/cmdline-opts/referer.d @@ -0,0 +1,20 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: referer +Short: e +Arg: +Protocols: HTTP +Help: Referrer URL +See-also: user-agent header +Category: http +Example: --referer "https://fake.example" $URL +Example: --referer "https://fake.example;auto" -L $URL +Example: --referer ";auto" -L $URL +Added: 4.0 +Multi: single +--- +Sends the "Referrer Page" information to the HTTP server. This can also be set +with the --header flag of course. When used with --location you can append +";auto" to the --referer URL to make curl automatically set the previous URL +when it follows a Location: header. The ";auto" string can be used alone, +even if you do not set an initial --referer. diff --git a/deps/curl/docs/cmdline-opts/remote-header-name.d b/deps/curl/docs/cmdline-opts/remote-header-name.d new file mode 100644 index 0000000..917fe7a --- /dev/null +++ b/deps/curl/docs/cmdline-opts/remote-header-name.d @@ -0,0 +1,34 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: remote-header-name +Short: J +Protocols: HTTP +Help: Use the header-provided filename +Category: output +Example: -OJ https://example.com/file +Added: 7.20.0 +See-also: remote-name +Multi: boolean +--- +This option tells the --remote-name option to use the server-specified +Content-Disposition filename instead of extracting a filename from the URL. If +the server-provided file name contains a path, that is stripped off before the +file name is used. + +The file is saved in the current directory, or in the directory specified with +--output-dir. + +If the server specifies a file name and a file with that name already exists +in the destination directory, it is not overwritten and an error occurs - +unless you allow it by using the --clobber option. If the server does not +specify a file name then this option has no effect. + +There is no attempt to decode %-sequences (yet) in the provided file name, so +this option may provide you with rather unexpected file names. + +This feature uses the name from the "filename" field, it does not yet support +the "filename*" field (filenames with explicit character sets). + +**WARNING**: Exercise judicious use of this option, especially on Windows. A +rogue server could send you the name of a DLL or other file that could be +loaded automatically by Windows or some third party software. diff --git a/deps/curl/docs/cmdline-opts/remote-name-all.d b/deps/curl/docs/cmdline-opts/remote-name-all.d new file mode 100644 index 0000000..249c4e2 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/remote-name-all.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: remote-name-all +Help: Use the remote file name for all URLs +Added: 7.19.0 +Category: output +Example: --remote-name-all ftp://example.com/file1 ftp://example.com/file2 +See-also: remote-name +Multi: boolean +--- +This option changes the default action for all given URLs to be dealt with as +if --remote-name were used for each one. So if you want to disable that for a +specific URL after --remote-name-all has been used, you must use "-o -" or +--no-remote-name. diff --git a/deps/curl/docs/cmdline-opts/remote-name.d b/deps/curl/docs/cmdline-opts/remote-name.d new file mode 100644 index 0000000..215cf72 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/remote-name.d @@ -0,0 +1,28 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: remote-name +Short: O +Help: Write output to a file named as the remote file +Category: important output +Example: -O https://example.com/filename +Added: 4.0 +See-also: remote-name-all output-dir remote-header-name +Multi: append +--- +Write output to a local file named like the remote file we get. (Only the file +part of the remote file is used, the path is cut off.) + +The file is saved in the current working directory. If you want the file saved +in a different directory, make sure you change the current working directory +before invoking curl with this option or use --output-dir. + +The remote file name to use for saving is extracted from the given URL, +nothing else, and if it already exists it is overwritten. If you want the +server to be able to choose the file name refer to --remote-header-name which +can be used in addition to this option. If the server chooses a file name and +that name already exists it is not overwritten. + +There is no URL decoding done on the file name. If it has %20 or other URL +encoded parts of the name, they end up as-is as file name. + +You may use this option as many times as the number of URLs you have. diff --git a/deps/curl/docs/cmdline-opts/remote-time.d b/deps/curl/docs/cmdline-opts/remote-time.d new file mode 100644 index 0000000..6dfb26c --- /dev/null +++ b/deps/curl/docs/cmdline-opts/remote-time.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: remote-time +Short: R +Help: Set the remote file's time on the local output +Category: output +Example: --remote-time -o foo $URL +Added: 7.9 +See-also: remote-name time-cond +Multi: boolean +--- +Makes curl attempt to figure out the timestamp of the remote file that is +getting downloaded, and if that is available make the local file get that same +timestamp. diff --git a/deps/curl/docs/cmdline-opts/remove-on-error.d b/deps/curl/docs/cmdline-opts/remove-on-error.d new file mode 100644 index 0000000..50b7b1b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/remove-on-error.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: remove-on-error +Help: Remove output file on errors +See-also: fail +Category: curl +Example: --remove-on-error -o output $URL +Added: 7.83.0 +Multi: boolean +--- +When curl returns an error when told to save output in a local file, this +option removes that saved file before exiting. This prevents curl from +leaving a partial file in the case of an error during transfer. + +If the output is not a file, this option has no effect. diff --git a/deps/curl/docs/cmdline-opts/request-target.d b/deps/curl/docs/cmdline-opts/request-target.d new file mode 100644 index 0000000..be53c65 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/request-target.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: request-target +Arg: +Help: Specify the target for this request +Protocols: HTTP +Added: 7.55.0 +Category: http +Example: --request-target "*" -X OPTIONS $URL +See-also: request +Multi: single +--- +Tells curl to use an alternative "target" (path) instead of using the path as +provided in the URL. Particularly useful when wanting to issue HTTP requests +without leading slash or other data that does not follow the regular URL +pattern, like "OPTIONS *". + +curl passes on the verbatim string you give it its the request without any +filter or other safe guards. That includes white space and control characters. diff --git a/deps/curl/docs/cmdline-opts/request.d b/deps/curl/docs/cmdline-opts/request.d new file mode 100644 index 0000000..6afd535 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/request.d @@ -0,0 +1,54 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: request +Short: X +Arg: +Help: Specify request method to use +Category: connection +Example: -X "DELETE" $URL +Example: -X NLST ftp://example.com/ +Added: 6.0 +See-also: request-target +Multi: single +--- +Change the method to use when starting the transfer. + +curl passes on the verbatim string you give it its the request without any +filter or other safe guards. That includes white space and control characters. +.RS +.TP 15 +**HTTP** +Specifies a custom request method to use when communicating with the HTTP +server. The specified request method is used instead of the method otherwise +used (which defaults to *GET*). Read the HTTP 1.1 specification for details +and explanations. Common additional HTTP requests include *PUT* and *DELETE*, +but related technologies like WebDAV offers *PROPFIND*, *COPY*, *MOVE* and +more. + +Normally you do not need this option. All sorts of *GET*, *HEAD*, *POST* and +*PUT* requests are rather invoked by using dedicated command line options. + +This option only changes the actual word used in the HTTP request, it does not +alter the way curl behaves. So for example if you want to make a proper HEAD +request, using -X HEAD does not suffice. You need to use the --head option. + +The method string you set with --request is used for all requests, which +if you for example use --location may cause unintended side-effects when curl +does not change request method according to the HTTP 30x response codes - and +similar. +.TP +**FTP** +Specifies a custom FTP command to use instead of *LIST* when doing file lists +with FTP. +.TP +**POP3** +Specifies a custom POP3 command to use instead of *LIST* or *RETR*. +(Added in 7.26.0) +.TP +**IMAP** +Specifies a custom IMAP command to use instead of *LIST*. (Added in 7.30.0) +.TP +**SMTP** +Specifies a custom SMTP command to use instead of *HELP* or **VRFY**. (Added in 7.34.0) +.RE +.IP diff --git a/deps/curl/docs/cmdline-opts/resolve.d b/deps/curl/docs/cmdline-opts/resolve.d new file mode 100644 index 0000000..badb54e --- /dev/null +++ b/deps/curl/docs/cmdline-opts/resolve.d @@ -0,0 +1,39 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: resolve +Arg: <[+]host:port:addr[,addr]...> +Help: Resolve the host+port to this address +Added: 7.21.3 +Category: connection dns +Example: --resolve example.com:443:127.0.0.1 $URL +See-also: connect-to alt-svc +Multi: append +--- +Provide a custom address for a specific host and port pair. Using this, you +can make the curl requests(s) use a specified address and prevent the +otherwise normally resolved address to be used. Consider it a sort of +/etc/hosts alternative provided on the command line. The port number should be +the number used for the specific protocol the host is used for. It means +you need several entries if you want to provide address for the same host but +different ports. + +By specifying '*' as host you can tell curl to resolve any host and specific +port pair to the specified address. Wildcard is resolved last so any --resolve +with a specific host and port is used first. + +The provided address set by this option is used even if --ipv4 or --ipv6 is +set to make curl use another IP version. + +By prefixing the host with a '+' you can make the entry time out after curl's +default timeout (1 minute). Note that this only makes sense for long running +parallel transfers with a lot of files. In such cases, if this option is used +curl tries to resolve the host as it normally would once the timeout has +expired. + +Support for providing the IP address within [brackets] was added in 7.57.0. + +Support for providing multiple IP addresses per entry was added in 7.59.0. + +Support for resolving with wildcard was added in 7.64.0. + +Support for the '+' prefix was was added in 7.75.0. diff --git a/deps/curl/docs/cmdline-opts/retry-all-errors.d b/deps/curl/docs/cmdline-opts/retry-all-errors.d new file mode 100644 index 0000000..1190d6a --- /dev/null +++ b/deps/curl/docs/cmdline-opts/retry-all-errors.d @@ -0,0 +1,34 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: retry-all-errors +Help: Retry all errors (use with --retry) +Added: 7.71.0 +Category: curl +Example: --retry 5 --retry-all-errors $URL +See-also: retry +Multi: boolean +--- +Retry on any error. This option is used together with --retry. + +This option is the "sledgehammer" of retrying. Do not use this option by +default (for example in your **curlrc**), there may be unintended consequences +such as sending or receiving duplicate data. Do not use with redirected input +or output. You'd be much better off handling your unique problems in shell +script. Please read the example below. + +**WARNING**: For server compatibility curl attempts to retry failed flaky +transfers as close as possible to how they were started, but this is not +possible with redirected input or output. For example, before retrying it +removes output data from a failed partial transfer that was written to an +output file. However this is not true of data redirected to a | pipe or > +file, which are not reset. We strongly suggest you do not parse or record +output via redirect in combination with this option, since you may receive +duplicate data. + +By default curl does not return error for transfers with an HTTP response code +that indicates an HTTP error, if the transfer was successful. For example, if +a server replies 404 Not Found and the reply is fully received then that is +not an error. When --retry is used then curl retries on some HTTP response +codes that indicate transient HTTP errors, but that does not include most 4xx +response codes such as 404. If you want to retry on all response codes that +indicate HTTP errors (4xx and 5xx) then combine with --fail. diff --git a/deps/curl/docs/cmdline-opts/retry-connrefused.d b/deps/curl/docs/cmdline-opts/retry-connrefused.d new file mode 100644 index 0000000..a7b9643 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/retry-connrefused.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: retry-connrefused +Help: Retry on connection refused (use with --retry) +Added: 7.52.0 +Category: curl +Example: --retry-connrefused --retry 7 $URL +See-also: retry retry-all-errors +Multi: boolean +--- +In addition to the other conditions, consider ECONNREFUSED as a transient +error too for --retry. This option is used together with --retry. diff --git a/deps/curl/docs/cmdline-opts/retry-delay.d b/deps/curl/docs/cmdline-opts/retry-delay.d new file mode 100644 index 0000000..686a0d8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/retry-delay.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: retry-delay +Arg: +Help: Wait time between retries +Added: 7.12.3 +Category: curl +Example: --retry-delay 5 --retry 7 $URL +See-also: retry +Multi: single +--- +Make curl sleep this amount of time before each retry when a transfer has +failed with a transient error (it changes the default backoff time algorithm +between retries). This option is only interesting if --retry is also +used. Setting this delay to zero makes curl use the default backoff time. diff --git a/deps/curl/docs/cmdline-opts/retry-max-time.d b/deps/curl/docs/cmdline-opts/retry-max-time.d new file mode 100644 index 0000000..de2aff9 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/retry-max-time.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: retry-max-time +Arg: +Help: Retry only within this period +Added: 7.12.3 +Category: curl +Example: --retry-max-time 30 --retry 10 $URL +See-also: retry +Multi: single +--- +The retry timer is reset before the first transfer attempt. Retries are done +as usual (see --retry) as long as the timer has not reached this given +limit. Notice that if the timer has not reached the limit, the request is +made and while performing, it may take longer than this given time period. To +limit a single request's maximum time, use --max-time. Set this option to zero +to not timeout retries. diff --git a/deps/curl/docs/cmdline-opts/retry.d b/deps/curl/docs/cmdline-opts/retry.d new file mode 100644 index 0000000..d49a0cd --- /dev/null +++ b/deps/curl/docs/cmdline-opts/retry.d @@ -0,0 +1,25 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: retry +Arg: +Added: 7.12.3 +Help: Retry request if transient problems occur +Category: curl +Example: --retry 7 $URL +See-also: retry-max-time +Multi: single +--- +If a transient error is returned when curl tries to perform a transfer, it +retries this number of times before giving up. Setting the number to 0 +makes curl do no retries (which is the default). Transient error means either: +a timeout, an FTP 4xx response code or an HTTP 408, 429, 500, 502, 503 or 504 +response code. + +When curl is about to retry a transfer, it first waits one second and then for +all forthcoming retries it doubles the waiting time until it reaches 10 +minutes which then remains delay between the rest of the retries. By using +--retry-delay you disable this exponential backoff algorithm. See also +--retry-max-time to limit the total time allowed for retries. + +curl complies with the Retry-After: response header if one was present to know +when to issue the next retry (added in 7.66.0). diff --git a/deps/curl/docs/cmdline-opts/sasl-authzid.d b/deps/curl/docs/cmdline-opts/sasl-authzid.d new file mode 100644 index 0000000..872818d --- /dev/null +++ b/deps/curl/docs/cmdline-opts/sasl-authzid.d @@ -0,0 +1,19 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: sasl-authzid +Arg: +Help: Identity for SASL PLAIN authentication +Added: 7.66.0 +Category: auth +Example: --sasl-authzid zid imap://example.com/ +See-also: login-options +Multi: single +--- +Use this authorization identity (**authzid**), during SASL PLAIN +authentication, in addition to the authentication identity (**authcid**) as +specified by --user. + +If the option is not specified, the server derives the **authzid** from the +**authcid**, but if specified, and depending on the server implementation, it +may be used to access another user's inbox, that the user has been granted +access to, or a shared mailbox for example. diff --git a/deps/curl/docs/cmdline-opts/sasl-ir.d b/deps/curl/docs/cmdline-opts/sasl-ir.d new file mode 100644 index 0000000..56f1ae8 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/sasl-ir.d @@ -0,0 +1,11 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: sasl-ir +Help: Enable initial response in SASL authentication +Added: 7.31.0 +Category: auth +Example: --sasl-ir imap://example.com/ +See-also: sasl-authzid +Multi: boolean +--- +Enable initial response in SASL authentication. diff --git a/deps/curl/docs/cmdline-opts/service-name.d b/deps/curl/docs/cmdline-opts/service-name.d new file mode 100644 index 0000000..54d7ebf --- /dev/null +++ b/deps/curl/docs/cmdline-opts/service-name.d @@ -0,0 +1,12 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: service-name +Help: SPNEGO service name +Arg: +Added: 7.43.0 +Category: misc +Example: --service-name sockd/server $URL +See-also: negotiate proxy-service-name +Multi: single +--- +This option allows you to change the service name for SPNEGO. diff --git a/deps/curl/docs/cmdline-opts/show-error.d b/deps/curl/docs/cmdline-opts/show-error.d new file mode 100644 index 0000000..f150287 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/show-error.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: show-error +Short: S +Help: Show error even when -s is used +See-also: no-progress-meter +Category: curl +Example: --show-error --silent $URL +Added: 5.9 +Multi: boolean +Scope: global +--- +When used with --silent, it makes curl show an error message if it fails. diff --git a/deps/curl/docs/cmdline-opts/silent.d b/deps/curl/docs/cmdline-opts/silent.d new file mode 100644 index 0000000..74bb299 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/silent.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: silent +Short: s +Help: Silent mode +See-also: verbose stderr no-progress-meter +Category: important verbose +Example: -s $URL +Added: 4.0 +Multi: boolean +--- +Silent or quiet mode. Do not show progress meter or error messages. Makes Curl +mute. It still outputs the data you ask for, potentially even to the +terminal/stdout unless you redirect it. + +Use --show-error in addition to this option to disable progress meter but +still show error messages. diff --git a/deps/curl/docs/cmdline-opts/socks4.d b/deps/curl/docs/cmdline-opts/socks4.d new file mode 100644 index 0000000..d8cf719 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/socks4.d @@ -0,0 +1,28 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: socks4 +Arg: +Help: SOCKS4 proxy on given host + port +Added: 7.15.2 +Category: proxy +Example: --socks4 hostname:4096 $URL +See-also: socks4a socks5 socks5-hostname +Multi: single +--- +Use the specified SOCKS4 proxy. If the port number is not specified, it is +assumed at port 1080. Using this socket type make curl resolve the host name +and passing the address on to the proxy. + +To specify proxy on a unix domain socket, use localhost for host, e.g. +socks4://localhost/path/to/socket.sock + +This option overrides any previous use of --proxy, as they are mutually +exclusive. + +This option is superfluous since you can specify a socks4 proxy with --proxy +using a socks4:// protocol prefix. (Added in 7.21.7) + +--preproxy can be used to specify a SOCKS proxy at the same time proxy is used +with an HTTP/HTTPS proxy (added in 7.52.0). In such a case, curl first +connects to the SOCKS proxy and then connects (through SOCKS) to the HTTP or +HTTPS proxy. diff --git a/deps/curl/docs/cmdline-opts/socks4a.d b/deps/curl/docs/cmdline-opts/socks4a.d new file mode 100644 index 0000000..cbb6272 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/socks4a.d @@ -0,0 +1,27 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: socks4a +Arg: +Help: SOCKS4a proxy on given host + port +Added: 7.18.0 +Category: proxy +Example: --socks4a hostname:4096 $URL +See-also: socks4 socks5 socks5-hostname +Multi: single +--- +Use the specified SOCKS4a proxy. If the port number is not specified, it is +assumed at port 1080. This asks the proxy to resolve the host name. + +To specify proxy on a unix domain socket, use localhost for host, e.g. +socks4a://localhost/path/to/socket.sock + +This option overrides any previous use of --proxy, as they are mutually +exclusive. + +This option is superfluous since you can specify a socks4a proxy with --proxy +using a socks4a:// protocol prefix. (Added in 7.21.7) + +--preproxy can be used to specify a SOCKS proxy at the same time --proxy is +used with an HTTP/HTTPS proxy (added in 7.52.0). In such a case, curl first +connects to the SOCKS proxy and then connects (through SOCKS) to the HTTP or +HTTPS proxy. diff --git a/deps/curl/docs/cmdline-opts/socks5-basic.d b/deps/curl/docs/cmdline-opts/socks5-basic.d new file mode 100644 index 0000000..a16831b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/socks5-basic.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: socks5-basic +Help: Enable username/password auth for SOCKS5 proxies +Added: 7.55.0 +Category: proxy auth +Example: --socks5-basic --socks5 hostname:4096 $URL +See-also: socks5 +Multi: mutex +--- +Tells curl to use username/password authentication when connecting to a SOCKS5 +proxy. The username/password authentication is enabled by default. Use +--socks5-gssapi to force GSS-API authentication to SOCKS5 proxies. diff --git a/deps/curl/docs/cmdline-opts/socks5-gssapi-nec.d b/deps/curl/docs/cmdline-opts/socks5-gssapi-nec.d new file mode 100644 index 0000000..957655a --- /dev/null +++ b/deps/curl/docs/cmdline-opts/socks5-gssapi-nec.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: socks5-gssapi-nec +Help: Compatibility with NEC SOCKS5 server +Added: 7.19.4 +Category: proxy auth +Example: --socks5-gssapi-nec --socks5 hostname:4096 $URL +See-also: socks5 +Multi: boolean +--- +As part of the GSS-API negotiation a protection mode is negotiated. RFC 1961 +says in section 4.3/4.4 it should be protected, but the NEC reference +implementation does not. The option --socks5-gssapi-nec allows the +unprotected exchange of the protection mode negotiation. diff --git a/deps/curl/docs/cmdline-opts/socks5-gssapi-service.d b/deps/curl/docs/cmdline-opts/socks5-gssapi-service.d new file mode 100644 index 0000000..66c2f33 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/socks5-gssapi-service.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: socks5-gssapi-service +Arg: +Help: SOCKS5 proxy service name for GSS-API +Added: 7.19.4 +Category: proxy auth +Example: --socks5-gssapi-service sockd --socks5 hostname:4096 $URL +See-also: socks5 +Multi: single +--- +The default service name for a socks server is **rcmd/server-fqdn**. This option +allows you to change it. diff --git a/deps/curl/docs/cmdline-opts/socks5-gssapi.d b/deps/curl/docs/cmdline-opts/socks5-gssapi.d new file mode 100644 index 0000000..cec684f --- /dev/null +++ b/deps/curl/docs/cmdline-opts/socks5-gssapi.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: socks5-gssapi +Help: Enable GSS-API auth for SOCKS5 proxies +Added: 7.55.0 +Category: proxy auth +Example: --socks5-gssapi --socks5 hostname:4096 $URL +See-also: socks5 +Multi: boolean +--- +Tells curl to use GSS-API authentication when connecting to a SOCKS5 proxy. +The GSS-API authentication is enabled by default (if curl is compiled with +GSS-API support). Use --socks5-basic to force username/password authentication +to SOCKS5 proxies. diff --git a/deps/curl/docs/cmdline-opts/socks5-hostname.d b/deps/curl/docs/cmdline-opts/socks5-hostname.d new file mode 100644 index 0000000..ee49ca6 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/socks5-hostname.d @@ -0,0 +1,27 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: socks5-hostname +Arg: +Help: SOCKS5 proxy, pass host name to proxy +Added: 7.18.0 +Category: proxy +Example: --socks5-hostname proxy.example:7000 $URL +See-also: socks5 socks4a +Multi: single +--- +Use the specified SOCKS5 proxy (and let the proxy resolve the host name). If +the port number is not specified, it is assumed at port 1080. + +To specify proxy on a unix domain socket, use localhost for host, e.g. +socks5h://localhost/path/to/socket.sock + +This option overrides any previous use of --proxy, as they are mutually +exclusive. + +This option is superfluous since you can specify a socks5 hostname proxy with +--proxy using a socks5h:// protocol prefix. (Added in 7.21.7) + +--preproxy can be used to specify a SOCKS proxy at the same time --proxy is +used with an HTTP/HTTPS proxy (added in 7.52.0). In such a case, curl first +connects to the SOCKS proxy and then connects (through SOCKS) to the HTTP or +HTTPS proxy. diff --git a/deps/curl/docs/cmdline-opts/socks5.d b/deps/curl/docs/cmdline-opts/socks5.d new file mode 100644 index 0000000..0e52166 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/socks5.d @@ -0,0 +1,29 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: socks5 +Arg: +Help: SOCKS5 proxy on given host + port +Added: 7.18.0 +Category: proxy +Example: --socks5 proxy.example:7000 $URL +See-also: socks5-hostname socks4a +Multi: single +--- +Use the specified SOCKS5 proxy - but resolve the host name locally. If the +port number is not specified, it is assumed at port 1080. + +To specify proxy on a unix domain socket, use localhost for host, e.g. +socks5://localhost/path/to/socket.sock + +This option overrides any previous use of --proxy, as they are mutually +exclusive. + +This option is superfluous since you can specify a socks5 proxy with --proxy +using a socks5:// protocol prefix. (Added in 7.21.7) + +--preproxy can be used to specify a SOCKS proxy at the same time --proxy is +used with an HTTP/HTTPS proxy (added in 7.52.0). In such a case, curl first +connects to the SOCKS proxy and then connects (through SOCKS) to the HTTP or +HTTPS proxy. + +This option (as well as --socks4) does not work with IPV6, FTPS or LDAP. diff --git a/deps/curl/docs/cmdline-opts/speed-limit.d b/deps/curl/docs/cmdline-opts/speed-limit.d new file mode 100644 index 0000000..dc9778d --- /dev/null +++ b/deps/curl/docs/cmdline-opts/speed-limit.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: speed-limit +Short: Y +Arg: +Help: Stop transfers slower than this +Category: connection +Example: --speed-limit 300 --speed-time 10 $URL +Added: 4.7 +See-also: speed-time limit-rate max-time +Multi: single +--- +If a transfer is slower than this given speed (in bytes per second) for +speed-time seconds it gets aborted. speed-time is set with --speed-time and is +30 if not set. diff --git a/deps/curl/docs/cmdline-opts/speed-time.d b/deps/curl/docs/cmdline-opts/speed-time.d new file mode 100644 index 0000000..4a88606 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/speed-time.d @@ -0,0 +1,18 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: speed-time +Short: y +Arg: +Help: Trigger 'speed-limit' abort after this time +Category: connection +Example: --speed-limit 300 --speed-time 10 $URL +Added: 4.7 +See-also: speed-limit limit-rate +Multi: single +--- +If a transfer runs slower than speed-limit bytes per second during a +speed-time period, the transfer is aborted. If speed-time is used, the default +speed-limit is 1 unless set with --speed-limit. + +This option controls transfers (in both directions) but does not affect slow +connects etc. If this is a concern for you, try the --connect-timeout option. diff --git a/deps/curl/docs/cmdline-opts/ssl-allow-beast.d b/deps/curl/docs/cmdline-opts/ssl-allow-beast.d new file mode 100644 index 0000000..2547675 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ssl-allow-beast.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ssl-allow-beast +Help: Allow security flaw to improve interop +Added: 7.25.0 +Category: tls +Example: --ssl-allow-beast $URL +See-also: proxy-ssl-allow-beast insecure +Multi: boolean +--- +This option tells curl to not work around a security flaw in the SSL3 and +TLS1.0 protocols known as BEAST. If this option is not used, the SSL layer +may use workarounds known to cause interoperability problems with some older +SSL implementations. + +**WARNING**: this option loosens the SSL security, and by using this flag you +ask for exactly that. diff --git a/deps/curl/docs/cmdline-opts/ssl-auto-client-cert.d b/deps/curl/docs/cmdline-opts/ssl-auto-client-cert.d new file mode 100644 index 0000000..5328ade --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ssl-auto-client-cert.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ssl-auto-client-cert +Help: Use auto client certificate (Schannel) +Added: 7.77.0 +See-also: proxy-ssl-auto-client-cert +Category: tls +Example: --ssl-auto-client-cert $URL +Multi: boolean +--- +(Schannel) Tell libcurl to automatically locate and use a client certificate +for authentication, when requested by the server. Since the server can request +any certificate that supports client authentication in the OS certificate +store it could be a privacy violation and unexpected. diff --git a/deps/curl/docs/cmdline-opts/ssl-no-revoke.d b/deps/curl/docs/cmdline-opts/ssl-no-revoke.d new file mode 100644 index 0000000..37e91d9 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ssl-no-revoke.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ssl-no-revoke +Help: Disable cert revocation checks (Schannel) +Added: 7.44.0 +Category: tls +Example: --ssl-no-revoke $URL +See-also: crlfile +Multi: boolean +--- +(Schannel) This option tells curl to disable certificate revocation checks. +WARNING: this option loosens the SSL security, and by using this flag you ask +for exactly that. diff --git a/deps/curl/docs/cmdline-opts/ssl-reqd.d b/deps/curl/docs/cmdline-opts/ssl-reqd.d new file mode 100644 index 0000000..8a5b857 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ssl-reqd.d @@ -0,0 +1,23 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ssl-reqd +Help: Require SSL/TLS +Protocols: FTP IMAP POP3 SMTP LDAP +Added: 7.20.0 +Category: tls +Example: --ssl-reqd ftp://example.com +See-also: ssl insecure +Multi: boolean +--- +Require SSL/TLS for the connection. Terminates the connection if the transfer +cannot be upgraded to use SSL/TLS. + +This option is handled in LDAP (added in 7.81.0). It is fully supported by the +OpenLDAP backend and rejected by the generic ldap backend if explicit TLS is +required. + +This option is unnecessary if you use a URL scheme that in itself implies +immediate and implicit use of TLS, like for FTPS, IMAPS, POP3S, SMTPS and +LDAPS. Such a transfer always fails if the TLS handshake does not work. + +This option was formerly known as --ftp-ssl-reqd. diff --git a/deps/curl/docs/cmdline-opts/ssl-revoke-best-effort.d b/deps/curl/docs/cmdline-opts/ssl-revoke-best-effort.d new file mode 100644 index 0000000..cb26d0b --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ssl-revoke-best-effort.d @@ -0,0 +1,13 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ssl-revoke-best-effort +Help: Ignore missing/offline cert CRL dist points (Schannel) +Added: 7.70.0 +Category: tls +Example: --ssl-revoke-best-effort $URL +See-also: crlfile insecure +Multi: boolean +--- +(Schannel) This option tells curl to ignore certificate revocation checks when +they failed due to missing/offline distribution points for the revocation check +lists. diff --git a/deps/curl/docs/cmdline-opts/ssl.d b/deps/curl/docs/cmdline-opts/ssl.d new file mode 100644 index 0000000..b8fd22a --- /dev/null +++ b/deps/curl/docs/cmdline-opts/ssl.d @@ -0,0 +1,26 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: ssl +Help: Try SSL/TLS +Protocols: FTP IMAP POP3 SMTP LDAP +Added: 7.20.0 +Category: tls +Example: --ssl pop3://example.com/ +See-also: ssl-reqd insecure ciphers +Multi: boolean +--- +Warning: this is considered an insecure option. Consider using --ssl-reqd +instead to be sure curl upgrades to a secure connection. + +Try to use SSL/TLS for the connection. Reverts to a non-secure connection if +the server does not support SSL/TLS. See also --ftp-ssl-control and --ssl-reqd +for different levels of encryption required. + +This option is handled in LDAP (added in 7.81.0). It is fully supported by the +OpenLDAP backend and ignored by the generic ldap backend. + +Please note that a server may close the connection if the negotiation does +not succeed. + +This option was formerly known as --ftp-ssl (added in 7.11.0). That option +name can still be used but might be removed in a future version. diff --git a/deps/curl/docs/cmdline-opts/sslv2.d b/deps/curl/docs/cmdline-opts/sslv2.d new file mode 100644 index 0000000..3ecf109 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/sslv2.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: 2 +Long: sslv2 +Tags: Versions +Protocols: SSL +Added: 5.9 +Mutexed: sslv3 tlsv1 tlsv1.1 tlsv1.2 +Requires: TLS +See-also: http1.1 http2 +Help: Use SSLv2 +Category: tls +Example: --sslv2 $URL +Multi: mutex +--- +This option previously asked curl to use SSLv2, but is now ignored +(added in 7.77.0). SSLv2 is widely considered insecure (see RFC 6176). diff --git a/deps/curl/docs/cmdline-opts/sslv3.d b/deps/curl/docs/cmdline-opts/sslv3.d new file mode 100644 index 0000000..409afc6 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/sslv3.d @@ -0,0 +1,17 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Short: 3 +Long: sslv3 +Tags: Versions +Protocols: SSL +Added: 5.9 +Mutexed: sslv2 tlsv1 tlsv1.1 tlsv1.2 +Requires: TLS +See-also: http1.1 http2 +Help: Use SSLv3 +Category: tls +Example: --sslv3 $URL +Multi: mutex +--- +This option previously asked curl to use SSLv3, but is now ignored +(added in 7.77.0). SSLv3 is widely considered insecure (see RFC 7568). diff --git a/deps/curl/docs/cmdline-opts/stderr.d b/deps/curl/docs/cmdline-opts/stderr.d new file mode 100644 index 0000000..a80bf43 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/stderr.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: stderr +Arg: +Help: Where to redirect stderr +See-also: verbose silent +Category: verbose +Example: --stderr output.txt $URL +Added: 6.2 +Multi: single +Scope: global +--- +Redirect all writes to stderr to the specified file instead. If the file name +is a plain '-', it is instead written to stdout. diff --git a/deps/curl/docs/cmdline-opts/styled-output.d b/deps/curl/docs/cmdline-opts/styled-output.d new file mode 100644 index 0000000..70e9da4 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/styled-output.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: styled-output +Help: Enable styled output for HTTP headers +Added: 7.61.0 +Category: verbose +Example: --styled-output -I $URL +See-also: head verbose +Multi: boolean +Scope: global +--- +Enables the automatic use of bold font styles when writing HTTP headers to the +terminal. Use --no-styled-output to switch them off. + +Styled output requires a terminal that supports bold fonts. This feature is +not present on curl for Windows due to lack of this capability. diff --git a/deps/curl/docs/cmdline-opts/suppress-connect-headers.d b/deps/curl/docs/cmdline-opts/suppress-connect-headers.d new file mode 100644 index 0000000..ed38f36 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/suppress-connect-headers.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: suppress-connect-headers +Help: Suppress proxy CONNECT response headers +See-also: dump-header include proxytunnel +Category: proxy +Example: --suppress-connect-headers --include -x proxy $URL +Added: 7.54.0 +Multi: boolean +--- +When --proxytunnel is used and a CONNECT request is made do not output proxy +CONNECT response headers. This option is meant to be used with --dump-header or +--include which are used to show protocol headers in the output. It has no +effect on debug options such as --verbose or --trace, or any statistics. diff --git a/deps/curl/docs/cmdline-opts/tcp-fastopen.d b/deps/curl/docs/cmdline-opts/tcp-fastopen.d new file mode 100644 index 0000000..bcf1edb --- /dev/null +++ b/deps/curl/docs/cmdline-opts/tcp-fastopen.d @@ -0,0 +1,14 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: tcp-fastopen +Added: 7.49.0 +Help: Use TCP Fast Open +Category: connection +Example: --tcp-fastopen $URL +See-also: false-start +Multi: boolean +--- + +Enable use of TCP Fast Open (RFC 7413). TCP Fast Open is a TCP extension that +allows data to get sent earlier over the connection (before the final +handshake ACK) if the client and server have been connected previously. diff --git a/deps/curl/docs/cmdline-opts/tcp-nodelay.d b/deps/curl/docs/cmdline-opts/tcp-nodelay.d new file mode 100644 index 0000000..2bf51cb --- /dev/null +++ b/deps/curl/docs/cmdline-opts/tcp-nodelay.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: tcp-nodelay +Help: Use the TCP_NODELAY option +Added: 7.11.2 +Category: connection +Example: --tcp-nodelay $URL +See-also: no-buffer +Multi: boolean +--- +Turn on the TCP_NODELAY option. See the *curl_easy_setopt(3)* man page for +details about this option. + +curl sets this option by default and you need to explicitly switch it off if +you do not want it on (added in 7.50.2). diff --git a/deps/curl/docs/cmdline-opts/telnet-option.d b/deps/curl/docs/cmdline-opts/telnet-option.d new file mode 100644 index 0000000..651ce42 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/telnet-option.d @@ -0,0 +1,23 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: telnet-option +Short: t +Arg: +Help: Set telnet option +Category: telnet +Example: -t TTYPE=vt100 telnet://example.com/ +Added: 7.7 +See-also: config +Multi: append +--- +Pass options to the telnet protocol. Supported options are: + +.RS +.TP 15 +**TTYPE**= Sets the terminal type. +.TP +**XDISPLOC**= Sets the X display location. +.TP +**NEW_ENV**= Sets an environment variable. +.RE +.IP diff --git a/deps/curl/docs/cmdline-opts/tftp-blksize.d b/deps/curl/docs/cmdline-opts/tftp-blksize.d new file mode 100644 index 0000000..76c7ee4 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/tftp-blksize.d @@ -0,0 +1,15 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: tftp-blksize +Arg: +Help: Set TFTP BLKSIZE option +Protocols: TFTP +Added: 7.20.0 +Category: tftp +Example: --tftp-blksize 1024 tftp://example.com/file +See-also: tftp-no-options +Multi: single +--- +Set the TFTP **BLKSIZE** option (must be >512). This is the block size that +curl tries to use when transferring data to or from a TFTP server. By +default 512 bytes are used. diff --git a/deps/curl/docs/cmdline-opts/tftp-no-options.d b/deps/curl/docs/cmdline-opts/tftp-no-options.d new file mode 100644 index 0000000..43b1c00 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/tftp-no-options.d @@ -0,0 +1,16 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: tftp-no-options +Help: Do not send any TFTP options +Protocols: TFTP +Added: 7.48.0 +Category: tftp +Example: --tftp-no-options tftp://192.168.0.1/ +See-also: tftp-blksize +Multi: boolean +--- +Tells curl not to send TFTP options requests. + +This option improves interop with some legacy servers that do not acknowledge +or properly implement TFTP options. When this option is used --tftp-blksize is +ignored. diff --git a/deps/curl/docs/cmdline-opts/time-cond.d b/deps/curl/docs/cmdline-opts/time-cond.d new file mode 100644 index 0000000..c21ed28 --- /dev/null +++ b/deps/curl/docs/cmdline-opts/time-cond.d @@ -0,0 +1,27 @@ +c: Copyright (C) Daniel Stenberg, , et al. +SPDX-License-Identifier: curl +Long: time-cond +Short: z +Arg: